39 lines
1.3 KiB
Diff
39 lines
1.3 KiB
Diff
|
From: Kamil Dudka <kdudka@redhat.com>
|
||
|
Date: Wed, 30 Jul 2008 12:31:50 +0000 (+0200)
|
||
|
Subject: ls -U1 now uses constant memory
|
||
|
X-Git-Url: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff_plain;h=8d974b00fbbc2025de63e1e6d54827648fefa1c4
|
||
|
|
||
|
ls -U1 now uses constant memory
|
||
|
|
||
|
When printing one name per line and not sorting, ls now uses
|
||
|
constant memory per directory, no matter how many files are in
|
||
|
the directory.
|
||
|
* ls.c (print_dir): Print each file name immediately, when possible.
|
||
|
---
|
||
|
|
||
|
diff --git a/src/ls.c b/src/ls.c
|
||
|
index 4b69f7d..a661c06 100644
|
||
|
--- a/src/ls.c
|
||
|
+++ b/src/ls.c
|
||
|
@@ -2402,6 +2402,20 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
||
|
#endif
|
||
|
total_blocks += gobble_file (next->d_name, type, D_INO (next),
|
||
|
false, name);
|
||
|
+
|
||
|
+ /* In this narrow case, print out each name right away, so
|
||
|
+ ls uses constant memory while processing the entries of
|
||
|
+ this directory. Useful when there are many (millions)
|
||
|
+ of entries in a directory. */
|
||
|
+ if (format == one_per_line && sort_type == sort_none)
|
||
|
+ {
|
||
|
+ /* We must call sort_files in spite of
|
||
|
+ "sort_type == sort_none" for its initialization
|
||
|
+ of the sorted_file vector. */
|
||
|
+ sort_files ();
|
||
|
+ print_current_files ();
|
||
|
+ clear_files ();
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
else if (errno != 0)
|