Handle POSIX-compliant errno value of unlink in remove.
authorUlrich Drepper <drepper@redhat.com>
Sun, 4 Apr 2010 09:08:37 +0000 (02:08 -0700)
committerUlrich Drepper <drepper@redhat.com>
Sun, 4 Apr 2010 09:08:37 +0000 (02:08 -0700)
ChangeLog
sysdeps/posix/remove.c
sysdeps/unix/sysv/linux/remove.c [new file with mode: 0644]

index a178be5..5cccc47 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2010-04-04  Ulrich Drepper  <drepper@redhat.com>
 
+       [BZ #11276]
+       * sysdeps/posix/remove.c (IS_NO_DIRECTORY_ERROR): Define.
+       (remove): Use IS_NO_DIRECTORY_ERROR to check for file being no
+       directory.
+       * sysdeps/unix/sysv/linux/remove.c: New file.
+
        * conform/data/sys/stat.h-data: Fix testing of S_IS* macros.
 
        [BZ #11279]
index c44af92..ae5bbdb 100644 (file)
@@ -1,5 +1,5 @@
 /* ANSI C `remove' function to delete a file or directory.  POSIX.1 version.
-   Copyright (C) 1995,96,97,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1995,96,97,2002,2003,2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <stdio.h>
 #include <unistd.h>
 
+
+#ifndef IS_NO_DIRECTORY_ERROR
+# define IS_NO_DIRECTORY_ERROR errno != EPERM
+#endif
+
+
 int
 remove (file)
      const char *file;
@@ -28,7 +34,7 @@ remove (file)
   /* First try to unlink since this is more frequently the necessary action. */
   if (__unlink (file) != 0
       /* If it is indeed a directory...  */
-      && (errno != EISDIR
+      && (IS_NO_DIRECTORY_ERROR
          /* ...try to remove it.  */
          || __rmdir (file) != 0))
     /* Cannot remove the object for whatever reason.  */
diff --git a/sysdeps/unix/sysv/linux/remove.c b/sysdeps/unix/sysv/linux/remove.c
new file mode 100644 (file)
index 0000000..4abf34a
--- /dev/null
@@ -0,0 +1,2 @@
+#define IS_NO_DIRECTORY_ERROR errno != EISDIR
+#include <sysdeps/posix/remove.c>