From: Benjamin Otte Date: Tue, 1 Sep 2009 19:53:35 +0000 (+0200) Subject: Use lchmod instead of stat + chown if available X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=3826963e65d8c4c68bcd3e4066505f63ef734b95;p=dana%2Fcg-glib.git Use lchmod instead of stat + chown if available Fallout of the NOFLOOW_SYMLINKS fix from bug 593406 --- diff --git a/configure.in b/configure.in index 7bda924c..e2a33b58 100644 --- a/configure.in +++ b/configure.in @@ -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) diff --git a/gio/glocalfileinfo.c b/gio/glocalfileinfo.c index 7182ec54..a61cc557 100644 --- a/gio/glocalfileinfo.c +++ b/gio/glocalfileinfo.c @@ -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)