bug-argp2.c 1.0 KB

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