diff options
Diffstat (limited to 'rcynic/rcynic.c')
-rw-r--r-- | rcynic/rcynic.c | 22 |
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; +} |