aboutsummaryrefslogtreecommitdiff
path: root/rcynic/rcynic.c
diff options
context:
space:
mode:
Diffstat (limited to 'rcynic/rcynic.c')
-rw-r--r--rcynic/rcynic.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/rcynic/rcynic.c b/rcynic/rcynic.c
index 81a236c9..e99b351d 100644
--- a/rcynic/rcynic.c
+++ b/rcynic/rcynic.c
@@ -150,3 +150,25 @@ static int run(char *prog, ...)
va_end(ap);
return ret;
}
+
+/*
+ * Make a directory if it doesn't already exist.
+ */
+
+static int mkdir_maybe(char *name)
+{
+ char *b, buffer[FILENAME_MAX];
+
+ if (!name || strlen(name) >= sizeof(buffer) - 2)
+ return 0;
+ strcpy(buffer, name);
+ strcat(buffer, "/.");
+ if (access(buffer, F_OK) == 0)
+ return 1;
+ if ((b = strrchr(strrchr(buffer, '/'), '/')) != 0) {
+ *b = '\0';
+ if (!mkdir_maybe(buffer))
+ return 0;
+ }
+ return mkdir(name, 0777) == 0;
+}