diff options
author | Ron Yorston <rmy@pobox.com> | 2023-06-01 14:30:48 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2023-06-01 14:30:48 +0100 |
commit | b7a30ac995544f9dfacf7b200f2a75717060037a (patch) | |
tree | 511dae5029903f9b02017361e31370e196cfbf70 | |
parent | a1ccb78df0a218d8fa760015f82bca6b7939b95b (diff) | |
download | busybox-w32-b7a30ac995544f9dfacf7b200f2a75717060037a.tar.gz busybox-w32-b7a30ac995544f9dfacf7b200f2a75717060037a.tar.bz2 busybox-w32-b7a30ac995544f9dfacf7b200f2a75717060037a.zip |
ls: allow hidden system files to be omitted
The 'ls' applet in busybox-w32 treated files with the hidden
attribute as though they had a leading '.'. Some such files
also have the system attribute set. Since these aren't of
much interest to most users and since several of them have long
unsightly names there's some advantage in allowing them to be
omitted from the listing.
Implement this by omitting hidden system files if the '-a' or '-A'
option is given twice.
Adds 80-88 bytes
(GitHub issue #328)
-rw-r--r-- | coreutils/ls.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c index 3c659294c..d15588a13 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c | |||
@@ -109,8 +109,11 @@ | |||
109 | //usage:#define ls_full_usage "\n\n" | 109 | //usage:#define ls_full_usage "\n\n" |
110 | //usage: "List directory contents\n" | 110 | //usage: "List directory contents\n" |
111 | //usage: "\n -1 One column output" | 111 | //usage: "\n -1 One column output" |
112 | //usage: "\n -a Include names starting with ." | 112 | //usage: "\n -a Include names starting with ." IF_PLATFORM_MINGW32(" and hidden files") |
113 | //usage: "\n -A Like -a, but exclude . and .." | 113 | //usage: "\n -A Like -a, but exclude . and .." |
114 | //usage: IF_PLATFORM_MINGW32( | ||
115 | //usage: "\n -aa,-AA Like -a,-A but omit hidden system files" | ||
116 | //usage: ) | ||
114 | ////usage: "\n -C List by columns" - don't show, this is a default anyway | 117 | ////usage: "\n -C List by columns" - don't show, this is a default anyway |
115 | //usage: "\n -x List by lines" | 118 | //usage: "\n -x List by lines" |
116 | //usage: "\n -d List directory names, not contents" | 119 | //usage: "\n -d List directory names, not contents" |
@@ -340,6 +343,10 @@ struct globals { | |||
340 | /* Do time() just once. Saves one syscall per file for "ls -l" */ | 343 | /* Do time() just once. Saves one syscall per file for "ls -l" */ |
341 | time_t current_time_t; | 344 | time_t current_time_t; |
342 | #endif | 345 | #endif |
346 | #if ENABLE_PLATFORM_MINGW32 | ||
347 | int a_count, A_count; | ||
348 | # define HIDSYS (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM) | ||
349 | #endif | ||
343 | } FIX_ALIASING; | 350 | } FIX_ALIASING; |
344 | #define G (*(struct globals*)bb_common_bufsiz1) | 351 | #define G (*(struct globals*)bb_common_bufsiz1) |
345 | #define INIT_G() do { \ | 352 | #define INIT_G() do { \ |
@@ -974,7 +981,10 @@ static struct dnode **scan_one_dir(const char *path, unsigned *nfiles_p) | |||
974 | if (!cur) { | 981 | if (!cur) { |
975 | #else | 982 | #else |
976 | if (!cur || ((cur->dn_attr & FILE_ATTRIBUTE_HIDDEN) && | 983 | if (!cur || ((cur->dn_attr & FILE_ATTRIBUTE_HIDDEN) && |
977 | !(option_mask32 & (OPT_a|OPT_A)))) { | 984 | !(option_mask32 & (OPT_a|OPT_A))) || |
985 | (((cur->dn_attr & HIDSYS) == HIDSYS) && | ||
986 | MAX(G.a_count, G.A_count) > 1) | ||
987 | ) { | ||
978 | /* skip invalid or hidden files */ | 988 | /* skip invalid or hidden files */ |
979 | #endif | 989 | #endif |
980 | free(fullname); | 990 | free(fullname); |
@@ -1166,9 +1176,11 @@ int ls_main(int argc UNUSED_PARAM, char **argv) | |||
1166 | IF_FEATURE_LS_TIMESTAMPS(":c-u:u-c") /* mtime/atime */ | 1176 | IF_FEATURE_LS_TIMESTAMPS(":c-u:u-c") /* mtime/atime */ |
1167 | /* -w NUM: */ | 1177 | /* -w NUM: */ |
1168 | IF_FEATURE_LS_WIDTH(":w+") | 1178 | IF_FEATURE_LS_WIDTH(":w+") |
1179 | IF_PLATFORM_MINGW32(":aa:AA") | ||
1169 | , ls_longopts | 1180 | , ls_longopts |
1170 | IF_FEATURE_LS_WIDTH(, /*-T*/ NULL, /*-w*/ &G_terminal_width) | 1181 | IF_FEATURE_LS_WIDTH(, /*-T*/ NULL, /*-w*/ &G_terminal_width) |
1171 | IF_FEATURE_LS_COLOR(, &color_opt) | 1182 | IF_FEATURE_LS_COLOR(, &color_opt) |
1183 | IF_PLATFORM_MINGW32(, &G.a_count, &G.A_count) | ||
1172 | ); | 1184 | ); |
1173 | #if 0 /* option bits debug */ | 1185 | #if 0 /* option bits debug */ |
1174 | bb_error_msg("opt:0x%08x l:%x H:%x color:%x dirs:%x", opt, OPT_l, OPT_H, OPT_color, OPT_dirs_first); | 1186 | bb_error_msg("opt:0x%08x l:%x H:%x color:%x dirs:%x", opt, OPT_l, OPT_H, OPT_color, OPT_dirs_first); |