Commit Graph

14 Commits

Author SHA1 Message Date
Zack Weinberg
06576cbf4e getopt: annotate files with relationship to gnulib.
As the final act in this patchset, adjust the "This file is part of
the GNU C Library" message at the top of each file to indicate which
files are synced with gnulib.

	* posix/bits/getopt_core.h, posix/bits/getopt_ext.h
	* posix/getopt.c, posix/getopt1.c, posix/getopt_int.h:
	Mention in top-of-file boilerplate that these files are shared
	with gnulib.
	* posix/getopt.h, posix/bits/getopt_posix.h:
	Mention in top-of-file boilerplate that these files are NOT shared
	with gnulib, unlike the rest of the getopt implementation.
2017-04-07 07:53:37 -04:00
Zack Weinberg
c1af8775f2 getopt: tidy up _getopt_initialize a bit
_getopt_data.__posixly_correct is completely redundant to
_getopt_data.__ordering, and some work that logically belongs in
_getopt_initialize was being done by _getopt_internal_r, making the
code harder to understand.

As a side effect, getenv will no longer be called if the first
character of the options string is '+' or '-', which is probably a
Good Thing.  (Perhaps we should have a flag character that
specifically asks for the permutation behavior?)

	* posix/getopt_int.h (_getopt_data): Remove __posixly_correct field.
	* posix/getopt.c (_getopt_internal_r): Move some initialization code...
	(_getopt_initialize): ...here. Don't set d->__posixly_correct.
2017-04-07 07:50:31 -04:00
Zack Weinberg
7a7be6c9a2 getopt: merge from gnulib: function prototype adjustments
For standards compliance, getopt, getopt_long, and getopt_long_only in
glibc have to take 'char *const *argv' even though they can mutate the
array.  gnulib has tried to clean this up as much as possible: all the
internal functions use 'char **argv', and when used standalone, so do
getopt_long and getopt_long_only.

Also brought over are __nonnull annotations, corrections to documentation,
and apparently it is no longer necessary to worry about conflicting
prototypes for getopt.  The macroification of the definitions of
getopt and __posix_getopt goes beyond what is currently in gnulib.

At this point getopt1.c and getopt_int.h are identical to their gnulib
versions.

	* posix/getopt.h: Add backup definition of __nonnull for
	consistency with gnulib.  Define __getopt_argv_const to const
	if not already defined.
	(getopt): Update doc comment from gnulib.  Prototype
	unconditionally.  Add __nonnull annotation.
	(__posix_getopt): Add __nonnull annotation.
	(getopt_long, getopt_long_only): Use __getopt_argv_const in
	prototypes for consistency with gnulib.  Add __nonnull
	annotations.
	* posix/getopt.c (_getopt_initialize, _getopt_internal_r)
	(getopt_internal): Change 'argv' argument to type 'char **'.
	Remove now-unnecessary casts.
	(getopt, __posix_getopt): Eliminate repetition with a macro.
	Cast 'argv' to 'char **' when calling _getopt_internal.
	* posix/getopt1.c (getopt_long, getopt_long_only):
	Use __getopt_argv_const for consistency with gnulib.
	Cast 'argv' to 'char **' when calling _getopt_internal.
	(_getopt_long_r, _getopt_long_only_r):
	Change 'argv' argument to type 'char **'.
	(main): Constify 'long_options'.
	* posix/getopt_int.h (getopt_internal, _getopt_internal_r)
	(_getopt_long_r, _getopt_long_only_r):
	Change 'argv' argument to type 'char **'.
2017-04-07 07:50:06 -04:00
Zack Weinberg
7f71f9c1d6 getopt: merge straightforward changes from gnulib
This covers changes with little or no consequences when the code is
used in glibc.

	* posix/getopt_int.h: Include getopt.h.
	Use impl-namespace names for all arguments to _getopt_internal and
	_getopt_internal_r.
	Declare __ordering enum outside the struct.
	Harmonize comments with gnulib.
	* posix/getopt1.c: Simplify #ifdeffage at top of file. Remove
	ELIDE_CODE logic entirely.  Move inclusion of stdlib.h to
	#ifdef TEST block and make unconditional.  Do not define NULL.
	* posix/getopt.c: Partial merge from gnulib, covering the
	initial includes and global declarations, commentary, and
	a couple of semantically-neutral code changes.
