+ UCI_HANDLE_ERR(ctx);
+
+ e = uci_lookup_list(&ctx->backends, b->e.name);
+ if (!e || uci_to_backend(e)->ptr != b->ptr)
+ UCI_THROW(ctx, UCI_ERR_NOTFOUND);
+ b = uci_to_backend(e);
+
+ if (ctx->backend && ctx->backend->ptr == b->ptr)
+ ctx->backend = &uci_file_backend;
+
+ uci_foreach_element_safe(&ctx->root, tmp, e) {
+ struct uci_package *p = uci_to_package(e);
+
+ if (!p->backend)
+ continue;
+
+ if (p->backend->ptr == b->ptr)
+ UCI_INTERNAL(uci_unload, ctx, p);
+ }
+
+ uci_list_del(&b->e.list);
+ free(b);
+
+ return 0;
+}
+
+#endif
+
+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;
+}