projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
.
[gnulib.git]
/
lib
/
getopt.c
diff --git
a/lib/getopt.c
b/lib/getopt.c
index
d176d3e
..
e852127
100644
(file)
--- a/
lib/getopt.c
+++ b/
lib/getopt.c
@@
-2,7
+2,7
@@
NOTE: The canonical source of this file is maintained with the GNU
C Library. Bugs can be reported to bug-glibc@gnu.org.
NOTE: The canonical source of this file is maintained with the GNU
C Library. Bugs can be reported to bug-glibc@gnu.org.
- Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
+ Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
, 2000
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
@@
-27,13
+27,13
@@
#ifdef HAVE_CONFIG_H
# include <config.h>
#ifdef HAVE_CONFIG_H
# include <config.h>
-#else
-# if !defined __STDC__ || !__STDC__
+#endif
+
+#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
-# ifndef const
-# define const
-# endif
+# ifndef const
+# define const
# endif
#endif
# endif
#endif
@@
-75,11
+75,12
@@
#endif
#ifndef _
#endif
#ifndef _
-/* This is for other GNU distributions with internationalized messages.
- When compiling libc, the _ macro is predefined. */
-# ifdef HAVE_LIBINTL_H
+/* This is for other GNU distributions with internationalized messages. */
+# if defined HAVE_LIBINTL_H || defined _LIBC
# include <libintl.h>
# include <libintl.h>
-# define _(msgid) gettext (msgid)
+# ifndef _
+# define _(msgid) gettext (msgid)
+# endif
# else
# define _(msgid) (msgid)
# endif
# else
# define _(msgid) (msgid)
# endif
@@
-515,6
+516,13
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
int *longind;
int long_only;
{
int *longind;
int long_only;
{
+ int print_errors = opterr;
+ if (optstring[0] == ':')
+ print_errors = 0;
+
+ if (argc < 1)
+ return -1;
+
optarg = NULL;
if (optind == 0 || !__getopt_initialized)
optarg = NULL;
if (optind == 0 || !__getopt_initialized)
@@
-664,14
+672,17
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
pfound = p;
indfound = option_index;
}
pfound = p;
indfound = option_index;
}
- else
+ else if (long_only
+ || pfound->has_arg != p->has_arg
+ || pfound->flag != p->flag
+ || pfound->val != p->val)
/* Second or later nonexact match found. */
ambig = 1;
}
if (ambig && !exact)
{
/* Second or later nonexact match found. */
ambig = 1;
}
if (ambig && !exact)
{
- if (
opterr
)
+ if (
print_errors
)
fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
@@
-692,7
+703,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = nameend + 1;
else
{
optarg = nameend + 1;
else
{
- if (
opterr
)
+ if (
print_errors
)
{
if (argv[optind - 1][1] == '-')
/* --option */
{
if (argv[optind - 1][1] == '-')
/* --option */
@@
-718,7
+729,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = argv[optind++];
else
{
optarg = argv[optind++];
else
{
- if (
opterr
)
+ if (
print_errors
)
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
@@
-745,7
+756,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (!long_only || argv[optind][1] == '-'
|| my_index (optstring, *nextchar) == NULL)
{
if (!long_only || argv[optind][1] == '-'
|| my_index (optstring, *nextchar) == NULL)
{
- if (
opterr
)
+ if (
print_errors
)
{
if (argv[optind][1] == '-')
/* --option */
{
if (argv[optind][1] == '-')
/* --option */
@@
-775,7
+786,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (temp == NULL || c == ':')
{
if (temp == NULL || c == ':')
{
- if (
opterr
)
+ if (
print_errors
)
{
if (posixly_correct)
/* 1003.2 specifies the format of this message. */
{
if (posixly_correct)
/* 1003.2 specifies the format of this message. */
@@
-809,7
+820,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
}
else if (optind == argc)
{
}
else if (optind == argc)
{
- if (
opterr
)
+ if (
print_errors
)
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
@@
-858,7
+869,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
}
if (ambig && !exact)
{
}
if (ambig && !exact)
{
- if (
opterr
)
+ if (
print_errors
)
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
argv[0], argv[optind]);
nextchar += strlen (nextchar);
@@
-876,7
+887,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = nameend + 1;
else
{
optarg = nameend + 1;
else
{
- if (
opterr
)
+ if (
print_errors
)
fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"),
argv[0], pfound->name);
@@
-891,7
+902,7
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
optarg = argv[optind++];
else
{
optarg = argv[optind++];
else
{
- if (
opterr
)
+ if (
print_errors
)
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
fprintf (stderr,
_("%s: option `%s' requires an argument\n"),
argv[0], argv[optind - 1]);
@@
-938,12
+949,12
@@
_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
}
else if (optind == argc)
{
}
else if (optind == argc)
{
- if (
opterr
)
+ if (
print_errors
)
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr,
{
/* 1003.2 specifies the format of this message. */
fprintf (stderr,
- _("%s: option requires an argument -- %c\n"),
- argv[0], c);
+
_("%s: option requires an argument -- %c\n"),
+
argv[0], c);
}
optopt = c;
if (optstring[0] == ':')
}
optopt = c;
if (optstring[0] == ':')