some helpful comments
[project/uci.git] / file.c
diff --git a/file.c b/file.c
index b8aa865..47d9c44 100644 (file)
--- a/file.c
+++ b/file.c
@@ -502,8 +502,18 @@ int uci_import(struct uci_context *ctx, FILE *stream, const char *name, struct u
 
        while (!feof(pctx->file)) {
                uci_getln(ctx, 0);
+
+               UCI_TRAP_SAVE(ctx, error);
                if (pctx->buf[0])
                        uci_parse_line(ctx, single);
+               UCI_TRAP_RESTORE(ctx);
+               continue;
+error:
+               if (ctx->flags & UCI_FLAG_PERROR)
+                       uci_perror(ctx, NULL);
+               if ((ctx->errno != UCI_ERR_PARSE) ||
+                       (ctx->flags & UCI_FLAG_STRICT))
+                       UCI_THROW(ctx, ctx->errno);
        }
 
        if (package)
@@ -535,7 +545,7 @@ static FILE *uci_open_stream(struct uci_context *ctx, const char *filename, int
                UCI_THROW(ctx, UCI_ERR_NOTFOUND);
        }
 
-       fd = open(filename, (write ? O_RDWR | O_CREAT : O_RDONLY));
+       fd = open(filename, (write ? O_RDWR | O_CREAT : O_RDONLY), UCI_FILEMODE);
        if (fd <= 0)
                goto error;
 
@@ -739,7 +749,7 @@ int uci_save(struct uci_context *ctx, struct uci_package *p)
                        fprintf(f, "\n");
                else
                        fprintf(f, "=%s\n", h->value);
-               uci_list_del(&e->list);
+               uci_free_history(h);
        }
 
 done:
@@ -792,15 +802,17 @@ static inline char *get_filename(char *path)
        return p;
 }
 
-char **uci_list_configs(struct uci_context *ctx)
+int uci_list_configs(struct uci_context *ctx, char ***list)
 {
        char **configs;
        glob_t globbuf;
        int size, i;
        char *buf;
 
+       UCI_HANDLE_ERR(ctx);
+
        if (glob(UCI_CONFDIR "/*", GLOB_MARK, NULL, &globbuf) != 0)
-               return NULL;
+               UCI_THROW(ctx, UCI_ERR_NOTFOUND);
 
        size = sizeof(char *) * (globbuf.gl_pathc + 1);
        for(i = 0; i < globbuf.gl_pathc; i++) {
@@ -826,6 +838,8 @@ char **uci_list_configs(struct uci_context *ctx)
                strcpy(buf, p);
                buf += strlen(buf) + 1;
        }
-       return configs;
+       *list = configs;
+
+       return 0;
 }