1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-19 18:26:32 +02:00

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.
This commit is contained in:
Kamil Dudka
2008-07-30 14:31:50 +02:00
committed by Jim Meyering
parent b44f5f74aa
commit 8d974b00fb
2 changed files with 17 additions and 0 deletions

3
NEWS
View File

@@ -51,6 +51,9 @@ GNU coreutils NEWS -*- outline -*-
join has significantly better performance due to better memory management 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 od now aligns fields across lines when printing multiple -t
specifiers, and no longer prints fields that resulted entirely from specifiers, and no longer prints fields that resulted entirely from
padding the input out to the least common multiple width. padding the input out to the least common multiple width.

View File

@@ -2402,6 +2402,20 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
#endif #endif
total_blocks += gobble_file (next->d_name, type, D_INO (next), total_blocks += gobble_file (next->d_name, type, D_INO (next),
false, name); 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) else if (errno != 0)