diff --git a/configure.in b/configure.in index 7bda924ce..e2a33b58c 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 7182ec549..a61cc5578 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)