aboutsummaryrefslogtreecommitdiff
path: root/posix/getopt.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-02-26 01:22:06 +0000
committerUlrich Drepper <drepper@redhat.com>2009-02-26 01:22:06 +0000
commit2e6d6bacc2f0a30f7dbebc977d52904d4a823c45 (patch)
tree064e0c5286c1a9b95a4891a6ba4f2a2f9c5eceb5 /posix/getopt.c
parent67108e401faade00a6aaf4e59b5b986345f1123f (diff)
downloadglibc-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.c30
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