GNU bug report logs - #39364
[PATCH] rmdir: fix clobbered errno

Previous Next

Package: coreutils;

Reported by: Matthew Pfeiffer <spferical <at> gmail.com>

Date: Fri, 31 Jan 2020 02:21:02 UTC

Severity: normal

Tags: patch

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: Pádraig Brady <P <at> draigBrady.com>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#39364: closed ([PATCH] rmdir: fix clobbered errno)
Date: Tue, 04 Feb 2020 19:22:02 +0000
[Message part 1 (text/plain, inline)]
Your message dated Tue, 4 Feb 2020 19:21:42 +0000
with message-id <bea4cb70-aed8-6c0d-ca3f-ac111f1b956f <at> draigBrady.com>
and subject line Re: bug#39364: [PATCH] rmdir: fix clobbered errno
has caused the debbugs.gnu.org bug report #39364,
regarding [PATCH] rmdir: fix clobbered errno
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
39364: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=39364
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Matthew Pfeiffer <spferical <at> gmail.com>
To: bug-coreutils <at> gnu.org
Cc: Matthew Pfeiffer <spferical <at> gmail.com>
Subject: [PATCH] rmdir: fix clobbered errno
Date: Thu, 30 Jan 2020 20:46:40 -0500
'rmdir --ignore-fail-on-non-empty' would not report errors on non-empty
directories that fail for a different reason.
---
 src/rmdir.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/rmdir.c b/src/rmdir.c
index c9f417957..7b253ab0d 100644
--- a/src/rmdir.c
+++ b/src/rmdir.c
@@ -133,18 +133,19 @@ remove_parents (char *dir)
         prog_fprintf (stdout, _("removing directory, %s"), quoteaf (dir));
 
       ok = (rmdir (dir) == 0);
+      int rmdir_errno = errno;
 
       if (!ok)
         {
           /* Stop quietly if --ignore-fail-on-non-empty. */
-          if (ignorable_failure (errno, dir))
+          if (ignorable_failure (rmdir_errno, dir))
             {
               ok = true;
             }
           else
             {
               /* Barring race conditions, DIR is expected to be a directory.  */
-              error (0, errno, _("failed to remove directory %s"),
+              error (0, rmdir_errno, _("failed to remove directory %s"),
                      quoteaf (dir));
             }
           break;
@@ -233,12 +234,13 @@ main (int argc, char **argv)
 
       if (rmdir (dir) != 0)
         {
-          if (ignorable_failure (errno, dir))
+          int rmdir_errno = errno;
+          if (ignorable_failure (rmdir_errno, dir))
             continue;
 
           /* Here, the diagnostic is less precise, since we have no idea
              whether DIR is a directory.  */
-          error (0, errno, _("failed to remove %s"), quoteaf (dir));
+          error (0, rmdir_errno, _("failed to remove %s"), quoteaf (dir));
           ok = false;
         }
       else if (remove_empty_parents)
-- 
2.25.0



[Message part 3 (message/rfc822, inline)]
From: Pádraig Brady <P <at> draigBrady.com>
To: Matthew Pfeiffer <spferical <at> gmail.com>, 39364-done <at> debbugs.gnu.org
Subject: Re: bug#39364: [PATCH] rmdir: fix clobbered errno
Date: Tue, 4 Feb 2020 19:21:42 +0000
On 03/02/2020 16:45, Pádraig Brady wrote:
> On 03/02/2020 13:26, Pádraig Brady wrote:
>> On 31/01/2020 17:51, Pádraig Brady wrote:
>> Actually I think the key issue is not errno handling,
>> but a logic error fixed with:
>>
>> @@ -102,7 +102,7 @@ ignorable_failure (int error_number, char const *dir)
>>       return (ignore_fail_on_non_empty
>>               && (errno_rmdir_non_empty (error_number)
>>                   || (errno_may_be_empty (error_number)
>> -                  && is_empty_dir (AT_FDCWD, dir))));
>> +                  && ! is_empty_dir (AT_FDCWD, dir))));
>>
>>
>> Attached is a full patch to address these issues.
> 
> I'll also squash this in to the previous commit,
> to ensure we diagnose the case where we can't
> determine if the directory is empty.

pushed. marking done


This bug report was last modified 5 years and 163 days ago.

Previous Next


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