Use lchmod instead of stat + chown if available
authorBenjamin Otte <otte@gnome.org>
Tue, 1 Sep 2009 19:53:35 +0000 (21:53 +0200)
committerBenjamin Otte <otte@gnome.org>
Tue, 1 Sep 2009 19:53:35 +0000 (21:53 +0200)
Fallout of the NOFLOOW_SYMLINKS fix from bug 593406

configure.in
gio/glocalfileinfo.c

index 7bda924..e2a33b5 100644 (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)
index 7182ec5..a61cc55 100644 (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)