File sarg-2.4.0-when-recursively-creating-a-directory-make-sure-the.patch of Package sarg

From 0bede2a5b0924862c026694b29d3ac430218eaad Mon Sep 17 00:00:00 2001
From: Frederic Marchal <fmarchal@users.sourceforge.net>
Date: Tue, 24 Dec 2019 13:56:01 +0100
Subject: [PATCH] When recursively creating a directory, make sure the path is
 a directory

The function to recursively create a temporary directory was succeeding if
the requested path existed even though the path was not a directory. Sarg
was then failing with a somewhat unrelated error.

Now, an error message is reported if the path to create exists and is not
a directory.
---
 util.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/util.c b/util.c
index 9bb7574..08fc029 100644
--- a/util.c
+++ b/util.c
@@ -422,6 +422,7 @@ bool my_mkdir(const char *name)
 	int i;
 	int chars;
 	bool created = false;
+	struct stat st;
 
 	if(!is_absolute(name)) {
 		debuga(_("Invalid path \"%s\". Please, use absolute paths only.\n"),name);
@@ -455,6 +456,19 @@ bool my_mkdir(const char *name)
 		}
 		created = true;
 	}
+	if (!created) {
+		/*
+		 * Check the final path is a directory (symlink to a directory is ok).
+		 */
+		if (stat(name, &st)) {
+			debuga(__FILE__,__LINE__,_("Cannot stat \"%s\": %s\n"), name, strerror(errno));
+			exit(EXIT_FAILURE);
+		}
+		if (!S_ISDIR(st.st_mode)) {
+			debuga(__FILE__,__LINE__,_("Directory \"%s\" can't be created because the path already exists and is not a directory\n"), name);
+			exit(EXIT_FAILURE);
+		}
+	}
 	return created;
 }
 
-- 
2.16.4

openSUSE Build Service is sponsored by