X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=list.c;h=24382c8464d090746d416fa45e5caef5b213b8b8;hb=1ac34884c1cc4e808674d8901c97e31776e8fc5c;hp=3fc6076a06f395c928cc11d41fe046d4cfdc93c4;hpb=ee1d58013e175386841efd30a9deb3e8a64d584e;p=project%2Fuci.git diff --git a/list.c b/list.c index 3fc6076..24382c8 100644 --- a/list.c +++ b/list.c @@ -2,9 +2,9 @@ * libuci - Library for the Unified Configuration Interface * Copyright (C) 2008 Felix Fietkau * - * this program is free software; you can redistribute it and/or modify - * it under the terms of the gnu lesser general public license version 2.1 - * as published by the free software foundation + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 + * as published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -163,7 +163,7 @@ uci_add_history(struct uci_context *ctx, struct uci_package *p, int cmd, char *s return; if (value) - size += strlen(section) + 1; + size += strlen(value) + 1; h = uci_alloc_element(ctx, history, option, size); ptr = uci_dataptr(h); @@ -339,7 +339,7 @@ int uci_set_element_value(struct uci_context *ctx, struct uci_element **element, list = e->list.prev; switch(e->type) { case UCI_TYPE_SECTION: - UCI_ASSERT(ctx, uci_validate_name(value)); + UCI_ASSERT(ctx, uci_validate_str(value, false)); size = sizeof(struct uci_section); s = uci_to_section(e); section = e->name; @@ -414,11 +414,8 @@ int uci_delete(struct uci_context *ctx, struct uci_package *p, char *section, ch /* NB: p, section, option validated by uci_lookup */ UCI_INTERNAL(uci_lookup, ctx, &e, p, section, option); - if (!internal) - return uci_del_element(ctx, e); - UCI_INTERNAL(uci_del_element, ctx, e); - - return 0; + ctx->internal = internal; + return uci_del_element(ctx, e); } int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char *option, char *value) @@ -436,7 +433,7 @@ int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char UCI_ASSERT(ctx, uci_validate_name(option)); UCI_ASSERT(ctx, value != NULL); } else { - UCI_ASSERT(ctx, uci_validate_name(value)); + UCI_ASSERT(ctx, uci_validate_str(value, false)); } /* @@ -449,7 +446,7 @@ int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char goto notfound; s = uci_to_section(e); - if (ctx->pctx) + if (ctx->pctx && ctx->pctx->merge) ctx->pctx->section = s; if (option) { @@ -468,11 +465,8 @@ int uci_set(struct uci_context *ctx, struct uci_package *p, char *section, char else e = &s->e; - if (!internal) - return uci_set_element_value(ctx, &e, value); - - UCI_INTERNAL(uci_set_element_value, ctx, &e, value); - return 0; + ctx->internal = internal; + return uci_set_element_value(ctx, &e, value); notfound: /* @@ -491,7 +485,7 @@ notfound: uci_alloc_option(s, option, value); else { s = uci_alloc_section(p, value, section); - if (ctx->pctx) + if (ctx->pctx && ctx->pctx->merge) ctx->pctx->section = s; }