GNU bug report logs -
#39364
[PATCH] rmdir: fix clobbered errno
Previous Next
Full log
View this message in rfc822 format
On 31/01/2020 01:46, Matthew Pfeiffer wrote:
> '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)
>
This looks like a regression introduced in v6.10-21-ged5c4e7
I.E. is_empty_dir() is globbering errno, and thus
a non specific and non terminating warning is output,
rather than a specific error, and exit.
thanks,
Pádraig
This bug report was last modified 5 years and 99 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.