summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/config.c25
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;