Commit c2134757 authored by Niels Möller's avatar Niels Möller
Browse files

Updated to the version in libc-2.0.108.

Rev: src/getopt.c:1.3
Rev: src/getopt.h:1.2
parent b8e3963d
...@@ -24,19 +24,19 @@ ...@@ -24,19 +24,19 @@
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
Ditto for AIX 3.2 and <stdlib.h>. */ Ditto for AIX 3.2 and <stdlib.h>. */
#ifndef _NO_PROTO #ifndef _NO_PROTO
#define _NO_PROTO # define _NO_PROTO
#endif #endif
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> # include <config.h>
#endif #endif
#if !defined __STDC__ || !__STDC__ #if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems /* This is a separate conditional since some stdc systems
reject `defined (const)'. */ reject `defined (const)'. */
#ifndef const # ifndef const
#define const # define const
#endif # endif
#endif #endif
#include <stdio.h> #include <stdio.h>
...@@ -51,10 +51,10 @@ ...@@ -51,10 +51,10 @@
#define GETOPT_INTERFACE_VERSION 2 #define GETOPT_INTERFACE_VERSION 2
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
#include <gnu-versions.h> # include <gnu-versions.h>
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
#define ELIDE_CODE # define ELIDE_CODE
#endif # endif
#endif #endif
#ifndef ELIDE_CODE #ifndef ELIDE_CODE
...@@ -65,26 +65,26 @@ ...@@ -65,26 +65,26 @@
#ifdef __GNU_LIBRARY__ #ifdef __GNU_LIBRARY__
/* Don't include stdlib.h for non-GNU C libraries because some of them /* Don't include stdlib.h for non-GNU C libraries because some of them
contain conflicting prototypes for getopt. */ contain conflicting prototypes for getopt. */
#include <stdlib.h> # include <stdlib.h>
#include <unistd.h> # include <unistd.h>
#endif /* GNU C library. */ #endif /* GNU C library. */
#ifdef VMS #ifdef VMS
#include <unixlib.h> # include <unixlib.h>
#if HAVE_STRING_H - 0 # if HAVE_STRING_H - 0
#include <string.h> # include <string.h>
#endif # endif
#endif #endif
#ifndef _ #ifndef _
/* This is for other GNU distributions with internationalized messages. /* This is for other GNU distributions with internationalized messages.
When compiling libc, the _ macro is predefined. */ When compiling libc, the _ macro is predefined. */
#ifdef HAVE_LIBINTL_H # ifdef HAVE_LIBINTL_H
# include <libintl.h> # include <libintl.h>
# define _(msgid) gettext (msgid) # define _(msgid) gettext (msgid)
#else # else
# define _(msgid) (msgid) # define _(msgid) (msgid)
#endif # endif
#endif #endif
/* This version of `getopt' appears to the caller like standard Unix `getopt' /* This version of `getopt' appears to the caller like standard Unix `getopt'
...@@ -194,15 +194,22 @@ static char *posixly_correct; ...@@ -194,15 +194,22 @@ static char *posixly_correct;
because there are many ways it can cause trouble. because there are many ways it can cause trouble.
On some systems, it contains special magic macros that don't work On some systems, it contains special magic macros that don't work
in GCC. */ in GCC. */
#include <string.h> # include <string.h>
#define my_index strchr # define my_index strchr
#else #else
# if HAVE_STRING_H
# include <string.h>
# else
# include <strings.h>
# endif
/* Avoid depending on library functions or files /* Avoid depending on library functions or files
whose names are inconsistent. */ whose names are inconsistent. */
#ifndef getenv
extern char *getenv (); extern char *getenv ();
extern int strncmp (); #endif
static char * static char *
my_index (str, chr) my_index (str, chr)
...@@ -223,11 +230,11 @@ my_index (str, chr) ...@@ -223,11 +230,11 @@ my_index (str, chr)
#ifdef __GNUC__ #ifdef __GNUC__
/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
That was relevant to code that was here before. */ That was relevant to code that was here before. */
#if !defined __STDC__ || !__STDC__ # if (!defined __STDC__ || !__STDC__) && !defined strlen
/* gcc with -traditional declares the built-in strlen to return int, /* gcc with -traditional declares the built-in strlen to return int,
and has done so at least since version 2.4.5. -- rms. */ and has done so at least since version 2.4.5. -- rms. */
extern int strlen (const char *); extern int strlen (const char *);
#endif /* not __STDC__ */ # endif /* not __STDC__ */
#endif /* __GNUC__ */ #endif /* __GNUC__ */
#endif /* not __GNU_LIBRARY__ */ #endif /* not __GNU_LIBRARY__ */
...@@ -525,11 +532,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only) ...@@ -525,11 +532,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
from the shell indicating it is not an option. The later information from the shell indicating it is not an option. The later information
is only used when the used in the GNU libc. */ is only used when the used in the GNU libc. */
#ifdef _LIBC #ifdef _LIBC
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|| (optind < nonoption_flags_len \ || (optind < nonoption_flags_len \
&& __getopt_nonoption_flags[optind] == '1')) && __getopt_nonoption_flags[optind] == '1'))
#else #else
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
#endif #endif
if (nextchar == NULL || *nextchar == '\0') if (nextchar == NULL || *nextchar == '\0')
...@@ -689,17 +696,18 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only) ...@@ -689,17 +696,18 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{ {
if (opterr) if (opterr)
{ {
if (argv[optind - 1][1] == '-') if (argv[optind - 1][1] == '-')
/* --option */ /* --option */
fprintf (stderr, fprintf (stderr,
_("%s: option `--%s' doesn't allow an argument\n"), _("%s: option `--%s' doesn't allow an argument\n"),
argv[0], pfound->name); argv[0], pfound->name);
else else
/* +option or -option */ /* +option or -option */
fprintf (stderr, fprintf (stderr,
_("%s: option `%c%s' doesn't allow an argument\n"), _("%s: option `%c%s' doesn't allow an argument\n"),
argv[0], argv[optind - 1][0], pfound->name); argv[0], argv[optind - 1][0], pfound->name);
} }
nextchar += strlen (nextchar); nextchar += strlen (nextchar);
optopt = pfound->val; optopt = pfound->val;
......
/* Declarations for getopt. /* Declarations for getopt.
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. Copyright (C) 1989,90,91,92,93,94,96,97,98 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
...@@ -18,7 +18,10 @@ ...@@ -18,7 +18,10 @@
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#ifndef _GETOPT_H #ifndef _GETOPT_H
#define _GETOPT_H 1
#ifndef __need_getopt
# define _GETOPT_H 1
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -55,6 +58,7 @@ extern int opterr; ...@@ -55,6 +58,7 @@ extern int opterr;
extern int optopt; extern int optopt;
#ifndef __need_getopt
/* Describe the long-named options requested by the application. /* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is of `struct option' terminated by an element containing a name which is
...@@ -78,11 +82,11 @@ extern int optopt; ...@@ -78,11 +82,11 @@ extern int optopt;
struct option struct option
{ {
#if defined (__STDC__) && __STDC__ # if defined __STDC__ && __STDC__
const char *name; const char *name;
#else # else
char *name; char *name;
#endif # endif
/* has_arg can't be an enum because some compilers complain about /* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */ type mismatches in all the code that assumes it is an int. */
int has_arg; int has_arg;
...@@ -92,47 +96,74 @@ struct option ...@@ -92,47 +96,74 @@ struct option
/* Names for the values of the `has_arg' field of `struct option'. */ /* Names for the values of the `has_arg' field of `struct option'. */
#define no_argument 0 # define no_argument 0
#define required_argument 1 # define required_argument 1
#define optional_argument 2 # define optional_argument 2
#endif /* need getopt */
#if (defined (__STDC__) && __STDC__) || defined (__cplusplus)
#ifdef __cplusplus
/* SunOS4 declares getopt with the following prototype: /* Get definitions and prototypes for functions to process the
extern int getopt (int argc, const char *const *argv, const char *shortopts); arguments in ARGV (ARGC of them, minus the program name) for
We cannot redeclare it when compiling C++ code. */ options given in OPTS.
#define getopt(x,y,z) getopt_long(x, y, z, (const struct option *) 0, (int *) 0)
#else /* not __cplusplus */ Return the option character from OPTS just read. Return -1 when
#ifdef __GNU_LIBRARY__ there are no more options. For unrecognized options, or options
missing arguments, `optopt' is set to the option letter, and '?' is
returned.
The OPTS string is a list of characters which are recognized option
letters, optionally followed by colons, specifying that that letter
takes an argument, to be placed in `optarg'.
If a letter in OPTS is followed by two colons, its argument is
optional. This behavior is specific to the GNU `getopt'.
The argument `--' causes premature termination of argument
scanning, explicitly telling `getopt' that there are no more
options.
If OPTS begins with `--', then non-option arguments are treated as
arguments to the option '\0'. This behavior is specific to the GNU
`getopt'. */
#if defined __STDC__ && __STDC__
# ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with /* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */ errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts); extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
#else /* not __GNU_LIBRARY__ */ # else /* not __GNU_LIBRARY__ */
extern int getopt (); extern int getopt ();
#endif /* __GNU_LIBRARY__ */ # endif /* __GNU_LIBRARY__ */
#endif /* __cplusplus */
extern int getopt_long (int argc, char *const *argv, const char *shortopts, # ifndef __need_getopt
const struct option *longopts, int *longind); extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
extern int getopt_long_only (int argc, char *const *argv, const struct option *__longopts, int *__longind);
const char *shortopts, extern int getopt_long_only (int __argc, char *const *__argv,
const struct option *longopts, int *longind); const char *__shortopts,
const struct option *__longopts, int *__longind);
/* Internal only. Users should not call this directly. */ /* Internal only. Users should not call this directly. */
extern int _getopt_internal (int argc, char *const *argv, extern int _getopt_internal (int __argc, char *const *__argv,
const char *shortopts, const char *__shortopts,
const struct option *longopts, int *longind, const struct option *__longopts, int *__longind,
int long_only); int __long_only);
# endif
#else /* not __STDC__ */ #else /* not __STDC__ */
extern int getopt (); extern int getopt ();
# ifndef __need_getopt
extern int getopt_long (); extern int getopt_long ();
extern int getopt_long_only (); extern int getopt_long_only ();
extern int _getopt_internal (); extern int _getopt_internal ();
# endif
#endif /* __STDC__ */ #endif /* __STDC__ */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
/* Make sure we later can get all the definitions and declarations. */
#undef __need_getopt
#endif /* getopt.h */ #endif /* getopt.h */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment