add uci_set_backend()
authorFelix Fietkau <nbd@openwrt.org>
Tue, 12 Feb 2008 11:16:39 +0000 (12:16 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 12 Feb 2008 11:16:39 +0000 (12:16 +0100)
file.c
libuci.c
list.c
uci.h

diff --git a/file.c b/file.c
index 883e36006e39b84390906943af13ac69365e49f0..29ff3189a4c0c7c93c39de8bcb4b98914adf48a2 100644 (file)
--- a/file.c
+++ b/file.c
@@ -69,7 +69,7 @@ static void uci_switch_config(struct uci_context *ctx)
         * if an older config under the same name exists, unload it
         * ignore errors here, e.g. if the config was not found
         */
-       e = uci_lookup_list(ctx, &ctx->root, name);
+       e = uci_lookup_list(&ctx->root, name);
        if (e)
                UCI_THROW(ctx, UCI_ERR_DUPLICATE);
        pctx->package = uci_alloc_package(ctx, name);
index 6bbc874163217ef2543bf3810e59139518dba55b..50c17f92bb6bd19cc7fa763ff8e8ff0d6ce1d1d6 100644 (file)
--- a/libuci.c
+++ b/libuci.c
@@ -194,4 +194,15 @@ int uci_load(struct uci_context *ctx, const char *name, struct uci_package **pac
        return 0;
 }
 
+int uci_set_backend(struct uci_context *ctx, const char *name)
+{
+       struct uci_element *e;
 
+       UCI_HANDLE_ERR(ctx);
+       UCI_ASSERT(ctx, name != NULL);
+       e = uci_lookup_list(&ctx->backends, name);
+       if (!e)
+               UCI_THROW(ctx, UCI_ERR_NOTFOUND);
+       ctx->backend = uci_to_backend(e);
+       return 0;
+}
diff --git a/list.c b/list.c
index aabcab0582a0d0dc14fa6016b452237b75fbae4d..fb4d478f6e2509008fa7991619e7ab47b5d97652 100644 (file)
--- a/list.c
+++ b/list.c
@@ -217,7 +217,7 @@ uci_free_package(struct uci_package **package)
        *package = NULL;
 }
 
-static struct uci_element *uci_lookup_list(struct uci_context *ctx, struct uci_list *list, const char *name)
+static struct uci_element *uci_lookup_list(struct uci_list *list, const char *name)
 {
        struct uci_element *e;
 
@@ -240,13 +240,13 @@ int uci_lookup(struct uci_context *ctx, struct uci_element **res, struct uci_pac
        if (option)
                UCI_ASSERT(ctx, uci_validate_name(option));
 
-       e = uci_lookup_list(ctx, &p->sections, section);
+       e = uci_lookup_list(&p->sections, section);
        if (!e)
                goto notfound;
 
        if (option) {
                s = uci_to_section(e);
-               e = uci_lookup_list(ctx, &s->options, option);
+               e = uci_lookup_list(&s->options, option);
                if (!e)
                        goto notfound;
        }
@@ -451,7 +451,7 @@ int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char
         * if the section/option is to be modified and it is not found
         * create a new element in the appropriate list
         */
-       e = uci_lookup_list(ctx, &p->sections, section);
+       e = uci_lookup_list(&p->sections, section);
        if (!e)
                goto notfound;
 
@@ -460,7 +460,7 @@ int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char
                ctx->pctx->section = s;
 
        if (option) {
-               e = uci_lookup_list(ctx, &s->options, option);
+               e = uci_lookup_list(&s->options, option);
                if (!e)
                        goto notfound;
                o = uci_to_option(e);
diff --git a/uci.h b/uci.h
index 4855170c200334bbc6323953f20ac2d861978709..29cd07d0410e7e8c75d79717b87a402dfb2b844a 100644 (file)
--- a/uci.h
+++ b/uci.h
@@ -275,6 +275,15 @@ extern int uci_revert(struct uci_context *ctx, struct uci_package **p, char *sec
  */
 extern int uci_parse_argument(struct uci_context *ctx, FILE *stream, char **str, char **result);
 
+/**
+ * uci_set_backend: change the default backend
+ * @ctx: uci context
+ * @name: name of the backend
+ *
+ * The default backend is "file", which uses /etc/config for config storage
+ */
+extern int uci_set_backend(struct uci_context *ctx, const char *name);
+
 /* UCI data structures */
 enum uci_type {
        UCI_TYPE_HISTORY = 0,