Use lchmod instead of stat + chown if available

Fallout of the NOFLOOW_SYMLINKS fix from bug 593406
This commit is contained in:
Benjamin Otte 2009-09-01 21:53:35 +02:00
parent 48e0af0157
commit 3826963e65
2 changed files with 8 additions and 4 deletions

View File

@ -952,7 +952,7 @@ AC_MSG_RESULT(unsigned $glib_size_type)
# Check for some functions
AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk)
AC_CHECK_FUNCS(chown lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid)
AC_CHECK_FUNCS(chown lchmod lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid)
AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getmntinfo)
# Check for high-resolution sleep functions
AC_CHECK_FUNCS(nanosleep nsleep)

View File

@ -1881,6 +1881,9 @@ set_unix_mode (char *filename,
#ifdef HAVE_SYMLINK
if (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) {
#ifdef HAVE_LCHMOD
res = lchmod (filename, val);
#else
struct stat statbuf;
/* Calling chmod on a symlink changes permissions on the symlink.
* We don't want to do this, so we need to check for a symlink */
@ -1892,10 +1895,11 @@ set_unix_mode (char *filename,
_("Cannot set permissions on symlinks"));
return FALSE;
}
}
else if (res == 0)
res = g_chmod (filename, val);
#endif
} else
#endif
if (res == 0)
res = g_chmod (filename, val);
if (res == -1)