From: Felix Fietkau Date: Wed, 30 Jan 2008 02:11:36 +0000 (+0100) Subject: change uci_list_configs api for proper exception handling X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=commitdiff_plain;h=78f76bde7306cc9dd501b5325b2e40af8b22ad51 change uci_list_configs api for proper exception handling --- diff --git a/cli.c b/cli.c index 93517bf..3d25b7c 100644 --- a/cli.c +++ b/cli.c @@ -70,16 +70,17 @@ static int uci_show(int argc, char **argv) { char *section = (argc > 2 ? argv[2] : NULL); struct uci_package *package; - char **configs; + char **configs = NULL; char **p; - configs = uci_list_configs(ctx); - if (!configs) - return 0; + if ((uci_list_configs(ctx, &configs) != UCI_OK) || !configs) { + uci_perror(ctx, appname); + return 1; + } if (argc >= 2) { if (uci_load(ctx, argv[1], &package) != UCI_OK) { - uci_perror(ctx, NULL); + uci_perror(ctx, appname); return 1; } uci_show_package(package, section); @@ -90,7 +91,7 @@ static int uci_show(int argc, char **argv) for (p = configs; *p; p++) { if ((argc < 2) || !strcmp(argv[1], *p)) { if (uci_load(ctx, *p, &package) != UCI_OK) { - uci_perror(ctx, NULL); + uci_perror(ctx, appname); return 1; } uci_show_package(package, section); @@ -103,11 +104,13 @@ static int uci_show(int argc, char **argv) static int uci_do_export(int argc, char **argv) { - char **configs = uci_list_configs(ctx); + char **configs = NULL; char **p; - if (!configs) - return 0; + if ((uci_list_configs(ctx, &configs) != UCI_OK) || !configs) { + uci_perror(ctx, appname); + return 1; + } for (p = configs; *p; p++) { if ((argc < 2) || !strcmp(argv[1], *p)) { diff --git a/file.c b/file.c index be63247..0a9b180 100644 --- a/file.c +++ b/file.c @@ -802,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++) { @@ -836,6 +838,8 @@ char **uci_list_configs(struct uci_context *ctx) strcpy(buf, p); buf += strlen(buf) + 1; } - return configs; + *list = configs; + + return 0; } diff --git a/uci.h b/uci.h index e0b3d30..69f4c12 100644 --- a/uci.h +++ b/uci.h @@ -210,7 +210,7 @@ extern int uci_commit(struct uci_context *ctx, struct uci_package *p); * * @ctx: uci context */ -extern char **uci_list_configs(struct uci_context *ctx); +extern int uci_list_configs(struct uci_context *ctx, char ***list); /* UCI data structures */ enum uci_type {