diff options
author | Kamil Dudka <kdudka@redhat.com> | 2009-07-27 11:37:47 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2009-07-27 17:10:39 +0200 |
commit | 493c48168490247c88e9fd20916432efc859c6a4 (patch) | |
tree | 6decf44101d6c3e253c37786147342d1e71ff9b3 | |
parent | 6edc9c972ea2c2e67252330b321a62cac52d896e (diff) | |
download | coreutils-493c48168490247c88e9fd20916432efc859c6a4.tar.xz |
ls -1U dir arg ... now works again
* src/ls.c (print_dir): Emit "$dir_name:\n" *before* accumulating (and
possibly printing) directory entry names.
The bug was introduced in coreutils-7.0 via commit
8d974b00, 2008-07-30, "ls -U1 now uses constant memory".
Reported by Julian Bradfield.
* NEWS (Bug fixes): Mention it.
-rw-r--r-- | NEWS | 9 | ||||
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | src/ls.c | 29 |
3 files changed, 23 insertions, 16 deletions
@@ -4,14 +4,19 @@ GNU coreutils NEWS -*- outline -*- ** Bug fixes - truncate -s failed to skip all whitespace in the option argument in - some locales. + ls -1U (with two or more arguments, at least one a nonempty directory) + would print entry names *before* the name of the containing directory. + Also fixed incorrect output of ls -1RU and ls -1sU. + [introduced in coreutils-7.0] sort now correctly ignores fields whose ending position is specified before the start position. Previously in numeric mode the remaining part of the line after the start position was used as the sort key. [This bug appears to have been present in "the beginning".] + truncate -s failed to skip all whitespace in the option argument in + some locales. + ** New programs stdbuf: A new program to run a command with modified stdio buffering @@ -300,6 +300,7 @@ Joshua Hudson joshudson@gmail.com Josselin Mouette joss@debian.org Juan F. Codagnone juam@arnet.com.ar Juan M. Guerrero st001906@hrz1.hrz.tu-darmstadt.de +Julian Bradfield jcb@inf.ed.ac.uk Jungshik Shin jshin@pantheon.yale.edu Jürgen Fluk louis@dachau.marco.de Jurriaan thunder7@xs4all.nl @@ -2456,6 +2456,19 @@ print_dir (char const *name, char const *realname, bool command_line_arg) DEV_INO_PUSH (dir_stat.st_dev, dir_stat.st_ino); } + if (recursive | print_dir_name) + { + if (!first) + DIRED_PUTCHAR ('\n'); + first = false; + DIRED_INDENT (); + PUSH_CURRENT_DIRED_POS (&subdired_obstack); + dired_pos += quote_name (stdout, realname ? realname : name, + dirname_quoting_options, NULL); + PUSH_CURRENT_DIRED_POS (&subdired_obstack); + DIRED_FPUTS_LITERAL (":\n", stdout); + } + /* Read the directory entries, and insert the subfiles into the `cwd_file' table. */ @@ -2495,7 +2508,8 @@ print_dir (char const *name, char const *realname, bool command_line_arg) 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) + if (format == one_per_line && sort_type == sort_none + && !print_block_size && !recursive) { /* We must call sort_files in spite of "sort_type == sort_none" for its initialization @@ -2531,19 +2545,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg) if (recursive) extract_dirs_from_files (name, command_line_arg); - if (recursive | print_dir_name) - { - if (!first) - DIRED_PUTCHAR ('\n'); - first = false; - DIRED_INDENT (); - PUSH_CURRENT_DIRED_POS (&subdired_obstack); - dired_pos += quote_name (stdout, realname ? realname : name, - dirname_quoting_options, NULL); - PUSH_CURRENT_DIRED_POS (&subdired_obstack); - DIRED_FPUTS_LITERAL (":\n", stdout); - } - if (format == long_format || print_block_size) { const char *p; |