X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubox.git;a=blobdiff_plain;f=validate%2Fcli.c;h=07d2b2ef9cb28bbf4e53911f7f71cf0d013092ff;hp=935b5f724881e00bfb018276854de78832d4eb4d;hb=31d66f2c3b2afbc9eaae4e2c22103d0f79e9503e;hpb=89fa6427a27091dd501b66b9bcf009254abd7d80 diff --git a/validate/cli.c b/validate/cli.c index 935b5f7..07d2b2e 100644 --- a/validate/cli.c +++ b/validate/cli.c @@ -105,12 +105,12 @@ export_value(enum dt_type type, const char *name, const char *val) printf("; "); } -static void +static int validate_value(struct uci_ptr *ptr, const char *expr, const char *def) { int i = 0; bool empty = true, first = true; - enum dt_type type; + enum dt_type type = DT_INVALID; struct uci_element *e; struct uci_option *opt = ptr->o; @@ -128,7 +128,7 @@ validate_value(struct uci_ptr *ptr, const char *expr, const char *def) if (empty) { export_value(DT_STRING, ptr->option, def); - return; + return 0; } uci_foreach_element(&opt->v.list, e) @@ -159,7 +159,7 @@ validate_value(struct uci_ptr *ptr, const char *expr, const char *def) if (!opt->v.string || !*opt->v.string) { export_value(DT_STRING, ptr->option, def); - return; + return 0; } type = dt_parse(expr, opt->v.string); @@ -169,9 +169,10 @@ validate_value(struct uci_ptr *ptr, const char *expr, const char *def) ptr->package, ptr->section, ptr->option, opt->v.string, expr, type ? "true" : "false"); } + return type ? 0 : -1; } -static void +static int validate_option(struct uci_context *ctx, char *package, char *section, char *option) { char *opt, *expr, *def; @@ -180,7 +181,7 @@ validate_option(struct uci_context *ctx, char *package, char *section, char *opt if (!parse_tuple(option, &opt, &expr, &def)) { fprintf(stderr, "%s is not a valid option\n", option); - return; + return -1; } ptr.package = package; @@ -192,10 +193,10 @@ validate_option(struct uci_context *ctx, char *package, char *section, char *opt (ptr.last->type != UCI_TYPE_OPTION)) { export_value(DT_STRING, opt, def); - return; + return 0; } - validate_value(&ptr, expr, def); + return validate_value(&ptr, expr, def); } int @@ -206,7 +207,7 @@ main(int argc, char **argv) char *opt, *expr, *def; int len = argc - 4; enum dt_type rv; - int i; + int i, rc; if (argc == 3) { rv = dt_parse(argv[1], argv[2]); @@ -243,8 +244,12 @@ main(int argc, char **argv) if (uci_load(ctx, argv[1], &package)) return -1; - for (i = 0; i < len; i++) - validate_option(ctx, argv[1], argv[3], argv[4 + i]); + rc = 0; + for (i = 0; i < len; i++) { + if (validate_option(ctx, argv[1], argv[3], argv[4 + i])) { + rc = -1; + } + } - return 0; + return rc; }