emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r106693: * src/fileio.c (check_writab


From: Ken Brown
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r106693: * src/fileio.c (check_writable) [CYGWIN]: Return non-zero if UID or
Date: Sat, 17 Dec 2011 12:00:49 -0500
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 106693
committer: Ken Brown <address@hidden>
branch nick: trunk
timestamp: Sat 2011-12-17 12:00:49 -0500
message:
  * src/fileio.c (check_writable) [CYGWIN]: Return non-zero if UID or
  GID is unknown (Bug#10257).
modified:
  src/ChangeLog
  src/fileio.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2011-12-17 01:05:26 +0000
+++ b/src/ChangeLog     2011-12-17 17:00:49 +0000
@@ -1,3 +1,8 @@
+2011-12-17  Ken Brown  <address@hidden>
+
+       * fileio.c (check_writable) [CYGWIN]: Return non-zero if UID or
+       GID is unknown (Bug#10257).
+
 2011-12-17  Paul Eggert  <address@hidden>
 
        * s/gnu-linux.h: Fix mark_memory typo (Bug#10286).

=== modified file 'src/fileio.c'
--- a/src/fileio.c      2011-12-05 08:55:25 +0000
+++ b/src/fileio.c      2011-12-17 17:00:49 +0000
@@ -2416,15 +2416,27 @@
   return (st.st_mode & S_IWRITE || S_ISDIR (st.st_mode));
 #else /* not MSDOS */
 #ifdef HAVE_EUIDACCESS
-  return (euidaccess (filename, 2) >= 0);
-#else
+  int res = (euidaccess (filename, 2) >= 0);
+#ifdef CYGWIN
+  /* euidaccess may have returned failure because Cygwin couldn't
+     determine the file's UID or GID; if so, we return success. */
+  if (!res)
+    {
+      struct stat st;
+      if (stat (filename, &st) < 0)
+        return 0;
+      res = (st.st_uid == -1 || st.st_gid == -1);
+    }
+#endif /* CYGWIN */
+  return res;
+#else /* not HAVE_EUIDACCESS */
   /* Access isn't quite right because it uses the real uid
      and we really want to test with the effective uid.
      But Unix doesn't give us a right way to do it.
      Opening with O_WRONLY could work for an ordinary file,
      but would lose for directories.  */
   return (access (filename, 2) >= 0);
-#endif
+#endif /* not HAVE_EUIDACCESS */
 #endif /* not MSDOS */
 }
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]