1 | #include <argp.h> |
2 | #include <stdio.h> |
3 | #include <stdlib.h> |
4 | |
5 | static struct argp_option argp_options[] = { |
6 | { "dstaddr" , 'd', "ADDR" , 0, |
7 | "set destination (peer) address to ADDR" }, |
8 | { "peer" , 'p', "ADDR" , OPTION_ALIAS }, |
9 | { NULL } |
10 | }; |
11 | |
12 | static error_t parse_opt (int key, char *arg, struct argp_state *state); |
13 | |
14 | static struct argp argp = |
15 | { |
16 | argp_options, parse_opt |
17 | }; |
18 | |
19 | static int cnt; |
20 | |
21 | static int |
22 | do_test (int argc, char *argv[]) |
23 | { |
24 | int remaining; |
25 | argp_parse (argp: &argp, argc: argc, argv: argv, flags: 0, arg_index: &remaining, NULL); |
26 | return cnt != 4; |
27 | } |
28 | |
29 | static error_t |
30 | parse_opt (int key, char *arg, struct argp_state *state) |
31 | { |
32 | switch (key) |
33 | { |
34 | case 'd': |
35 | case 'p': |
36 | printf (format: "got '%c' with argument '%s'\n" , key, arg); |
37 | ++cnt; |
38 | break; |
39 | case 0: |
40 | case ARGP_KEY_END: |
41 | case ARGP_KEY_NO_ARGS: |
42 | case ARGP_KEY_INIT: |
43 | case ARGP_KEY_SUCCESS: |
44 | case ARGP_KEY_FINI: |
45 | // Ignore. |
46 | return ARGP_ERR_UNKNOWN; |
47 | default: |
48 | printf (format: "invalid key '%x'\n" , key); |
49 | exit (1); |
50 | } |
51 | return 0; |
52 | } |
53 | |
54 | #define TEST_FUNCTION do_test (argc, argv) |
55 | #include "../test-skeleton.c" |
56 | |