diff options
-rw-r--r-- | src/config.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c index 78b5855..f8075ba 100644 --- a/src/config.c +++ b/src/config.c @@ -190,6 +190,31 @@ static const struct { const char *name; uint8_t flag; } ra_flags[] = { { .name = NULL, }, }; +static int mkdir_p(char *dir, mode_t mask) +{ + char *l = strrchr(dir, '/'); + int ret; + + if (!l) + return 0; + + *l = '\0'; + + if (mkdir_p(dir, mask)) + return -1; + + *l = '/'; + + ret = mkdir(dir, mask); + if (ret && errno == EEXIST) + return 0; + + if (ret) + syslog(LOG_ERR, "mkdir(%s, %d) failed: %m\n", dir, mask); + + return ret; +} + static void set_interface_defaults(struct interface *iface) { iface->ignore = true; |