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 <vda.linux@googlemail.com>
This commit is contained in:
parent
5eceafb1f8
commit
b30d345cfd
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "common_bufsiz.h"
|
#include "common_bufsiz.h"
|
||||||
|
#include "unicode.h"
|
||||||
|
|
||||||
#define prefix_buf bb_common_bufsiz1
|
#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;
|
struct dirent **entries;
|
||||||
int index, size;
|
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
|
// read directory entries
|
||||||
size = scandir(directory_name, &entries, NULL, alphasort);
|
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);
|
status = lstat(dirent->d_name, &statBuf);
|
||||||
|
|
||||||
if (index == size) {
|
if (index == size) {
|
||||||
strcpy(prefix_pos, "└── ");
|
strcpy(prefix_pos, end);
|
||||||
} else {
|
} else {
|
||||||
strcpy(prefix_pos, "├── ");
|
strcpy(prefix_pos, mid);
|
||||||
}
|
}
|
||||||
fputs_stdout(prefix_buf);
|
fputs_stdout(prefix_buf);
|
||||||
|
|
||||||
@ -75,7 +87,7 @@ static void tree_print(unsigned count[2], const char* directory_name, char* pref
|
|||||||
if (index == size) {
|
if (index == size) {
|
||||||
pos = stpcpy(prefix_pos, " ");
|
pos = stpcpy(prefix_pos, " ");
|
||||||
} else {
|
} else {
|
||||||
pos = stpcpy(prefix_pos, "│ ");
|
pos = stpcpy(prefix_pos, bar);
|
||||||
}
|
}
|
||||||
tree_print(count, dirent->d_name, pos);
|
tree_print(count, dirent->d_name, pos);
|
||||||
count[0]++;
|
count[0]++;
|
||||||
@ -103,6 +115,7 @@ int tree_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
unsigned count[2] = { 0, 0 };
|
unsigned count[2] = { 0, 0 };
|
||||||
|
|
||||||
setup_common_bufsiz();
|
setup_common_bufsiz();
|
||||||
|
init_unicode();
|
||||||
|
|
||||||
if (!argv[1])
|
if (!argv[1])
|
||||||
*argv-- = (char*)".";
|
*argv-- = (char*)".";
|
||||||
|
Loading…
Reference in New Issue
Block a user