1#include <argp.h>
2#include <stdio.h>
3#include <stdlib.h>
4
5static 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
12static error_t parse_opt (int key, char *arg, struct argp_state *state);
13
14static struct argp argp =
15{
16 argp_options, parse_opt
17};
18
19static int cnt;
20
21static int
22do_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
29static error_t
30parse_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

source code of glibc/argp/bug-argp2.c