From cdbade2a6e0e9a228398ab55ae44f70f56611896 Mon Sep 17 00:00:00 2001 From: Mika Laitio Date: Sun, 26 Dec 2010 01:08:34 +0200 Subject: [PATCH] API support for creating named sections from c-code Signed-off-by: Mika Laitio --- list.c | 19 +++++++++++++++++-- uci.h | 4 ++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/list.c b/list.c index a336b84..661ecc6 100644 --- a/list.c +++ b/list.c @@ -72,8 +72,7 @@ uci_free_element(struct uci_element *e) free(e); } -static struct uci_option * -uci_alloc_option(struct uci_section *s, const char *name, const char *value) +struct uci_option *uci_alloc_option(struct uci_section *s, const char *name, const char *value) { struct uci_package *p = s->package; struct uci_context *ctx = p->ctx; @@ -543,6 +542,22 @@ int uci_add_section(struct uci_context *ctx, struct uci_package *p, const char * return 0; } +int uci_add_named_section(struct uci_context *ctx, struct uci_package *p, const char *type, const char *name, struct uci_section **res) +{ + bool internal = ctx->internal; + struct uci_section *s; + + UCI_HANDLE_ERR(ctx); + UCI_ASSERT(ctx, p != NULL); + s = uci_alloc_section(p, type, name); + uci_fixup_section(ctx, s); + *res = s; + if (!internal && p->has_delta) + uci_add_delta(ctx, &p->delta, UCI_CMD_ADD, s->e.name, NULL, type); + + return 0; +} + int uci_delete(struct uci_context *ctx, struct uci_ptr *ptr) { /* NB: pass on internal flag to uci_del_element */ diff --git a/uci.h b/uci.h index fe5e314..035c051 100644 --- a/uci.h +++ b/uci.h @@ -73,6 +73,8 @@ struct uci_parse_context; */ extern struct uci_context *uci_alloc_context(void); +extern struct uci_option *uci_alloc_option(struct uci_section *s, const char *name, const char *value); + /** * uci_free_context: Free the uci context including all of its data */ @@ -162,6 +164,8 @@ extern int uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *st */ extern int uci_add_section(struct uci_context *ctx, struct uci_package *p, const char *type, struct uci_section **res); +extern int uci_add_named_section(struct uci_context *ctx, struct uci_package *p, const char *type, const char *name, struct uci_section **res); + /** * uci_set: Set an element's value; create the element if necessary * @ctx: uci context -- 2.41.1