]> git.sesse.net Git - vlc/blobdiff - src/modules/configuration.c
Add mode parameter to utf8_mkdir, and stop creating configuration
[vlc] / src / modules / configuration.c
index 064ac41f7d6847254556e46f7b976929038effc6..2cc1c99e6836ab61ee24f3e4fc012695c40dda92 100644 (file)
@@ -1047,32 +1047,35 @@ int config_CreateDir( vlc_object_t *p_this, const char *psz_dirname )
 {
     if( !psz_dirname && !*psz_dirname ) return -1;
 
-    if( utf8_mkdir( psz_dirname ) && ( errno != EEXIST ) )
+    if( utf8_mkdir( psz_dirname, 0700 ) == 0 )
+        return 0;
+
+    switch( errno )
     {
-        if( errno == ENOENT )
+        case EEXIST:
+            return 0;
+
+        case ENOENT:
         {
             /* Let's try to create the parent directory */
-            char *psz_parent = strdup( psz_dirname );
-            char *psz_end = strrchr( psz_parent, DIR_SEP_CHAR );
+            char psz_parent[strlen( psz_dirname ) + 1], *psz_end;
+            strcpy( psz_parent, psz_dirname );
+
+            psz_end = strrchr( psz_parent, DIR_SEP_CHAR );
             if( psz_end && psz_end != psz_parent )
             {
                 *psz_end = '\0';
                 if( config_CreateDir( p_this, psz_parent ) == 0 )
                 {
-                    if( !utf8_mkdir( psz_dirname ) )
-                    {
-                        free( psz_parent );
+                    if( !utf8_mkdir( psz_dirname, 0755 ) )
                         return 0;
-                    }
                 }
             }
-            free( psz_parent );
         }
-        msg_Err( p_this, "could not create %s: %m", psz_dirname );
-        return -1;
     }
 
-    return 0;
+    msg_Err( p_this, "could not create %s: %m", psz_dirname );
+    return -1;
 }
 
 /*****************************************************************************