X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=file.c;h=5360ef764a15cb9b9d3bbd5e17c64135fac26c45;hp=29ff3189a4c0c7c93c39de8bcb4b98914adf48a2;hb=d4bab379481c8ef0d5710a616660f1d7144d768f;hpb=53726f5dd57ab09a206c96108a71db25e7517caa diff --git a/file.c b/file.c index 29ff318..5360ef7 100644 --- a/file.c +++ b/file.c @@ -35,6 +35,7 @@ static void assert_eol(struct uci_context *ctx, char **str) { char *tmp; + skip_whitespace(ctx, str); tmp = next_arg(ctx, str, false, false); if (*tmp && (ctx->flags & UCI_FLAG_STRICT)) uci_parse_error(ctx, *str, "too many arguments"); @@ -122,7 +123,8 @@ static void uci_parse_config(struct uci_context *ctx, char **str) if (pctx->merge) { UCI_TRAP_SAVE(ctx, error); - uci_set(ctx, pctx->package, name, NULL, type, NULL); + if (uci_set(ctx, pctx->package, name, NULL, type, NULL) != UCI_OK) + goto error; UCI_TRAP_RESTORE(ctx); return; error: @@ -168,19 +170,17 @@ error: static void uci_parse_line(struct uci_context *ctx, bool single) { struct uci_parse_context *pctx = ctx->pctx; - char *word, *brk = NULL; - - for (word = strtok_r(pctx->buf, ";", &brk); - word; - word = strtok_r(NULL, ";", &brk)) { - - char *pbrk = NULL; - word = strtok_r(word, " \t", &pbrk); + char *word, *brk; + word = pctx->buf; + do { + brk = NULL; + word = strtok_r(word, " \t", &brk); if (!word) - continue; + return; switch(word[0]) { + case 0: case '#': return; case 'p': @@ -199,7 +199,7 @@ static void uci_parse_line(struct uci_context *ctx, bool single) uci_parse_error(ctx, word, "unterminated command"); break; } - } + } while (1); } /* max number of characters that escaping adds to the string */ @@ -329,6 +329,8 @@ error: } uci_fixup_section(ctx, ctx->pctx->section); + if (!pctx->package && name) + uci_switch_config(ctx); if (package) *package = pctx->package; if (pctx->merge)