struct _GDir {
DIR *dir;
+#ifndef HAVE_REWINDDIR
+ char *path;
+#endif
};
GDir *
g_free (dir);
return NULL;
}
+#ifndef HAVE_REWINDDIR
+ dir->path = g_strdup (path);
+#endif
return dir;
}
g_dir_rewind (GDir *dir)
{
g_return_if_fail (dir != NULL && dir->dir != NULL);
+#ifndef HAVE_REWINDDIR
+ closedir (dir->dir);
+ dir->dir = opendir (dir->path);
+#else
rewinddir (dir->dir);
+#endif
}
void
{
g_return_if_fail (dir != NULL && dir->dir != 0);
closedir (dir->dir);
+#ifndef HAVE_REWINDDIR
+ g_free (dir->path);
+#endif
dir->dir = NULL;
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;
+}