|
Packit |
33f14e |
/* Test of command line argument processing.
|
|
Packit |
33f14e |
Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
This program is free software: you can redistribute it and/or modify
|
|
Packit |
33f14e |
it under the terms of the GNU General Public License as published by
|
|
Packit |
33f14e |
the Free Software Foundation; either version 3 of the License, or
|
|
Packit |
33f14e |
(at your option) any later version.
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
This program is distributed in the hope that it will be useful,
|
|
Packit |
33f14e |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
33f14e |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
33f14e |
GNU General Public License for more details.
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
You should have received a copy of the GNU General Public License
|
|
Packit |
33f14e |
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Written by Bruno Haible <bruno@clisp.org>, 2009. */
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
#include <stdbool.h>
|
|
Packit |
33f14e |
#include "macros.h"
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* The glibc/gnulib implementation of getopt supports setting optind =
|
|
Packit |
33f14e |
0, but not all other implementations do. This matters for getopt.
|
|
Packit |
33f14e |
But for getopt_long, we require GNU compatibility. */
|
|
Packit |
33f14e |
#if defined __GETOPT_PREFIX || (__GLIBC__ >= 2 && !defined __UCLIBC__)
|
|
Packit |
33f14e |
# define OPTIND_MIN 0
|
|
Packit |
33f14e |
#elif HAVE_DECL_OPTRESET
|
|
Packit |
33f14e |
# define OPTIND_MIN (optreset = 1)
|
|
Packit |
33f14e |
#else
|
|
Packit |
33f14e |
# define OPTIND_MIN 1
|
|
Packit |
33f14e |
#endif
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
static void
|
|
Packit |
33f14e |
getopt_loop (int argc, const char **argv,
|
|
Packit |
33f14e |
const char *options,
|
|
Packit |
33f14e |
int *a_seen, int *b_seen,
|
|
Packit |
33f14e |
const char **p_value, const char **q_value,
|
|
Packit |
33f14e |
int *non_options_count, const char **non_options,
|
|
Packit |
33f14e |
int *unrecognized, bool *message_issued)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int c;
|
|
Packit |
33f14e |
int pos = ftell (stderr);
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
while ((c = getopt (argc, (char **) argv, options)) != -1)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
switch (c)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
case 'a':
|
|
Packit |
33f14e |
(*a_seen)++;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
case 'b':
|
|
Packit |
33f14e |
(*b_seen)++;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
case 'p':
|
|
Packit |
33f14e |
*p_value = optarg;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
case 'q':
|
|
Packit |
33f14e |
*q_value = optarg;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
case '\1':
|
|
Packit |
33f14e |
/* Must only happen with option '-' at the beginning. */
|
|
Packit |
33f14e |
ASSERT (options[0] == '-');
|
|
Packit |
33f14e |
non_options[(*non_options_count)++] = optarg;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
case ':':
|
|
Packit |
33f14e |
/* Must only happen with option ':' at the beginning. */
|
|
Packit |
33f14e |
ASSERT (options[0] == ':'
|
|
Packit |
33f14e |
|| ((options[0] == '-' || options[0] == '+')
|
|
Packit |
33f14e |
&& options[1] == ':'));
|
|
Packit |
33f14e |
FALLTHROUGH;
|
|
Packit |
33f14e |
case '?':
|
|
Packit |
33f14e |
*unrecognized = optopt;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
default:
|
|
Packit |
33f14e |
*unrecognized = c;
|
|
Packit |
33f14e |
break;
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
*message_issued = pos < ftell (stderr);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
static void
|
|
Packit |
33f14e |
test_getopt (void)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int start;
|
|
Packit |
33f14e |
bool posixly = !!getenv ("POSIXLY_CORRECT");
|
|
Packit |
33f14e |
/* See comment in getopt.c:
|
|
Packit |
33f14e |
glibc gets a LSB-compliant getopt.
|
|
Packit |
33f14e |
Standalone applications get a POSIX-compliant getopt. */
|
|
Packit |
33f14e |
#if defined __GETOPT_PREFIX || !(__GLIBC__ >= 2 || defined __MINGW32__)
|
|
Packit |
33f14e |
/* Using getopt from gnulib or from a non-glibc system. */
|
|
Packit |
33f14e |
posixly = true;
|
|
Packit |
33f14e |
#endif
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Test processing of boolean options. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "ab",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-b";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "ab",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 1);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 3);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-ba";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "ab",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 1);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-ab";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "ab",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 2);
|
|
Packit |
33f14e |
ASSERT (b_seen == 1);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 3);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Test processing of options with arguments. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-pfoo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "p:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "p:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 3);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-ab";
|
|
Packit |
33f14e |
argv[argc++] = "-q";
|
|
Packit |
33f14e |
argv[argc++] = "baz";
|
|
Packit |
33f14e |
argv[argc++] = "-pfoo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 1);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
#if GNULIB_TEST_GETOPT_GNU
|
|
Packit |
33f14e |
/* Test processing of options with optional arguments. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-pfoo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "p::q::",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "p::q::",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp::q::",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 3);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
#endif /* GNULIB_TEST_GETOPT_GNU */
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that invalid options are recognized; and that both opterr
|
|
Packit |
33f14e |
and leading ':' can silence output. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-x";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 42;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'x');
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-x";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 0;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'x');
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-x";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, ":abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'x');
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-:";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 42;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == ':');
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-:";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 0;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == ':');
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-:";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, ":abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == ':');
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check for missing argument behavior. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-ap";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'p');
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-ap";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 0;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'p');
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-ap";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, ":abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'p');
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that by default, non-options arguments are moved to the end. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
if (posixly)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
else
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 4);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that '--' ends the argument processing. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[20];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "--";
|
|
Packit |
33f14e |
argv[argc++] = "-b";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-q";
|
|
Packit |
33f14e |
argv[argc++] = "johnny";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
if (posixly)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "--") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[7], "-b") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[8], "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[9], "-q") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[10], "johnny") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[11], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[12] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
else
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "--") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[7], "-b") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[8], "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[9], "-q") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[10], "johnny") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[11], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[12] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 5);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
#if GNULIB_TEST_GETOPT_GNU
|
|
Packit |
33f14e |
/* Check that the '-' flag causes non-options to be returned in order. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "-abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 3);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[0], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[1], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[2], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 7);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that '--' ends the argument processing. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[20];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "--";
|
|
Packit |
33f14e |
argv[argc++] = "-b";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-q";
|
|
Packit |
33f14e |
argv[argc++] = "johnny";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "-abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "--") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[7], "-b") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[8], "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[9], "-q") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[10], "johnny") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[11], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[12] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
if (non_options_count == 2)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
/* glibc behaviour. */
|
|
Packit |
33f14e |
ASSERT (non_options_count == 2);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[0], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[1], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 7);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
else
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
/* Another valid behaviour. */
|
|
Packit |
33f14e |
ASSERT (non_options_count == 7);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[0], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[1], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[2], "-b") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[3], "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[4], "-q") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[5], "johnny") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (non_options[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 12);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that the '-' flag has to come first. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:-",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
if (posixly)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
else
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 4);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that the '+' flag causes the first non-option to terminate the
|
|
Packit |
33f14e |
loop. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "+abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-+";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "+abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == '+');
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that '--' ends the argument processing. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[20];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "--";
|
|
Packit |
33f14e |
argv[argc++] = "-b";
|
|
Packit |
33f14e |
argv[argc++] = "foo";
|
|
Packit |
33f14e |
argv[argc++] = "-q";
|
|
Packit |
33f14e |
argv[argc++] = "johnny";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "+abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "--") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[7], "-b") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[8], "foo") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[9], "-q") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[10], "johnny") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[11], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[12] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
#endif /* GNULIB_TEST_GETOPT_GNU */
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that the '+' flag has to come first. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "abp:q:+",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
if (posixly)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
else
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 1);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 4);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
#if GNULIB_TEST_GETOPT_GNU
|
|
Packit |
33f14e |
/* If GNU extensions are supported, require compliance with POSIX
|
|
Packit |
33f14e |
interpretation on leading '+' behavior.
|
|
Packit |
33f14e |
http://austingroupbugs.net/view.php?id=191 */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "donald";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc++] = "billy";
|
|
Packit |
33f14e |
argv[argc++] = "duck";
|
|
Packit |
33f14e |
argv[argc++] = "-a";
|
|
Packit |
33f14e |
argv[argc++] = "bar";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "+:abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[0], "program") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[1], "donald") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[2], "-p") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[3], "billy") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[4], "duck") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[5], "-a") == 0);
|
|
Packit |
33f14e |
ASSERT (strcmp (argv[6], "bar") == 0);
|
|
Packit |
33f14e |
ASSERT (argv[7] == NULL);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 0);
|
|
Packit |
33f14e |
ASSERT (optind == 1);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "+:abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 0);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'p');
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int a_seen = 0;
|
|
Packit |
33f14e |
int b_seen = 0;
|
|
Packit |
33f14e |
const char *p_value = NULL;
|
|
Packit |
33f14e |
const char *q_value = NULL;
|
|
Packit |
33f14e |
int non_options_count = 0;
|
|
Packit |
33f14e |
const char *non_options[10];
|
|
Packit |
33f14e |
int unrecognized = 0;
|
|
Packit |
33f14e |
bool output;
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-b";
|
|
Packit |
33f14e |
argv[argc++] = "-p";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
getopt_loop (argc, argv, "+:abp:q:",
|
|
Packit |
33f14e |
&a_seen, &b_seen, &p_value, &q_value,
|
|
Packit |
33f14e |
&non_options_count, non_options, &unrecognized, &output);
|
|
Packit |
33f14e |
ASSERT (a_seen == 0);
|
|
Packit |
33f14e |
ASSERT (b_seen == 1);
|
|
Packit |
33f14e |
ASSERT (p_value == NULL);
|
|
Packit |
33f14e |
ASSERT (q_value == NULL);
|
|
Packit |
33f14e |
ASSERT (non_options_count == 0);
|
|
Packit |
33f14e |
ASSERT (unrecognized == 'p');
|
|
Packit |
33f14e |
ASSERT (optind == 3);
|
|
Packit |
33f14e |
ASSERT (!output);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
/* Check that 'W' does not dump core:
|
|
Packit |
33f14e |
http://sourceware.org/bugzilla/show_bug.cgi?id=12922
|
|
Packit |
33f14e |
Technically, POSIX says the presence of ';' in the opt-string
|
|
Packit |
33f14e |
gives unspecified behavior, so we only test this when GNU compliance
|
|
Packit |
33f14e |
is desired. */
|
|
Packit |
33f14e |
for (start = OPTIND_MIN; start <= 1; start++)
|
|
Packit |
33f14e |
{
|
|
Packit |
33f14e |
int argc = 0;
|
|
Packit |
33f14e |
const char *argv[10];
|
|
Packit |
33f14e |
int pos = ftell (stderr);
|
|
Packit |
33f14e |
|
|
Packit |
33f14e |
argv[argc++] = "program";
|
|
Packit |
33f14e |
argv[argc++] = "-W";
|
|
Packit |
33f14e |
argv[argc++] = "dummy";
|
|
Packit |
33f14e |
argv[argc] = NULL;
|
|
Packit |
33f14e |
optind = start;
|
|
Packit |
33f14e |
opterr = 1;
|
|
Packit |
33f14e |
ASSERT (getopt (argc, (char **) argv, "W;") == 'W');
|
|
Packit |
33f14e |
ASSERT (ftell (stderr) == pos);
|
|
Packit |
33f14e |
ASSERT (optind == 2);
|
|
Packit |
33f14e |
}
|
|
Packit |
33f14e |
#endif /* GNULIB_TEST_GETOPT_GNU */
|
|
Packit |
33f14e |
}
|