Debian bug report: <http://bugs.debian.org/557248>.

Actually, the same change is needed for the Hurd; we also do return EPERM
for unlink("[directory]").  Roland, what's your preference to fix this?

IMO, the really proper fix would be to use variant with EPERM only in
sysdeps/posix/remove.c
and the variant with EISDIR only in
sysdeps/unix/sysv/linux/remove.c

The reasonable fix would be use patch bellow.

But given usual drepper's answers like
http://sourceware.org/ml/glibc-bugs/2009-11/msg00116.html
it have been much easier for us (GNU/FreeBSD) just create own variant ...

Petr

--- sysdeps/posix/remove.c
+++ sysdeps/posix/remove.c
@@ -28,7 +28,8 @@
/* First try to unlink since this is more frequently the necessary action. */
   if (__unlink (file) != 0
       /* If it is indeed a directory...  */
-      && (errno != EISDIR
+      /* Linux returns EISDIR, POSIX mandates EPERM */
+      && (((errno != EISDIR) && (errno != EPERM))
          /* ...try to remove it.  */
          || __rmdir (file) != 0))
     /* Cannot remove the object for whatever reason.  */


Reply via email to