X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=inline;f=ucw%2Fconf-test.c;h=e8ba0458c568e90045ff948b56ee709b81d89e77;hb=fd2a1b7dd39127af9f4deaaea56ce3deb5102585;hp=34d1f36bc9e316350bd8d2eab7194423037144c8;hpb=b541de765129b6bf28c5601bb355779652001150;p=libucw.git diff --git a/ucw/conf-test.c b/ucw/conf-test.c index 34d1f36b..e8ba0458 100644 --- a/ucw/conf-test.c +++ b/ucw/conf-test.c @@ -2,6 +2,7 @@ * Insane tester of reading configuration files * * (c) 2006 Robert Spalek + * (c) 2012 Martin Mares */ #include @@ -15,6 +16,7 @@ #include static int verbose; +static int reload; struct sub_sect_1 { cnode n; @@ -162,19 +164,20 @@ static struct cf_section cf_top = { } }; -static char short_opts[] = CF_SHORT_OPTS "v"; +static char short_opts[] = CF_SHORT_OPTS "rv"; static struct option long_opts[] = { CF_LONG_OPTS + {"reload", 0, 0, 'r'}, {"verbose", 0, 0, 'v'}, {NULL, 0, 0, 0} }; static char *help = "\ -Usage: conf-test \n\ +Usage: conf-test [ctxt] [nojournal] \n\ \n\ -Options:\n" -CF_USAGE -"-v\t\t\tBe verbose\n\ +Options:\n" CF_USAGE "\ +-r, --reload\t\tReload configuration\n\ +-v, --verbose\t\tBe verbose\n\ "; static void NONRET @@ -192,30 +195,49 @@ int main(int argc, char *argv[]) { log_init(argv[0]); + struct cf_context *cc = NULL, *prev = NULL; + + // Special arguments which have to be parsed before cf_getopt() + while (argc > 1) { + if (!strcmp(argv[1], "ctxt")) { + cc = cf_new_context(); + prev = cf_switch_context(cc); + argc--, argv++; + } else if (!strcmp(argv[1], "nojournal")) { + cf_set_journalling(0); + argc--, argv++; + } else + break; + } + cf_declare_section("top", &cf_top, 0); cf_def_file = "ucw/conf-test.cf"; int opt; while ((opt = cf_getopt(argc, argv, short_opts, long_opts, NULL)) >= 0) switch (opt) { + case 'r': reload++; break; case 'v': verbose++; break; default: usage("unknown option %c\n", opt); } if (optind < argc) usage("too many parameters (%d more)\n", argc-optind); - /* - cf_load("non-existent file"); - //cf_reload("non-existent file"); - cf_load("non-existent file"); - cf_set("top.d1 -1.1; top.master b"); - cf_reload(NULL); - cf_reload(NULL); - */ - - struct fastbuf *out = bfdopen(1, 1<<14); - cf_dump_sections(out); - bclose(out); + if (reload) { + cf_reload(NULL); + cf_reload(NULL); + } + + if (verbose) { + struct fastbuf *out = bfdopen(1, 1<<14); + cf_dump_sections(out); + bclose(out); + } + + if (cc) { + cf_switch_context(prev); + cf_delete_context(cc); + } return 0; }