Make it possible to use the list in signal-handlers.
[gnulib.git] / lib / euidaccess.c
index d63566c..44c5a07 100644 (file)
@@ -1,6 +1,6 @@
 /* euidaccess -- check if effective user id can access file
 
-   Copyright (C) 1990, 1991, 1995, 1998, 2000, 2003, 2004 Free
+   Copyright (C) 1990, 1991, 1995, 1998, 2000, 2003, 2004, 2005 Free
    Software Foundation, Inc.
 
    This file is part of the GNU C Library.
 
    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 /* Written by David MacKenzie and Torbjorn Granlund.
    Adapted for GNU C library by Roland McGrath.  */
 
-#if HAVE_CONFIG_H
+#ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
 
 #include <sys/types.h>
 #include <sys/stat.h>
-
-#if HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
+#include <unistd.h>
 
 #if HAVE_LIBGEN_H
 # include <libgen.h>
 #endif
 
-#ifndef _POSIX_VERSION
-uid_t getuid ();
-gid_t getgid ();
-uid_t geteuid ();
-gid_t getegid ();
-#endif
-
 #include <errno.h>
 #ifndef __set_errno
 # define __set_errno(val) errno = (val)
@@ -84,21 +74,21 @@ gid_t getegid ();
 
 #endif
 
-/* Return 0 if the user has permission of type MODE on file PATH;
+/* Return 0 if the user has permission of type MODE on FILE;
    otherwise, return -1 and set `errno'.
    Like access, except that it uses the effective user and group
    id's instead of the real ones, and it does not always check for read-only
    file system, text busy, etc.  */
 
 int
-euidaccess (const char *path, int mode)
+euidaccess (const char *file, int mode)
 {
 #if defined EFF_ONLY_OK
-  return access (path, mode | EFF_ONLY_OK);
+  return access (file, mode | EFF_ONLY_OK);
 #elif defined ACC_SELF
-  return accessx (path, mode, ACC_SELF);
+  return accessx (file, mode, ACC_SELF);
 #elif HAVE_EACCESS
-  return eaccess (path, mode);
+  return eaccess (file, mode);
 #else
 
   uid_t uid = getuid ();
@@ -117,20 +107,20 @@ euidaccess (const char *path, int mode)
      safe.  */
 
   if (mode == F_OK)
-    return stat (path, &stats);
+    return stat (file, &stats);
   else
     {
       int result;
       int saved_errno;
-      
+
       if (uid != euid)
        setreuid (euid, uid);
       if (gid != egid)
        setregid (egid, gid);
 
-      result = access (path, mode);
+      result = access (file, mode);
       saved_errno = errno;
-      
+
       /* Restore them.  */
       if (uid != euid)
        setreuid (uid, euid);
@@ -150,9 +140,9 @@ euidaccess (const char *path, int mode)
   unsigned int granted;
   if (uid == euid && gid == egid)
     /* If we are not set-uid or set-gid, access does the same.  */
-    return access (path, mode);
+    return access (file, mode);
 
-  if (stat (path, &stats))
+  if (stat (file, &stats) != 0)
     return -1;
 
   /* The super-user can read and write any file, and execute any file