[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fileutils 4.1.2: Missing newlines in ls -R output
From: |
Jim Meyering |
Subject: |
Re: Fileutils 4.1.2: Missing newlines in ls -R output |
Date: |
Tue, 27 Nov 2001 21:54:54 +0100 |
User-agent: |
Gnus/5.090004 (Oort Gnus v0.04) Emacs/21.1.50 (i686-pc-linux-gnu) |
Andreas Schwab <address@hidden> wrote:
> The output of ls -R has changed: there is no empty line between the
> individual directory listings at the same level.
>
> $ mkdir a b c a/1 a/2 /a3
> $ touch a/1/I a/1/II
> $ ls -R
> .:
> a b c
>
> ./a:
> 1 2
>
> ./a/1:
> I II
> ./a/2:
> ./b:
> ./c:
Thanks a lot for the report!
I've added your test case and a couple others.
Here's a fix:
The change of 2001-11-01 introduced a bug whereby some recursive
listings didn't have a blank line between per-directory groups of files.
(print_dir): Print a newline before each directory name
except the first one, rather than after each except the last, since
now (after the changes of 2001-11-01) detecting whether a `pending*'
is the last would involve more work. Reported by Andreas Schwab.
This change has no net effect.
(main): Remove always-true conjunct and add a comment.
Index: ls.c
===================================================================
RCS file: /1/fileutils/src/ls.c,v
retrieving revision 1.290
retrieving revision 1.291
diff -u -p -r1.290 -r1.291
--- ls.c 2001/11/26 16:46:20 1.290
+++ ls.c 2001/11/27 10:19:24 1.291
@@ -1116,10 +1116,14 @@ main (int argc, char **argv)
/* `files_index' might be zero now. */
}
+ /* In the following if/else blocks, it is sufficient to test `pending_dirs'
+ (and not pending_dirs->name) because there may be no markers in the queue
+ at this point. A marker may be enqueued when extract_dirs_from_files is
+ called with a non-empty string or via print_dir. */
if (files_index)
{
print_current_files ();
- if (pending_dirs && pending_dirs->name)
+ if (pending_dirs)
DIRED_PUTCHAR ('\n');
}
else if (n_files <= 1 && pending_dirs && pending_dirs->next == 0)
@@ -2019,6 +2023,7 @@ print_dir (const char *name, const char
register DIR *reading;
register struct dirent *next;
register uintmax_t total_blocks = 0;
+ static int first = 1;
errno = 0;
reading = opendir (name);
@@ -2094,6 +2099,9 @@ print_dir (const char *name, const char
if (recursive || print_dir_name)
{
+ if (!first)
+ DIRED_PUTCHAR ('\n');
+ first = 0;
DIRED_INDENT ();
PUSH_CURRENT_DIRED_POS (&subdired_obstack);
dired_pos += quote_name (stdout, realname ? realname : name,
@@ -2119,9 +2127,6 @@ print_dir (const char *name, const char
if (files_index)
print_current_files ();
-
- if (pending_dirs && pending_dirs->name)
- DIRED_PUTCHAR ('\n');
}
/* Add `pattern' to the list of patterns for which files that match are