Signed-off-by: Yousong Zhou <yszhou4t...@gmail.com>
---
 delta.c |   25 ++++++++++++++-----------
 file.c  |    9 +++------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/delta.c b/delta.c
index b56df5b..2eb2ae7 100644
--- a/delta.c
+++ b/delta.c
@@ -95,11 +95,14 @@ int uci_add_delta_path(struct uci_context *ctx, const char 
*dir)
        return 0;
 }
 
-static inline int uci_parse_delta_tuple(struct uci_context *ctx, char **buf, 
struct uci_ptr *ptr)
+static inline int uci_parse_delta_tuple(struct uci_context *ctx, struct 
uci_ptr *ptr)
 {
+       struct uci_parse_context *pctx = ctx->pctx;
+       char *str = pctx_cur_str(pctx), *arg;
        int c = UCI_CMD_CHANGE;
 
-       switch(**buf) {
+       UCI_INTERNAL(uci_parse_argument, ctx, ctx->pctx->file, &str, &arg);
+       switch(*arg) {
        case '^':
                c = UCI_CMD_REORDER;
                break;
@@ -122,9 +125,9 @@ static inline int uci_parse_delta_tuple(struct uci_context 
*ctx, char **buf, str
        }
 
        if (c != UCI_CMD_CHANGE)
-               *buf += 1;
+               arg += 1;
 
-       UCI_INTERNAL(uci_parse_ptr, ctx, ptr, *buf);
+       UCI_INTERNAL(uci_parse_ptr, ctx, ptr, arg);
 
        if (!ptr->section)
                goto error;
@@ -155,13 +158,13 @@ error:
        return 0;
 }
 
-static void uci_parse_delta_line(struct uci_context *ctx, struct uci_package 
*p, char *buf)
+static void uci_parse_delta_line(struct uci_context *ctx, struct uci_package 
*p)
 {
        struct uci_element *e = NULL;
        struct uci_ptr ptr;
        int cmd;
 
-       cmd = uci_parse_delta_tuple(ctx, &buf, &ptr);
+       cmd = uci_parse_delta_tuple(ctx, &ptr);
        if (strcmp(ptr.package, p->e.name) != 0)
                goto error;
 
@@ -214,6 +217,7 @@ static int uci_parse_delta(struct uci_context *ctx, FILE 
*stream, struct uci_pac
        pctx->file = stream;
 
        while (!feof(pctx->file)) {
+               pctx->pos = 0;
                uci_getln(ctx, 0);
                if (!pctx->buf[0])
                        continue;
@@ -223,7 +227,7 @@ static int uci_parse_delta(struct uci_context *ctx, FILE 
*stream, struct uci_pac
                 * delta as possible
                 */
                UCI_TRAP_SAVE(ctx, error);
-               uci_parse_delta_line(ctx, p, pctx->buf);
+               uci_parse_delta_line(ctx, p);
                UCI_TRAP_RESTORE(ctx);
                changes++;
 error:
@@ -311,11 +315,10 @@ static void uci_filter_delta(struct uci_context *ctx, 
const char *name, const ch
        pctx->file = f;
        while (!feof(f)) {
                struct uci_element *e;
-               char *buf;
 
+               pctx->pos = 0;
                uci_getln(ctx, 0);
-               buf = pctx->buf;
-               if (!buf[0])
+               if (!pctx->buf[0])
                        continue;
 
                /* NB: need to allocate the element before the call to
@@ -324,7 +327,7 @@ static void uci_filter_delta(struct uci_context *ctx, const 
char *name, const ch
                e = uci_alloc_generic(ctx, UCI_TYPE_DELTA, pctx->buf, 
sizeof(struct uci_element));
                uci_list_add(&list, &e->list);
 
-               uci_parse_delta_tuple(ctx, &buf, &ptr);
+               uci_parse_delta_tuple(ctx, &ptr);
                if (section) {
                        if (!ptr.section || (strcmp(section, ptr.section) != 0))
                                continue;
diff --git a/file.c b/file.c
index 63ca919..177cee6 100644
--- a/file.c
+++ b/file.c
@@ -278,15 +278,12 @@ int uci_parse_argument(struct uci_context *ctx, FILE 
*stream, char **str, char *
                uci_alloc_parse_context(ctx);
 
        ctx->pctx->file = stream;
-
-       if (!*str) {
+       if (!*str)
                uci_getln(ctx, 0);
-               *str = ctx->pctx->buf;
-       } else {
-               UCI_ASSERT(ctx, ctx->pctx->pos == *str - ctx->pctx->buf);
-       }
 
+       /*FIXME do we need to skip empty lines? */
        *result = next_arg(ctx, false, false);
+       *str = pctx_cur_str(ctx->pctx);
 
        return 0;
 }
-- 
1.7.10.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to