diff options
author | Nitroretro <nitroretro@protonmail.com> | 2019-12-24 10:10:58 +0200 |
---|---|---|
committer | Lukas Fleischer <lfleischer@calcurse.org> | 2019-12-29 13:22:57 +0100 |
commit | 002cf305a59d311d1dc3806009ecae90a5d9be38 (patch) | |
tree | b6e1ecaa8315852405fb4ae693969ed3f42efa36 | |
parent | 0cd8c210bd50837d896054e9fb1198175cd3316a (diff) | |
download | calcurse-002cf305a59d311d1dc3806009ecae90a5d9be38.tar.gz calcurse-002cf305a59d311d1dc3806009ecae90a5d9be38.zip |
Optimize error handling in io_check_dir()
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
-rw-r--r-- | src/io.c | 25 |
1 files changed, 13 insertions, 12 deletions
@@ -1084,17 +1084,15 @@ int io_check_dir(const char *dir) char *path = mem_strdup(dir); char *index; - int existed = 1; + int existed = 1, failed = 0; errno = 0; for (index = path + 1; *index; index++) { if (*index == '/') { *index = '\0'; if (mkdir(path, 0700) != 0) { if (errno != EEXIST) { - fprintf(stderr, - _("FATAL ERROR: could not create %s: %s\n"), - path, strerror(errno)); - exit_calcurse(EXIT_FAILURE); + failed = 1; + break; } } else { existed = 0; @@ -1103,17 +1101,20 @@ int io_check_dir(const char *dir) } } - if (mkdir(path, 0700) != 0) { - if (errno != EEXIST) { - fprintf(stderr, - _("FATAL ERROR: could not create %s: %s\n"), - path, strerror(errno)); - exit_calcurse(EXIT_FAILURE); - } + if (!failed && mkdir(path, 0700) != 0) { + if (errno != EEXIST) + failed = 1; } else { existed = 0; } + if(failed) { + fprintf(stderr, + _("FATAL ERROR: could not create %s: %s\n"), + path, strerror(errno)); + exit_calcurse(EXIT_FAILURE); + } + mem_free(path); return existed; } |