* lib/stat-time.h: (get_stat_birthtime): Check for zero-valued
[gnulib.git] / lib / euidaccess.c
index 978ab56..5148a5b 100644 (file)
@@ -1,7 +1,7 @@
 /* euidaccess -- check if effective user id can access file
 
-   Copyright (C) 1990, 1991, 1995, 1998, 2000, 2003, 2004 Free
-   Software Foundation, Inc.
+   Copyright (C) 1990, 1991, 1995, 1998, 2000, 2003, 2004, 2005, 2006
+   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
-# include <config.h>
-#endif
-
 #ifndef _LIBC
+# include <config.h>
 # include "euidaccess.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)
@@ -80,25 +67,24 @@ gid_t getegid ();
 #else
 
 # include "group-member.h"
-# include "stat-macros.h"
 
 #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,7 +103,7 @@ euidaccess (const char *path, int mode)
      safe.  */
 
   if (mode == F_OK)
-    return stat (path, &stats);
+    return stat (file, &stats);
   else
     {
       int result;
@@ -128,7 +114,7 @@ euidaccess (const char *path, int mode)
       if (gid != egid)
        setregid (egid, gid);
 
-      result = access (path, mode);
+      result = access (file, mode);
       saved_errno = errno;
 
       /* Restore them.  */
@@ -150,9 +136,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