lib: Simplify directory_create_or_exist with an early return
[amitay/samba.git] / lib / util / util.c
index b6f60c4754cade4cb5578ffaf2401e03999d7b69..d0449e3ae890e9a905266787ebc506ecd120522d 100644 (file)
@@ -196,35 +196,36 @@ _PUBLIC_ bool directory_create_or_exist(const char *dname,
 {
        int ret;
        struct stat st;
+       mode_t old_umask;
 
        ret = lstat(dname, &st);
-       if (ret == -1) {
-               mode_t old_umask;
+       if (ret == 0) {
+               return true;
+       }
 
-               if (errno != ENOENT) {
-                       DEBUG(0, ("lstat failed on directory %s: %s\n",
-                                 dname, strerror(errno)));
-                       return false;
-               }
+       if (errno != ENOENT) {
+               DEBUG(0, ("lstat failed on directory %s: %s\n",
+                         dname, strerror(errno)));
+               return false;
+       }
 
-               /* Create directory */
-               old_umask = umask(0);
-               ret = mkdir(dname, dir_perms);
-               if (ret == -1 && errno != EEXIST) {
-                       DEBUG(0, ("mkdir failed on directory "
-                                 "%s: %s\n", dname,
-                                 strerror(errno)));
-                       umask(old_umask);
-                       return false;
-               }
+       /* Create directory */
+       old_umask = umask(0);
+       ret = mkdir(dname, dir_perms);
+       if (ret == -1 && errno != EEXIST) {
+               DEBUG(0, ("mkdir failed on directory "
+                         "%s: %s\n", dname,
+                         strerror(errno)));
                umask(old_umask);
+               return false;
+       }
+       umask(old_umask);
 
-               ret = lstat(dname, &st);
-               if (ret == -1) {
-                       DEBUG(0, ("lstat failed on created directory %s: %s\n",
-                                 dname, strerror(errno)));
-                       return false;
-               }
+       ret = lstat(dname, &st);
+       if (ret == -1) {
+               DEBUG(0, ("lstat failed on created directory %s: %s\n",
+                         dname, strerror(errno)));
+               return false;
        }
 
        return true;