From 002cf305a59d311d1dc3806009ecae90a5d9be38 Mon Sep 17 00:00:00 2001
From: Nitroretro <nitroretro@protonmail.com>
Date: Tue, 24 Dec 2019 10:10:58 +0200
Subject: Optimize error handling in io_check_dir()

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
---
 src/io.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

(limited to 'src')

diff --git a/src/io.c b/src/io.c
index 6488401..76d4490 100644
--- a/src/io.c
+++ b/src/io.c
@@ -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;
 }
-- 
cgit v1.2.3-70-g09d2