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