Optimize error handling in io_check_dir()

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Nitroretro 2019-12-24 10:10:58 +02:00 committed by Lukas Fleischer
parent 0cd8c210bd
commit 002cf305a5

View File

@ -1084,17 +1084,15 @@ int io_check_dir(const char *dir)
char *path = mem_strdup(dir); char *path = mem_strdup(dir);
char *index; char *index;
int existed = 1; int existed = 1, failed = 0;
errno = 0; errno = 0;
for (index = path + 1; *index; index++) { for (index = path + 1; *index; index++) {
if (*index == '/') { if (*index == '/') {
*index = '\0'; *index = '\0';
if (mkdir(path, 0700) != 0) { if (mkdir(path, 0700) != 0) {
if (errno != EEXIST) { if (errno != EEXIST) {
fprintf(stderr, failed = 1;
_("FATAL ERROR: could not create %s: %s\n"), break;
path, strerror(errno));
exit_calcurse(EXIT_FAILURE);
} }
} else { } else {
existed = 0; existed = 0;
@ -1103,16 +1101,19 @@ int io_check_dir(const char *dir)
} }
} }
if (mkdir(path, 0700) != 0) { if (!failed && mkdir(path, 0700) != 0) {
if (errno != EEXIST) { if (errno != EEXIST)
failed = 1;
} else {
existed = 0;
}
if(failed) {
fprintf(stderr, fprintf(stderr,
_("FATAL ERROR: could not create %s: %s\n"), _("FATAL ERROR: could not create %s: %s\n"),
path, strerror(errno)); path, strerror(errno));
exit_calcurse(EXIT_FAILURE); exit_calcurse(EXIT_FAILURE);
} }
} else {
existed = 0;
}
mem_free(path); mem_free(path);
return existed; return existed;