diff options
author | Benjamin Poirier <benjamin.poirier@gmail.com> | 2021-07-28 03:04:52 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-07-24 17:40:19 (GMT) |
commit | 80febeeab8cae199d6a4f25fc4c2bff70004d539 (patch) | |
tree | 5db5f9f2f167335597d9092dad4f562ac34e9c99 | |
parent | 6519a9173f900b364f014a2321a17aa6bf652e6d (diff) | |
download | libnl-80febeeab8cae199d6a4f25fc4c2bff70004d539.zip libnl-80febeeab8cae199d6a4f25fc4c2bff70004d539.tar.gz libnl-80febeeab8cae199d6a4f25fc4c2bff70004d539.tar.bz2 |
test-cache-mngr: Add an option to control which oo_dump function is used
Many problems are only apparent when printing at level "details".
-rw-r--r-- | tests/test-cache-mngr.c | 60 |
1 files changed, 49 insertions, 11 deletions
diff --git a/tests/test-cache-mngr.c b/tests/test-cache-mngr.c index 9761452..ad2a05d 100644 --- a/tests/test-cache-mngr.c +++ b/tests/test-cache-mngr.c @@ -9,7 +9,7 @@ static int quit = 0; -static struct nl_dump_params dp = { +static struct nl_dump_params params = { .dp_type = NL_DUMP_LINE, }; @@ -24,7 +24,7 @@ static void change_cb(struct nl_cache *cache, struct nl_object *obj, else if (action == NL_ACT_CHANGE) printf("CHANGE "); - nl_object_dump(obj, &dp); + nl_object_dump(obj, ¶ms); } static void sigint(int arg) @@ -32,34 +32,72 @@ static void sigint(int arg) quit = 1; } +static void print_usage(FILE* stream, const char *name) +{ + fprintf(stream, + "Usage: %s [OPTIONS]... <cache name>... \n" + "\n" + "OPTIONS\n" + " -f, --format=TYPE Output format { brief | details | stats }\n" + " Default: brief\n" + " -h, --help Show this help text.\n" + , name); +} + int main(int argc, char *argv[]) { struct nl_cache_mngr *mngr; struct nl_cache *cache; - int err, i; - - dp.dp_fd = stdout; - - signal(SIGINT, sigint); + int err; + + for (;;) { + static struct option long_opts[] = { + { "format", required_argument, 0, 'f' }, + { "help", 0, 0, 'h' }, + { 0, 0, 0, 0 } + }; + int c; + + c = getopt_long(argc, argv, "hf:", long_opts, NULL); + if (c == -1) + break; + + switch (c) { + case 'f': + params.dp_type = nl_cli_parse_dumptype(optarg); + break; + case 'h': + print_usage(stdout, argv[0]); + exit(0); + case '?': + print_usage(stderr, argv[0]); + exit(1); + } + } err = nl_cache_mngr_alloc(NULL, NETLINK_ROUTE, NL_AUTO_PROVIDE, &mngr); if (err < 0) nl_cli_fatal(err, "Unable to allocate cache manager: %s", nl_geterror(err)); - for (i = 1; i < argc; i++) { - err = nl_cache_mngr_add(mngr, argv[i], &change_cb, NULL, &cache); + while (optind < argc) { + err = nl_cache_mngr_add(mngr, argv[optind], &change_cb, NULL, + &cache); if (err < 0) nl_cli_fatal(err, "Unable to add cache %s: %s", - argv[i], nl_geterror(err)); + argv[optind], nl_geterror(err)); + optind++; } + params.dp_fd = stdout; + signal(SIGINT, sigint); + while (!quit) { int err = nl_cache_mngr_poll(mngr, 1000); if (err < 0 && err != -NLE_INTR) nl_cli_fatal(err, "Polling failed: %s", nl_geterror(err)); - nl_cache_mngr_info(mngr, &dp); + nl_cache_mngr_info(mngr, ¶ms); } nl_cache_mngr_free(mngr); |