*/
#include <strings.h>
#include <stdlib.h>
+#include <unistd.h>
#include "uci.h"
static const char *appname = "uci";
"\tshow [<config>[.<section>[.<option>]]]\n"
"\tget <config>.<section>[.<option>]\n"
"\tset <config>.<section>[.<option>]=<value>\n"
+ "\n"
+ "Options:\n"
+ "\t-s force strict mode (stop on parser errors)\n"
+ "\t-S disable strict mode\n"
"\n",
argv[0]
);
{
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);
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);
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)) {
int main(int argc, char **argv)
{
int ret;
+ int c;
ctx = uci_alloc_context();
+ if (!ctx) {
+ fprintf(stderr, "Out of memory\n");
+ return 1;
+ }
+
+ while((c = getopt(argc, argv, "sS")) != -1) {
+ switch(c) {
+ case 's':
+ ctx->flags |= UCI_FLAG_STRICT;
+ break;
+ case 'S':
+ ctx->flags &= ~UCI_FLAG_STRICT;
+ ctx->flags |= UCI_FLAG_PERROR;
+ break;
+ default:
+ uci_usage(argc, argv);
+ break;
+ }
+ }
+ if (optind > 1)
+ argv[optind - 1] = argv[0];
+ argv += optind - 1;
+ argc -= optind - 1;
+
if (argc < 2)
uci_usage(argc, argv);
ret = uci_cmd(argc - 1, argv + 1);
if (ret == 255)
uci_usage(argc, argv);
+
uci_free_context(ctx);
return ret;