create the history savedir on uci_save() if it does not exist
authorFelix Fietkau <nbd@openwrt.org>
Tue, 12 Feb 2008 12:30:25 +0000 (13:30 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 12 Feb 2008 12:30:25 +0000 (13:30 +0100)
history.c
uci.h

index 8935a3f..6be8a9d 100644 (file)
--- a/history.c
+++ b/history.c
@@ -355,6 +355,7 @@ int uci_save(struct uci_context *ctx, struct uci_package *p)
        FILE *f = NULL;
        char *filename = NULL;
        struct uci_element *e, *tmp;
+       struct stat statbuf;
 
        UCI_HANDLE_ERR(ctx);
        UCI_ASSERT(ctx, p != NULL);
@@ -371,6 +372,11 @@ int uci_save(struct uci_context *ctx, struct uci_package *p)
        if (uci_list_empty(&p->history))
                return 0;
 
+       if (stat(ctx->savedir, &statbuf) < 0)
+               mkdir(ctx->savedir, UCI_DIRMODE);
+       else if ((statbuf.st_mode & S_IFMT) != S_IFDIR)
+               UCI_THROW(ctx, UCI_ERR_IO);
+
        if ((asprintf(&filename, "%s/%s", ctx->savedir, p->e.name) < 0) || !filename)
                UCI_THROW(ctx, UCI_ERR_MEM);
 
diff --git a/uci.h b/uci.h
index ab65d1c..5cd36e0 100644 (file)
--- a/uci.h
+++ b/uci.h
@@ -32,7 +32,8 @@
 
 #define UCI_CONFDIR "/etc/config"
 #define UCI_SAVEDIR "/tmp/.uci"
-#define UCI_FILEMODE   0600
+#define UCI_DIRMODE 0700
+#define UCI_FILEMODE 0600
 
 enum
 {