diff options
author | Rob Austein <sra@hactrn.net> | 2006-09-20 18:58:18 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2006-09-20 18:58:18 +0000 |
commit | 16a84fd500fa4addc7d0226e20e2bfb66091994d (patch) | |
tree | 9bdf93d4a99f4e598f0b1c068f32aa8c17bfed74 /rcynic/rcynic.c | |
parent | 74310be2f306ad34dd434b0b4b106f81cad6daed (diff) |
Checkpoint
svn path=/rcynic/rcynic.c; revision=296
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; +} |