Merge pull request #2134 from akoeplinger/bug-34334
[mono.git] / eglib / src / gdir-unix.c
index 6fe64c8d43347fc22a92ef3e3f3574a018af6abe..abca22f9e95c8f2b2cbc246275eb8f9773167dce 100644 (file)
@@ -105,4 +105,42 @@ g_dir_close (GDir *dir)
        g_free (dir);
 }
 
+int
+g_mkdir_with_parents (const gchar *pathname, int mode)
+{
+       char *path, *d;
+       int rv;
+       
+       if (!pathname || *pathname == '\0') {
+               errno = EINVAL;
+               return -1;
+       }
+       
+       d = path = g_strdup (pathname);
+       if (*d == '/')
+               d++;
+       
+       while (TRUE) {
+               if (*d == '/' || *d == '\0') {
+                 char orig = *d;
+                 *d = '\0';
+                 rv = mkdir (path, mode);
+                 if (rv == -1 && errno != EEXIST) {
+                       g_free (path);
+                       return -1;
+                 }
 
+                 *d++ = orig;
+                 while (orig == '/' && *d == '/')
+                       d++;
+                 if (orig == '\0')
+                       break;
+               } else {
+                       d++;
+               }
+       }
+       
+       g_free (path);
+       
+       return 0;
+}