From 9acde37ac54919dbe9f8d49a1fc7aa914327f3ff Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Sat, 7 Oct 2000 19:41:42 +0000 Subject: 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 --- e-util/e-util.c | 35 +++++++++++++++++++++++++++++++++++ e-util/e-util.h | 4 +++- 2 files changed, 38 insertions(+), 1 deletion(-) 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) diff --git a/e-util/e-util.h b/e-util/e-util.h index 0b252a174a..ef331bf9d5 100644 --- a/e-util/e-util.h +++ b/e-util/e-util.h @@ -3,6 +3,7 @@ #include #include +#include #define E_MAKE_TYPE(l,str,t,ci,i,parent) \ GtkType l##_get_type(void)\ @@ -40,7 +41,8 @@ void e_free_object_list (GList *list); void e_free_string_list (GList *list); char *e_read_file (const char *filename); -gint e_write_file(const char *filename, const char *data, int flags); +int e_write_file (const char *filename, const char *data, int flags); +int e_mkdir_hier (const char *path, mode_t mode); gchar **e_strsplit (const gchar *string, const gchar *delimiter, -- cgit v1.2.3