From: Kamil Dudka Date: Wed, 30 Jul 2008 12:31:50 +0000 (+0200) Subject: ls -U1 now uses constant memory X-Git-Tag: v7.0~113 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d974b00fbbc2025de63e1e6d54827648fefa1c4;p=platform%2Fupstream%2Fcoreutils.git 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. * NEWS: Mention the improvement. --- diff --git a/NEWS b/NEWS index 5796dfa63..4637ebad9 100644 --- a/NEWS +++ b/NEWS @@ -51,6 +51,9 @@ GNU coreutils NEWS -*- outline -*- join has significantly better performance due to better memory management + ls now uses constant memory when not sorting and using one_per_line format, + no matter how many files are in a given directory + od now aligns fields across lines when printing multiple -t specifiers, and no longer prints fields that resulted entirely from padding the input out to the least common multiple width. diff --git a/src/ls.c b/src/ls.c index 4b69f7d22..a661c063f 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)