]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Add test case for last argp bug.
authorUlrich Drepper <drepper@redhat.com>
Sun, 4 Apr 2010 18:28:36 +0000 (11:28 -0700)
committerUlrich Drepper <drepper@redhat.com>
Sun, 4 Apr 2010 18:28:36 +0000 (11:28 -0700)
ChangeLog
argp/Makefile
argp/bug-argp2.c [new file with mode: 0644]

index e8b494b1ff06f0af7ee8901b42c8424ecf1ef702..69ba4dd9c5a08c6bd0537b0d18c39c43bf5dbd03 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-04  Ulrich Drepper  <drepper@redhat.com>
+
+       * argp/Makefile: Add rules to build and run bug-argp2.
+       * argp/bug-argp2.c: New file.
+
 2010-02-05  Sergey Poznyakoff  <gray@gnu.org.ua>
 
        [BZ #11254]
index b8c9fca0fb38dbc588641740428842b0a971938a..caa95dbb9fb288937deab92b2de388024ad896d2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1997, 2002, 2003, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1997,2002,2003,2006,2007,2010 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -26,12 +26,13 @@ distribute  = argp-fmtstream.h argp-namefrob.h
 routines       = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \
                                     pvh xinl eexst)
 
-tests          = argp-test tst-argp1 bug-argp1 tst-argp2
+tests          = argp-test tst-argp1 bug-argp1 tst-argp2 bug-argp2
 
 CFLAGS-argp-help.c = $(uses-callbacks) -fexceptions
 CFLAGS-argp-parse.c = $(uses-callbacks)
 CFLAGS-argp-fmtstream.c = -fexceptions
 
 bug-argp1-ARGS = -- --help
+bug-argp2-ARGS = -- -d 111 --dstaddr 222 -p 333 --peer 444
 
 include ../Rules
diff --git a/argp/bug-argp2.c b/argp/bug-argp2.c
new file mode 100644 (file)
index 0000000..133e5cf
--- /dev/null
@@ -0,0 +1,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"