File: bug-argp2.c

package info (click to toggle)
glibc 2.28-10
  • links: PTS, VCS
  • area: main
  • in suites: buster, buster-backports, buster-proposed-updates, sid
  • size: 272,168 kB
  • sloc: ansic: 1,008,602; asm: 259,607; makefile: 11,271; sh: 10,477; python: 6,910; cpp: 4,992; perl: 2,258; awk: 2,005; yacc: 290; pascal: 182; sed: 73
file content (55 lines) | stat: -rw-r--r-- 1,048 bytes parent folder | download | duplicates (27)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <argp.h>
#include <stdio.h>
#include <stdlib.h>

static struct argp_option argp_options[] = {
  { "dstaddr", 'd', "ADDR", 0,
    "set destination (peer) address to ADDR" },
  { "peer", 'p', "ADDR", OPTION_ALIAS },
  { NULL }
};

static error_t parse_opt (int key, char *arg, struct argp_state *state);

static struct argp argp =
{
  argp_options, parse_opt
};

static int cnt;

static int
do_test (int argc, char *argv[])
{
  int remaining;
  argp_parse (&argp, argc, argv, 0, &remaining, NULL);
  return cnt != 4;
}

static error_t
parse_opt (int key, char *arg, struct argp_state *state)
{
  switch (key)
  {
  case 'd':
  case 'p':
    printf ("got '%c' with argument '%s'\n", key, arg);
    ++cnt;
    break;
  case 0:
  case ARGP_KEY_END:
  case ARGP_KEY_NO_ARGS:
  case ARGP_KEY_INIT:
  case ARGP_KEY_SUCCESS:
  case ARGP_KEY_FINI:
    // Ignore.
    return ARGP_ERR_UNKNOWN;
  default:
    printf ("invalid key '%x'\n", key);
    exit (1);
  }
  return 0;
}

#define TEST_FUNCTION do_test (argc, argv)
#include "../test-skeleton.c"