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 *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;
}