uci_perror(ctx, appname);
}
+static void uci_show_option(struct uci_option *o)
+{
+ printf("%s.%s.%s=%s\n",
+ o->section->package->e.name,
+ o->section->e.name,
+ o->e.name,
+ o->value);
+}
+
static void uci_show_section(struct uci_section *p)
{
struct uci_element *e;
sname = p->e.name;
printf("%s.%s=%s\n", cname, sname, p->type);
uci_foreach_element(&p->options, e) {
- printf("%s.%s.%s=%s\n", cname, sname, e->name, uci_to_option(e)->value);
+ uci_show_option(uci_to_option(e));
}
}
}
}
-static int package_cmd(int cmd, char *package)
+static int package_cmd(int cmd, char *tuple)
{
- struct uci_package *p = NULL;
- int ret;
-
- ret = uci_load(ctx, package, &p);
+ struct uci_package *p;
+ struct uci_section *s;
+ struct uci_element *e = NULL;
- if (ret != UCI_OK) {
+ if (uci_lookup_ext(ctx, &e, tuple) != UCI_OK) {
cli_perror();
return 1;
}
- if (!p)
+ switch(e->type) {
+ case UCI_TYPE_PACKAGE:
+ p = uci_to_package(e);
+ break;
+ case UCI_TYPE_SECTION:
+ s = uci_to_section(e);
+ p = s->package;
+ break;
+ case UCI_TYPE_OPTION:
+ s = uci_to_option(e)->section;
+ p = s->package;
+ break;
+ default:
return 0;
+ }
+
switch(cmd) {
case CMD_CHANGES:
uci_show_changes(p);
uci_export(ctx, stdout, p, true);
break;
case CMD_SHOW:
- uci_show_package(p);
+ switch(e->type) {
+ case UCI_TYPE_PACKAGE:
+ uci_show_package(p);
+ break;
+ case UCI_TYPE_SECTION:
+ uci_show_section(uci_to_section(e));
+ break;
+ case UCI_TYPE_OPTION:
+ uci_show_option(uci_to_option(e));
+ break;
+ default:
+ /* should not happen */
+ return 1;
+ }
break;
}
static int uci_do_section_cmd(int cmd, int argc, char **argv)
{
struct uci_package *p = NULL;
+ struct uci_section *s = NULL;
struct uci_element *e = NULL;
- char *package = NULL;
char *section = NULL;
char *option = NULL;
char *value = NULL;
- char **ptr = NULL;
int ret = UCI_OK;
if (argc != 2)
return 255;
- switch(cmd) {
- case CMD_SET:
- case CMD_RENAME:
- ptr = &value;
- break;
- default:
- break;
+ value = strchr(argv[1], '=');
+ if (value) {
+ *value = 0;
+ value++;
+ if (!uci_validate_text(value))
+ return 1;
}
- if (uci_parse_tuple(ctx, argv[1], &package, §ion, &option, ptr) != UCI_OK)
- return 1;
- if (section && !section[0])
+
+ if (value && (cmd != CMD_SET) && (cmd != CMD_RENAME))
return 1;
- if (uci_load(ctx, package, &p) != UCI_OK) {
+ if (uci_lookup_ext(ctx, &e, argv[1]) != UCI_OK) {
cli_perror();
return 1;
}
- if (!p)
- return 0;
+
+ switch(e->type) {
+ case UCI_TYPE_SECTION:
+ s = uci_to_section(e);
+ break;
+ case UCI_TYPE_OPTION:
+ option = e->name;
+ s = uci_to_option(e)->section;
+ break;
+ default:
+ return 1;
+ }
+ section = s->e.name;
+ p = s->package;
switch(cmd) {
case CMD_GET:
- if (uci_lookup(ctx, &e, p, section, option) != UCI_OK)
- return 1;
-
switch(e->type) {
case UCI_TYPE_SECTION:
- value = uci_to_section(e)->type;
+ value = s->type;
break;
case UCI_TYPE_OPTION:
value = uci_to_option(e)->value;
break;
default:
- /* should not happen */
- return 1;
+ break;
}
/* throw the value to stdout */
printf("%s\n", value);