--- ii.c | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/ii.c b/ii.c index eda920c..c193940 100644 --- a/ii.c +++ b/ii.c _AT_@ -58,42 +58,45 @@ striplower(char *s) { return s; } -/* creates directories top-down, if necessary */ +/* creates directories bottom-up, if necessary */ static void create_dirtree(const char *dir) { char tmp[_POSIX_PATH_MAX]; char *p = NULL; + struct stat st = { 0 }; size_t len; strlcpy(tmp, dir, sizeof(tmp)); len = strnlen(tmp, sizeof(tmp)); if(len > 0 && tmp[len - 1] == '/') - tmp[len - 1] = 0; - for(p = tmp + 1; *p; p++) - if(*p == '/') { - *p = 0; - mkdir(tmp, S_IRWXU); - *p = '/'; - } - mkdir(tmp, S_IRWXU); -} + tmp[len - 1] = '\0'; -/* TODO: dont call create_dirtree() in get_filepath() ? */ -static int -get_filepath(char *filepath, size_t len, char *channel, char *file) { - if(channel) { - if(snprintf(filepath, len, "%s/%s", path, channel) <= 0) - return 0; - create_dirtree(filepath); - return snprintf(filepath, len, "%s/%s/%s", path, channel, file); + if((stat(tmp, &st) != -1) && S_ISDIR(st.st_mode)) + return; /* dir exists */ + + for(p = tmp + 1; *p; p++) { + if(*p != '/') + continue; + *p = '\0'; + mkdir(tmp, S_IRWXU); + *p = '/'; } - return snprintf(filepath, len, "%s/%s", path, file); + mkdir(tmp, S_IRWXU); } static void create_filepath(char *filepath, size_t len, char *channel, char *suffix) { - if(get_filepath(filepath, len, striplower(channel), suffix) <= 0) - eprintf("path to irc directory too long"); + const char *e = "path to irc directory too long\n"; + + if(channel && channel[0]) { + striplower(channel); + if(snprintf(filepath, len, "%s/%s", path, channel) <= 0) + eprintf(e); + create_dirtree(filepath); + if(snprintf(filepath, len, "%s/%s/%s", path, channel, suffix) <= 0) + eprintf(e); + } else if(snprintf(filepath, len, "%s/%s", path, suffix) <= 0) + eprintf(e); } static int -- 2.4.10 --Multipart=_Mon__9_May_2016_17_21_10_+0200_I.6cpFVydhq75aaE Content-Type: text/x-diff; name="0020-stylistic-changes.patch" Content-Disposition: attachment; filename="0020-stylistic-changes.patch" Content-Transfer-Encoding: 7bitReceived on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Mon May 09 2016 - 17:24:22 CEST