2017-04-07 07:47:29 -04:00
Zack Weinberg
7784135eb0 getopt: merge from gnulib: don't use `...' quotes
I'm not sure whether this is official GNU style now, but `...' quotes
haven't looked properly balanced in most people's terminal fonts since
2001ish? and gnulib has chosen to switch over to '...' quotes.
I'm merging this separately from the other changes in gnulib because
it's very mechanical.

	* posix/getopt.c, posix/getopt.h, posix/getopt1.c, posix/getopt_int.h:
	Use '...' instead of `...' for quotation marks inside
	comments and strings.
2017-04-07 07:46:50 -04:00
Zack Weinberg
bf079e19f5 getopt: remove USE_NONOPTION_FLAGS
glibc's implementation of getopt includes code to parse an environment
variable named _XXX_GNU_nonoption_argv_flags_ (where XXX is the
current process's PID in decimal); but all of it has been #ifdefed out
since 2001, with no official way to turn it back on.

According to commentary in our config.h.in, bash version 2.0 set this
environment variable to indicate argv elements that were the result of
glob expansion and therefore should not be treated as options, but the
feature was "disabled later" because "it caused problems".  According
to bash's CHANGES file, "later" was release 2.01; it gives no more
detail about what the problems were.

Version 2.0 of bash was released on the last day of 1996, and version
2.01 in June of 1997.  Twenty years later, I think it is safe to
assume that this environment variable isn't coming back.

	* config.h.in (USE_NONOPTION_FLAGS): Remove.
	* csu/init-first.c: Remove all #ifdef USE_NONOPTION_FLAGS blocks.
	* sysdeps/mach/hurd/i386/init-first.c: Likewise.
	* posix/getopt_int.h: Likewise.
	* posix/getopt.c: Likewise. Also remove SWAP_FLAGS and the
	__libc_argc and __libc_argv externs, which were only used by
	#ifdef USE_NONOPTION_FLAGS blocks.
	* posix/getopt_init.c: Remove file.
	* posix/Makefile (routines): Remove getopt_init.
	* include/getopt.h: Don't declare __getopt_initialize_environment.
	* manual/getopt.texi: Remove mention of USE_NONOPTION_FLAGS in
	a comment.
2017-04-07 07:45:53 -04:00
Joseph Myers
bfff8b1bec Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Joseph Myers
f7a9f785e5 Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Joseph Myers
b168057aaa Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Allan McRae
d4697bc93d Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Joseph Myers
568035b787 Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
Paul Eggert
59ba27a63a Replace FSF snail mail address with URLs. 2012-02-09 23:18:22 +00:00
Ulrich Drepper
2e6d6bacc2 * 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.
2009-02-26 01:22:06 +00:00
Ulrich Drepper
511676f708 Update.
2004-03-08  Paul Eggert  <eggert@cs.ucla.edu>

	Merge from gnulib.  We now assume C89 or better.
	* posix/getopt1.c (const): Remove.
	* posix/getopt.c (const): Likewise.
	* posix/getopt1.c (getopt_long, _getopt_long_r, getopt_long_only,
	_getopt_long_only_r, main): Use prototypes, not old-style definitions.
	* posix/getopt.c (exchange, _getopt_initialize, _getopt_internal_r,
	_getopt_internal, getopt, main): Likewise.
	* posix/getopt.h (getopt, getopt_long, getopt_long_only): Likewise.
	* posix/getopt.c [!defined VMS || !HAVE_STRING_H]:
	Include <string.h> regardless.  No need for <strings.h>.
	[!defined _LIBC]: Include "gettext.h" rather than rolling it ourselves.
	(_): Define to gettext always.
	(my_index): Remove: all uses changed to strchr.
	(strlen): Remove declaration.
	* posix/getopt.h (struct option.name): Always const char *.

2004-03-08  Marcus Brinkmann  <marcus@gnu.org>

	* posix/getopt.h (_getopt_internal): Move to ...
	* posix/getopt_int.h: ... here.  New file.
	* include/getopt_int.h: New file.
	* include/getopt.h: Remove libc_hidden_proto for getopt_long
	and getopt_long_only.
	* posix/getopt1.c: Include "getopt_int.h".  Remove
	libc_hidden_def for getopt_long and getopt_long_only.
	(_getopt_long_r, _getopt_long_only_r): New functions.
	* posix/getopt.c: Include "getopt_int.h".
	(__getopt_initialized): Variable removed.
	(nextchar, ordering, posixly_correct, first_nonopt, last_nonopt):
	Static variables removed.
	(nonoption_flags_max_len, nonoption_flags_len) [_LIBC &&
	USE_NONOPTION_FLAGS]: Static variables removed.
	(getopt_data): New static variable.
	(SWAP_FLAGS): Use d->__nonoption_flags_len instead
	nonoption_flags_len.
	(exchange): Add new argument D of type struct getopt_data *.
	Replace optind with d->optind, optarg with d->optarg, opterr with
	d->opterr, optopt with d->optopt, nextchar with d->__nextchar,
	first_nonopt with d->__first_nonopt, last_nonopt with
	d->__last_nonopt, d->ordering with d->__ordering,
	d->posixly_correct with d->__posixly_correct (which is now an
	int instead a string, so fix users), nonoption_flags_len
	with d->__nonoption_flags_len, nonoption_flags_max_len with
	d->__nonoption_flags_max_len.
	(_getopt_initialize): Likewise.
	(_getopt_internal): Rename to ...
	(_getopt_internal_r): ... this.  Also add new argument D of type
	struct getopt_data * and use of members of D rather than global or
	static variables as described for exchange() above.  Add new argument
	to invocations of _getopt_initialize and exchange.
	(_getopt_internal): Reimplement in terms of _getopt_internal_r.
	* argp/argp-parse.c: Include <getopt_int.h>.
	[_LIBC]: Do not include <bits/libc-lock.h>.
	[!_LIBC && HAVE_CTHREADS_H]: Do not include <cthreads.h>.
	[!_LIBC] (_argp_hang): Make static.
	(getopt_lock, LOCK_GETOPT, UNLOCK_GETOPT): Remove.
	(_argp_unlock_xxx): Remove.
	(parser_init): Do not use LOCK_GETOPT.
	(parser_finalize): Do not use UNLOCK_GETOPT.
	(struct parser): New member OPT_DATA.
	(parser_init): Initialize parser->opt_data.  Use
	parser->opt_data.opterr instead of opterr.
	(parser_parse_opt): Use parser->opt_data.optarg instead optarg.
	(parser_parse_next): Likewise.  Use parser->opt_data.optind
	instead optind.  Use parser->opt_data.optopt instead of optopt.
	Call _getopt_long_only_r and _getopt_long_r instead of
	getopt_long_only and getopt_long, and pass the extra argument.
2004-03-09 10:36:53 +00:00