diff options
Diffstat (limited to 'src/common.c')
-rw-r--r-- | src/common.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/common.c b/src/common.c index 2d1ac3d7..da33cc3d 100644 --- a/src/common.c +++ b/src/common.c @@ -25,21 +25,20 @@ #include <errno.h> #include <stdlib.h> #include <string.h> +#include <sys/types.h> #include <sys/stat.h> #include <curl/curl.h> #include <curl/easy.h> #include <glib.h> +#include "log.h" #include "common.h" // assume malloc stores at most 8 bytes for size of allocated memory // and page size is at least 4KB #define READ_BUF_SIZE 4088 -// for generating ids -static int unique_id = 0; - struct curl_data_t { char *buffer; @@ -72,29 +71,43 @@ p_slist_free_full(GSList *items, GDestroyNotify free_func) g_slist_free (items); } -void +gboolean create_dir(char *name) { - int e; struct stat sb; - e = stat(name, &sb); - if (e != 0) - if (errno == ENOENT) - e = mkdir(name, S_IRWXU); + if (stat(name, &sb) != 0) { + if (errno != ENOENT || mkdir(name, S_IRWXU) != 0) { + return FALSE; + } + } else { + if ((sb.st_mode & S_IFDIR) != S_IFDIR) { + log_debug("create_dir: %s exists and is not a directory!", name); + return FALSE; + } + } + + return TRUE; } -void +gboolean mkdir_recursive(const char *dir) { int i; + gboolean result = TRUE; + for (i = 1; i <= strlen(dir); i++) { if (dir[i] == '/' || dir[i] == '\0') { gchar *next_dir = g_strndup(dir, i); - create_dir(next_dir); + result = create_dir(next_dir); g_free(next_dir); + if (!result) { + break; + } } } + + return result; } char * @@ -400,10 +413,12 @@ xdg_get_data_home(void) char * get_unique_id(void) { + static unsigned long unique_id; char *result = NULL; - unique_id++; GString *result_str = g_string_new(""); - g_string_printf(result_str, "prof%d", unique_id); + + unique_id++; + g_string_printf(result_str, "prof%lu", unique_id); result = result_str->str; g_string_free(result_str, FALSE); |