File: bug-argp2.c

package info (click to toggle)
glibc 2.24-11+deb9u4
  • links: PTS, VCS
  • area: main
  • in suites: stretch, stretch-proposed-updates
  • size: 225,852 kB
  • sloc: ansic: 996,505; asm: 261,827; sh: 10,484; makefile: 9,856; cpp: 4,169; python: 3,971; perl: 2,254; awk: 1,753; pascal: 1,521; yacc: 291; sed: 80
file content (55 lines) | stat: -rw-r--r-- 1,048 bytes parent folder | download | duplicates (30)
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"