mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-21 18:23:59 +00:00
* src/fileio.c (check_writable) [CYGWIN]: Return non-zero if UID or
GID is unknown (Bug#10257).
This commit is contained in:
parent
e1fefc61a4
commit
e1b01a3a53
@ -1,3 +1,8 @@
|
||||
2011-12-17 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* fileio.c (check_writable) [CYGWIN]: Return non-zero if UID or
|
||||
GID is unknown (Bug#10257).
|
||||
|
||||
2011-12-17 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* s/gnu-linux.h: Fix mark_memory typo (Bug#10286).
|
||||
|
18
src/fileio.c
18
src/fileio.c
@ -2416,15 +2416,27 @@ check_writable (const char *filename)
|
||||
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 */
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user