parser: fix precedence of quoting over ; as command terminator, thx to netprince...
[project/uci.git] / file.c
diff --git a/file.c b/file.c
index 740b1d5..5360ef7 100644 (file)
--- a/file.c
+++ b/file.c
@@ -35,6 +35,7 @@ static void assert_eol(struct uci_context *ctx, char **str)
 {
        char *tmp;
 
 {
        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");
        tmp = next_arg(ctx, str, false, false);
        if (*tmp && (ctx->flags & UCI_FLAG_STRICT))
                uci_parse_error(ctx, *str, "too many arguments");
@@ -169,19 +170,17 @@ error:
 static void uci_parse_line(struct uci_context *ctx, bool single)
 {
        struct uci_parse_context *pctx = ctx->pctx;
 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)
                if (!word)
-                       continue;
+                       return;
 
                switch(word[0]) {
 
                switch(word[0]) {
+                       case 0:
                        case '#':
                                return;
                        case 'p':
                        case '#':
                                return;
                        case 'p':
@@ -200,7 +199,7 @@ static void uci_parse_line(struct uci_context *ctx, bool single)
                                uci_parse_error(ctx, word, "unterminated command");
                                break;
                }
                                uci_parse_error(ctx, word, "unterminated command");
                                break;
                }
-       }
+       } while (1);
 }
 
 /* max number of characters that escaping adds to the string */
 }
 
 /* max number of characters that escaping adds to the string */