GNU bug report logs - #15249
"ls -R" may exit with invalid status code

Previous Next

Package: coreutils;

Reported by: FUJIWARA Katsunori <foozy <at> lares.dti.ne.jp>

Date: Mon, 2 Sep 2013 16:20:02 UTC

Severity: normal

Done: Pádraig Brady <P <at> draigBrady.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: FUJIWARA Katsunori <foozy <at> lares.dti.ne.jp>
Subject: bug#15249: closed (Re: bug#15249: "ls -R" may exit with invalid
 status code)
Date: Tue, 03 Sep 2013 19:23:04 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#15249: "ls -R" may exit with invalid status code

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 15249 <at> debbugs.gnu.org.

-- 
15249: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15249
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Pádraig Brady <P <at> draigBrady.com>
To: FUJIWARA Katsunori <foozy <at> lares.dti.ne.jp>
Cc: 15249-done <at> debbugs.gnu.org
Subject: Re: bug#15249: "ls -R" may exit with invalid status code
Date: Tue, 03 Sep 2013 20:22:28 +0100
On 09/02/2013 01:41 PM, FUJIWARA Katsunori wrote:
> With recent "src/ls.c" implementation of coreutils, "ls -R" may exit
> with invalid status code LS_FAILURE, even when it should exit with
> LS_MINOR_PROBLEM, which means some failure for files/directories in
> sub-directories.
> 
> Technical detail:
> 
>   "command_line_arg" argument of "gobble_file()" invocation in
>   "print_dir()" is always "false", because it is invoked for
>   files/directories under target directory: they never be command line
>   argument.
> 
>   In the other hand, "command_line_arg" argument of
>   "extract_dirs_from_files()" invocation in "print_dir()" is equal to
>   "command_line_arg" of "print_dir()", even though directories under
>   target one never be command line argument.
> 
>   This causes that every sub-directories in recursive listing are
>   treated as command line argument, and "serious" argument of
>   "file_failure()" invocation for them becomes "true" unexpectedly.
> 
>   Then, "ls -R" will exit with invalid status code LS_FAILURE, when
>   some failure occur for files/directories in sub-directories.
> 
> The change below should fix this issue.
> 
> diff --git a/src/ls.c b/src/ls.c
> index e341c67..08e86ce 100644
> --- a/src/ls.c
> +++ b/src/ls.c
> @@ -2647,7 +2647,7 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
>       contents listed rather than being mentioned here as files.  */
> 
>    if (recursive)
> -    extract_dirs_from_files (name, command_line_arg);
> +    extract_dirs_from_files (name, false);
> 
>    if (format == long_format || print_block_size)
>      {

This looks correct on initial inspection.
I'll look a bit more closely and apply soon.

thanks,
Pádraig.


[Message part 3 (message/rfc822, inline)]
From: FUJIWARA Katsunori <foozy <at> lares.dti.ne.jp>
To: bug-coreutils <at> gnu.org
Subject: "ls -R" may exit with invalid status code
Date: Mon, 02 Sep 2013 21:41:06 +0900
With recent "src/ls.c" implementation of coreutils, "ls -R" may exit
with invalid status code LS_FAILURE, even when it should exit with
LS_MINOR_PROBLEM, which means some failure for files/directories in
sub-directories.

Technical detail:

  "command_line_arg" argument of "gobble_file()" invocation in
  "print_dir()" is always "false", because it is invoked for
  files/directories under target directory: they never be command line
  argument.

  In the other hand, "command_line_arg" argument of
  "extract_dirs_from_files()" invocation in "print_dir()" is equal to
  "command_line_arg" of "print_dir()", even though directories under
  target one never be command line argument.

  This causes that every sub-directories in recursive listing are
  treated as command line argument, and "serious" argument of
  "file_failure()" invocation for them becomes "true" unexpectedly.

  Then, "ls -R" will exit with invalid status code LS_FAILURE, when
  some failure occur for files/directories in sub-directories.

The change below should fix this issue.

diff --git a/src/ls.c b/src/ls.c
index e341c67..08e86ce 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -2647,7 +2647,7 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
      contents listed rather than being mentioned here as files.  */

   if (recursive)
-    extract_dirs_from_files (name, command_line_arg);
+    extract_dirs_from_files (name, false);

   if (format == long_format || print_block_size)
     {

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy <at> lares.dti.ne.jp



This bug report was last modified 11 years and 268 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.