make more functions available externally
[project/uci.git] / libuci.c
index da2d15e..a503699 100644 (file)
--- a/libuci.c
+++ b/libuci.c
@@ -23,7 +23,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include "uci.h"
-#include "err.h"
 
 static const char *uci_confdir = UCI_CONFDIR;
 static const char *uci_savedir = UCI_SAVEDIR;
@@ -172,11 +171,13 @@ int uci_list_configs(struct uci_context *ctx, char ***list)
 
 int uci_commit(struct uci_context *ctx, struct uci_package **package, bool overwrite)
 {
+       struct uci_package *p;
        UCI_HANDLE_ERR(ctx);
        UCI_ASSERT(ctx, package != NULL);
-       UCI_ASSERT(ctx, *package != NULL);
-       UCI_ASSERT(ctx, ctx->backend && ctx->backend->commit);
-       ctx->backend->commit(ctx, package, overwrite);
+       p = *package;
+       UCI_ASSERT(ctx, p != NULL);
+       UCI_ASSERT(ctx, p->backend && p->backend->commit);
+       p->backend->commit(ctx, package, overwrite);
        return 0;
 }
 
@@ -192,4 +193,27 @@ int uci_load(struct uci_context *ctx, const char *name, struct uci_package **pac
        return 0;
 }
 
+int uci_add_backend(struct uci_context *ctx, struct uci_backend *b)
+{
+       struct uci_element *e;
+       UCI_HANDLE_ERR(ctx);
+       e = uci_lookup_list(&ctx->backends, b->e.name);
+       if (e)
+               UCI_THROW(ctx, UCI_ERR_DUPLICATE);
+
+       uci_list_add(&ctx->backends, &b->e.list);
+       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;
+}