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
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.

View File

@@ -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)