aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-util.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2000-10-08 03:41:42 +0800
committerDan Winship <danw@src.gnome.org>2000-10-08 03:41:42 +0800
commit9acde37ac54919dbe9f8d49a1fc7aa914327f3ff (patch)
treec88c43588af0793739d125ce6d63281f6851b818 /e-util/e-util.c
parentee625ee5fcc71e9d17fafd53fa17c7cd73558c9f (diff)
downloadgsoc2013-evolution-9acde37ac54919dbe9f8d49a1fc7aa914327f3ff.tar.gz
gsoc2013-evolution-9acde37ac54919dbe9f8d49a1fc7aa914327f3ff.tar.zst
gsoc2013-evolution-9acde37ac54919dbe9f8d49a1fc7aa914327f3ff.zip
New function to make a directory and (if needed), its parents
* gal/util/e-util.c (e_mkdir_hier): New function to make a directory and (if needed), its parents svn path=/trunk/; revision=5778
Diffstat (limited to 'e-util/e-util.c')
-rw-r--r--e-util/e-util.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/e-util/e-util.c b/e-util/e-util.c
index dbe0448ee1..0363f3e201 100644
--- a/e-util/e-util.c
+++ b/e-util/e-util.c
@@ -166,6 +166,41 @@ e_write_file(const char *filename, const char *data, int flags)
return 0;
}
+/**
+ * e_mkdir_hier:
+ * @path: a directory path
+ * @mode: a mode, as for mkdir(2)
+ *
+ * This creates the named directory with the given @mode, creating
+ * any necessary intermediate directories (with the same @mode).
+ *
+ * Return value: 0 on success, -1 on error, in which case errno will
+ * be set as for mkdir(2).
+ **/
+int
+e_mkdir_hier(const char *path, mode_t mode)
+{
+ char *copy, *p;
+
+ p = copy = g_strdup (path);
+ do {
+ p = strchr (p + 1, '/');
+ if (p)
+ *p = '\0';
+ if (access (copy, F_OK) == -1) {
+ if (mkdir (copy, mode) == -1) {
+ g_free (copy);
+ return -1;
+ }
+ }
+ if (p)
+ *p = '/';
+ } while (p);
+
+ g_free (copy);
+ return 0;
+}
+
#if 0
char *
e_read_uri(const char *uri)