diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-02-26 01:22:06 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-02-26 01:22:06 +0000 |
commit | 2e6d6bacc2f0a30f7dbebc977d52904d4a823c45 (patch) | |
tree | 064e0c5286c1a9b95a4891a6ba4f2a2f9c5eceb5 /posix/getopt.c | |
parent | 67108e401faade00a6aaf4e59b5b986345f1123f (diff) | |
download | glibc-2e6d6bacc2f0a30f7dbebc977d52904d4a823c45.tar glibc-2e6d6bacc2f0a30f7dbebc977d52904d4a823c45.tar.gz glibc-2e6d6bacc2f0a30f7dbebc977d52904d4a823c45.tar.bz2 glibc-2e6d6bacc2f0a30f7dbebc977d52904d4a823c45.zip |
* include/features.h: If no feature selection given and we select
by default a POSIX mode, also define __USE_POSIX_IMPLICITLY.
* posix/Versions: Export __posix_getopt.
* posix/getopt.c (_getopt_initialize): Take additional parameter.
Use it to alternatively initialize __posixly_correct.
(_getopt_internal_r): Take addition parameter. Pass on to
_getopt_initialize.
(_getopt_internal): Take addition parameter. Pass on to
_getopt_internal_r.
(getopt): Pass additional zero to _getopt_internal.
(__posix_getopt): New function.
* posix/getopt.h: Add redirection for getopt.
* posix/getopt1.c (getopt_long): Pass additional zero to
_getopt_internal.
(getopt_long_only): Likewise.
(_getopt_long_r): Pass additional zero to _getopt_internal_r.
(_getopt_long_only_r): Likewise.
* posix/getopt_int.h: Adjust declarations of _getopt_internal and
_getopt_internal_r.
Diffstat (limited to 'posix/getopt.c')
-rw-r--r-- | posix/getopt.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/posix/getopt.c b/posix/getopt.c index 965bfdd3ac..a7f0b54857 100644 --- a/posix/getopt.c +++ b/posix/getopt.c @@ -2,7 +2,7 @@ NOTE: getopt is part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! - Copyright (C) 1987-1996,1998-2004,2008 Free Software Foundation, Inc. + Copyright (C) 1987-1996,1998-2004,2008,2009 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 @@ -270,7 +270,7 @@ exchange (char **argv, struct _getopt_data *d) static const char * _getopt_initialize (int argc, char *const *argv, const char *optstring, - struct _getopt_data *d) + struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped @@ -280,7 +280,7 @@ _getopt_initialize (int argc, char *const *argv, const char *optstring, d->__nextchar = NULL; - d->__posixly_correct = !!getenv ("POSIXLY_CORRECT"); + d->__posixly_correct = posixly_correct | !!getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ @@ -391,7 +391,7 @@ _getopt_initialize (int argc, char *const *argv, const char *optstring, int _getopt_internal_r (int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, - int long_only, struct _getopt_data *d) + int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (optstring[0] == ':') @@ -406,7 +406,8 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring, { if (d->optind == 0) d->optind = 1; /* Don't scan ARGV[0], the program name. */ - optstring = _getopt_initialize (argc, argv, optstring, d); + optstring = _getopt_initialize (argc, argv, optstring, d, + posixly_correct); d->__initialized = 1; } @@ -1111,7 +1112,8 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring, int _getopt_internal (int argc, char *const *argv, const char *optstring, - const struct option *longopts, int *longind, int long_only) + const struct option *longopts, int *longind, int long_only, + int posixly_correct) { int result; @@ -1119,7 +1121,8 @@ _getopt_internal (int argc, char *const *argv, const char *optstring, getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, - longind, long_only, &getopt_data); + longind, long_only, &getopt_data, + posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; @@ -1134,9 +1137,20 @@ getopt (int argc, char *const *argv, const char *optstring) return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, - 0); + 0, 0); } +#ifdef _LIBC +int +__posix_getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, 1); +} +#endif + #endif /* Not ELIDE_CODE. */ #ifdef TEST |