]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
utils: makedirs - don't call chmod() in makedirs() when mode is ok
authorJaroslav Kysela <perex@perex.cz>
Thu, 4 Feb 2016 08:15:33 +0000 (09:15 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 4 Feb 2016 08:15:33 +0000 (09:15 +0100)
src/utils.c

index 850e28de838aff642eb4b793685c7a684a9b141e..e8042b19341e4124dfc3c0ef3b216d9f1fd37211 100644 (file)
@@ -481,6 +481,8 @@ md5sum ( const char *str )
   return ret;
 }
 
+#define FILE_MODE_BITS(x) (x&(S_IRWXU|S_IRWXG|S_IRWXO))
+
 int
 makedirs ( const char *inpath, int mode, gid_t gid, uid_t uid )
 {
@@ -503,7 +505,8 @@ makedirs ( const char *inpath, int mode, gid_t gid, uid_t uid )
         err = mkdir(path, mode);
         if (!err && gid != -1 && uid != -1)
           err = chown(path, uid, gid);
-        if (!err)
+        if (!err && !stat(path, &st) &&
+            FILE_MODE_BITS(mode) != FILE_MODE_BITS(st.st_mode))
           err = chmod(path, mode); /* override umode */
         tvhtrace("settings", "Creating directory \"%s\" with octal permissions "
                              "\"%o\" gid %d uid %d", path, mode, gid, uid);