diff options
author | Ron Yorston <rmy@pobox.com> | 2023-01-23 10:40:57 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2023-01-23 10:40:57 +0000 |
commit | 1a88782fd33db4ad3531b63c9fb744c64282fee2 (patch) | |
tree | 65e826528ab2f57ebfb12c74e9b13898157de783 /coreutils | |
parent | afbf21c45d2e6a710aa27cb2784a540bb3ceedea (diff) | |
download | busybox-w32-1a88782fd33db4ad3531b63c9fb744c64282fee2.tar.gz busybox-w32-1a88782fd33db4ad3531b63c9fb744c64282fee2.tar.bz2 busybox-w32-1a88782fd33db4ad3531b63c9fb744c64282fee2.zip |
win32: only count subdirectories if necessary
Commit 7fb95a2a5 (win32: try to get link count for directories)
allowed stat(2) to report accurate values of st_nlink for
directories.
There are only a couple of places in busybox-w32 where these values
are required. Disable counting of subdirectories by default and
only enable it when necessary.
Microsoft kindly provide directories to test edge cases like this:
C:/Windows/WinSxS (contains many subdirectories)
C:/Windows/WinSxS/Manifests (contains many files)
Adds 84-112 bytes.
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/ls.c | 6 | ||||
-rw-r--r-- | coreutils/stat.c | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/coreutils/ls.c b/coreutils/ls.c index d8cfe27d3..3c659294c 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c | |||
@@ -1241,6 +1241,12 @@ int ls_main(int argc UNUSED_PARAM, char **argv) | |||
1241 | option_mask32 |= OPT_dirs_first; | 1241 | option_mask32 |= OPT_dirs_first; |
1242 | } | 1242 | } |
1243 | 1243 | ||
1244 | #if ENABLE_FEATURE_EXTRA_FILE_DATA | ||
1245 | /* Enable accurate link counts for directories */ | ||
1246 | if (opt & OPT_l) | ||
1247 | count_subdirs(NULL); | ||
1248 | #endif | ||
1249 | |||
1244 | argv += optind; | 1250 | argv += optind; |
1245 | if (!argv[0]) | 1251 | if (!argv[0]) |
1246 | *--argv = (char*)"."; | 1252 | *--argv = (char*)"."; |
diff --git a/coreutils/stat.c b/coreutils/stat.c index 940ade89a..dc20c2356 100644 --- a/coreutils/stat.c +++ b/coreutils/stat.c | |||
@@ -785,6 +785,10 @@ int stat_main(int argc UNUSED_PARAM, char **argv) | |||
785 | selinux_or_die(); | 785 | selinux_or_die(); |
786 | } | 786 | } |
787 | #endif | 787 | #endif |
788 | #if ENABLE_FEATURE_EXTRA_FILE_DATA | ||
789 | /* Enable accurate link counts for directories */ | ||
790 | count_subdirs(NULL); | ||
791 | #endif | ||
788 | ok = 1; | 792 | ok = 1; |
789 | argv += optind; | 793 | argv += optind; |
790 | for (i = 0; argv[i]; ++i) | 794 | for (i = 0; argv[i]; ++i) |