'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