From b30d345cfd995f111797f3377a3caaa263616081 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 26 Aug 2022 14:41:42 +0200 Subject: [PATCH] tree: make it unicode-aware function old new delta tree_print 396 420 +24 .rodata 105251 105266 +15 tree_main 86 91 +5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 44/0) Total: 44 bytes Signed-off-by: Denys Vlasenko --- miscutils/tree.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/miscutils/tree.c b/miscutils/tree.c index 8b16c5383..10e5481c4 100644 --- a/miscutils/tree.c +++ b/miscutils/tree.c @@ -19,6 +19,7 @@ #include "libbb.h" #include "common_bufsiz.h" +#include "unicode.h" #define prefix_buf bb_common_bufsiz1 @@ -26,6 +27,17 @@ static void tree_print(unsigned count[2], const char* directory_name, char* pref { struct dirent **entries; int index, size; + const char *bar = "| "; + const char *mid = "|-- "; + const char *end = "`-- "; + +#if ENABLE_UNICODE_SUPPORT + if (unicode_status == UNICODE_ON) { + bar = "│   "; + mid = "├── "; + end = "└── "; + } +#endif // read directory entries size = scandir(directory_name, &entries, NULL, alphasort); @@ -55,9 +67,9 @@ static void tree_print(unsigned count[2], const char* directory_name, char* pref status = lstat(dirent->d_name, &statBuf); if (index == size) { - strcpy(prefix_pos, "└── "); + strcpy(prefix_pos, end); } else { - strcpy(prefix_pos, "├── "); + strcpy(prefix_pos, mid); } fputs_stdout(prefix_buf); @@ -75,7 +87,7 @@ static void tree_print(unsigned count[2], const char* directory_name, char* pref if (index == size) { pos = stpcpy(prefix_pos, " "); } else { - pos = stpcpy(prefix_pos, "│   "); + pos = stpcpy(prefix_pos, bar); } tree_print(count, dirent->d_name, pos); count[0]++; @@ -103,6 +115,7 @@ int tree_main(int argc UNUSED_PARAM, char **argv) unsigned count[2] = { 0, 0 }; setup_common_bufsiz(); + init_unicode(); if (!argv[1]) *argv-- = (char*)".";