cleanups/fixes, more cli stuff
[project/uci.git] / cli.c
1 /*
2 * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2
6 * as published by the Free Software Foundation
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13 #include <strings.h>
14 #include <stdlib.h>
15 #include "uci.h"
16
17 static struct uci_context *ctx;
18
19 static void uci_usage(int argc, char **argv)
20 {
21 fprintf(stderr,
22 "Usage: %s [options] <command> [arguments]\n\n"
23 "Commands:\n"
24 "\tshow [<config>[.<section>[.<option>]]]\n"
25 "\n",
26 argv[0]
27 );
28 exit(255);
29 }
30
31 static void uci_show_section(struct uci_section *p)
32 {
33 struct uci_option *o;
34 const char *cname, *sname;
35
36 cname = p->config->name;
37 sname = p->name;
38 uci_foreach_entry(option, &p->options, o) {
39 printf("%s.%s.%s=%s\n", cname, sname, o->name, o->value);
40 }
41 }
42
43 static void uci_show_file(const char *name)
44 {
45 struct uci_config *cfg;
46 struct uci_section *p;
47
48 if (uci_load(ctx, name, &cfg) != UCI_OK) {
49 uci_perror(ctx, "uci_load");
50 return;
51 }
52
53 uci_list_empty(&cfg->sections);
54 uci_foreach_entry(section, &cfg->sections, p) {
55 uci_show_section(p);
56 }
57 uci_unload(ctx, name);
58 }
59
60 static int uci_show(int argc, char **argv)
61 {
62 char **configs = uci_list_configs(ctx);
63 char **p;
64
65 if (!configs)
66 return 0;
67
68 for (p = configs; *p; p++) {
69 fprintf(stderr, "# config: %s\n", *p);
70 uci_show_file(*p);
71 }
72
73 return 0;
74 }
75
76 static int uci_cmd(int argc, char **argv)
77 {
78 if (!strcasecmp(argv[0], "show"))
79 uci_show(argc, argv);
80 return 0;
81 }
82
83 int main(int argc, char **argv)
84 {
85 int ret;
86
87 ctx = uci_alloc();
88 if (argc < 2)
89 uci_usage(argc, argv);
90 ret = uci_cmd(argc - 1, argv + 1);
91 uci_free(ctx);
92
93 return ret;
94 }