From 7cc27f440c2f709fda63af7ecb3747deeeb799f0 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 10 Feb 1997 03:19:57 +0000 Subject: update from main archive 970209 1997-02-09 02:59 Ulrich Drepper * version.h (VERSION): Bump to 2.0.2. * posix/Makefile (routines): Add getopt_init. * posix/getopt.c: Don't get environment variable with nonoption flags here. Depend on __getopt_nonoption_flags variable filled somewhere else. This is necessary since the variable must be removed even when getopt isn't used in case exec(2) gets called. * posix/getopt_init.c: New file. Initialize __getopt_nonoption_flags and remove environment variable. * sysdeps/i386/init-first.c: Call __getopt_clean_environment. * sysdeps/mach/hurd/i386/init-first.c: Likewise. * sysdeps/stub/init-first.c: Likewise. * sysdeps/unix/sysv/linux/init-first.c: Likewise. * sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Recognize AT_PAGESZ entry in auxiliary vector and store value in _dl_pagesize. * sysdeps/generic/crypt-entry.h: Return EOPNOTSUPP when DES encryption is wanted. * libio/vsnprintf.c: If MAXLEN is 0 return 0. * stdio/vsnprintf.c: Likewise. Reported by Philip Blundell . 1997-02-07 17:43 Ulrich Drepper * sysdeps/generic/sysd-stdio.c: Include . Change PTR to void *. * sysdeps/posix/vdprintf.c: Change PTR to void *. Reported by Brian Oxley . 1997-02-07 17:41 Philip Blundell * sysdeps/unix/sysv/linux/socketbits.h: Fix typo. 1997-02-06 13:49 Andreas Schwab * rellns-sh: No need to check for existance of first parameter. 1997-02-06 14:50 Andreas Schwab * sysdeps/posix/getcwd.c (__getcwd): Fix resource leaks. Reported by David Holland . 1997-02-06 14:38 Andreas Schwab * sunrpc/clnt_tcp.c (readtcp): Pass copy of timeout value to select, in case it is modified by the latter. * sunrpc/clnt_udp.c (clntudp_call): Likewise. * sunrpc/pmap_rmt.c (clnt_broadcast): Likewise. * sunrpc/svc_tcp.c (readtcp): Likewise. * sunrpc/svc_authux.c (_svcauth_unix): Fix type of area_gids array. * sunrpc/authuxprot.c (xdr_authunix_parms): Check size of uid_t and gid_t. * sunrpc/auth_unix.c (authunix_validate): Fix type of second argument. 1997-02-06 14:29 Andreas Schwab * elf/Makefile (extra-objs): Don't zap previous value. * Makefile (before-compile): Likewise. Don't add gnu/lib-names.h twice. 1997-02-06 14:19 Andreas Schwab * sysdeps/unix/sysv/linux/m68k/brk.c: Add workaround for braindamage (sigh!). 1997-02-06 17:10 Jim Meyering * manual/memory.texi: Correct `copystring' example for obstacks. 1997-02-06 14:10 Ulrich Drepper * Makeconfig: Don't use [:lower:] and [:upper:] in tr since old GNU tr don't grok it. 1997-02-03 21:13 Andreas Schwab * sysdeps/unix/sysv/linux/socketbits.h [__GNUC__<2] (struct cmsghdr): Don't use GNU C extensions. (CMSG_DATA): Use portable definition. 1997-02-05 05:58 Ulrich Drepper * elf/ldd.bash.in: Add test for read permission and print appropriate message. Change warning and error messages to print "ldd: " at start. * elf/ldd.sh.in: Likewise. * stdlib/Makefile (routines): Add atoll. * stdlib/atoll.c: New file. * stdlib/stdlib.h: Add prototype and optimization for atoll. * stdlib/a64l.c: Update copyright. * stdlib/abs.c: Likewise. * stdlib/atof.c: Likewise. * stdlib/atoi.c: Likewise. * stdlib/atol.c: Likewise. * stdlib/bsearch.c: Likewise. * stdlib/exit.c: Likewise. * stdlib/fpioconst.c: Likewise. * stdlib/fpioconst.h: Likewise. * stdlib/jrand48.c: Likewise. * stdlib/jrand48_r.c: Likewise. * stdlib/labs.c: Likewise. * stdlib/lcong48.c: Likewise. * stdlib/lcong48_r.c: Likewise. * stdlib/llabs.c: Likewise. * stdlib/lrand48.c: Likewise. * stdlib/lrand48_r.c: Likewise. * stdlib/mblen.c: Likewise. * stdlib/mbstowcs.c: Likewise. * stdlib/mbtowc.c: Likewise. * stdlib/mp_clz_tab.c: Likewise. * stdlib/mrand48.c: Likewise. * stdlib/mrand48_r.c: Likewise. * stdlib/msort.c: Likewise. * stdlib/nrand48.c: Likewise. * stdlib/nrand48_r.c: Likewise. * stdlib/qsort.c: Likewise. * stdlib/rpmatch.c: Likewise. * stdlib/seed48.c: Likewise. * stdlib/seed48_r.c: Likewise. * stdlib/srand48.c: Likewise. * stdlib/srand48_r.c: Likewise. * stdlib/strtod.c: Likewise. * stdlib/wcstombs.c: Likewise. * stdlib/wctomb.c: Likewise. 1997-02-05 05:08 Ulrich Drepper * stdlib/mp_clz_tab.c (__clz_tab): Follow change in GMP and define as const. 1997-02-04 23:57 Fila Kolodny * sysdeps/unix/sysv/linux/socketbits.h: Define __need_NULL before including . 1997-02-03 20:01 H.J. Lu * time/Makefile (tzbases, tzlinks): New. (tzfiles): Changed to $(tzbases) $(tzlinks). ($(tzfiles:%=$(objpfx)z.%): Make $(tzlinks) depend on $(tzbases). 1997-02-02 12:13 H.J. Lu * Makefile (install): Ignore error from ldconfig. * time/zic.c (mkdirs): Double check the error return of mkdir (). 1997-02-04 22:01 Ulrich Drepper * stdio-common/vfprintf.c: Prepare to use __va_copy for architectures like PPC where va_list is no integral type. 1997-02-04 15:27 Roma Ekzhanov * posix/getopt.c (exchange): Don't allocate nonoption_flags array if nonoption_flags_len == -1. --- posix/Makefile | 4 ++-- posix/getopt.c | 57 ++++++++++++++++++++++++++------------------------------- 2 files changed, 28 insertions(+), 33 deletions(-) (limited to 'posix') diff --git a/posix/Makefile b/posix/Makefile index 1a2f6ae..565561c 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. +# Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 @@ -43,7 +43,7 @@ routines := \ pathconf sysconf fpathconf \ glob fnmatch regex \ confstr \ - getopt getopt1 \ + getopt getopt1 getopt_init \ sched_setp sched_getp sched_sets sched_gets sched_yield sched_primax \ sched_primin sched_rr_gi \ getaddrinfo diff --git a/posix/getopt.c b/posix/getopt.c index 78021bb..aa0c01c 100644 --- a/posix/getopt.c +++ b/posix/getopt.c @@ -253,37 +253,39 @@ static int last_nonopt; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ -static char *nonoption_flags; +char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; static int original_argc; static char *const *original_argv; +extern pid_t __libc_pid; + /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ -static void store_args (int argc, char *const *argv) __attribute__ ((unused)); static void -store_args (int argc, char *const *argv) +__attribute__ ((unused)) +store_args_and_env (int argc, char *const *argv) { /* XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ original_argc = argc; original_argv = argv; } -text_set_element (__libc_subinit, store_args); +text_set_element (__libc_subinit, store_args_and_env); # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ - char __tmp = nonoption_flags[ch1]; \ - nonoption_flags[ch1] = nonoption_flags[ch2]; \ - nonoption_flags[ch2] = __tmp; \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ } -#else +#else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) -#endif +#endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) @@ -313,10 +315,10 @@ exchange (argv) but it consists of two parts that need to be swapped next. */ #ifdef _LIBC - /* First make sure the handling of the `nonoption_flags' string can - work normally. Our top argument must be in the range of the - string. */ - if (nonoption_flags_len != 0 && top >= nonoption_flags_max_len) + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ @@ -325,11 +327,11 @@ exchange (argv) nonoption_flags_len = nonoption_flags_max_len = 0; else { - memcpy (new_str, nonoption_flags, nonoption_flags_max_len); + memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len); memset (&new_str[nonoption_flags_max_len], '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; - nonoption_flags = new_str; + __getopt_nonoption_flags = new_str; } } #endif @@ -420,36 +422,29 @@ _getopt_initialize (argc, argv, optstring) if (posixly_correct == NULL && argc == original_argc && argv == original_argv) { - /* Bash 2.0 puts a special variable in the environment for each - command it runs, specifying which ARGV elements are the results of - file name wildcard expansion and therefore should not be - considered as options. */ - if (nonoption_flags_max_len == 0) { - char var[100]; - const char *orig_str; - sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ()); - orig_str = getenv (var); - if (orig_str == NULL || orig_str[0] == '\0') + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { + const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; - nonoption_flags = (char *) malloc (nonoption_flags_max_len); - if (nonoption_flags == NULL) + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else { - memcpy (nonoption_flags, orig_str, len); - memset (&nonoption_flags[len], '\0', + memcpy (__getopt_nonoption_flags, orig_str, len); + memset (&__getopt_nonoption_flags[len], '\0', nonoption_flags_max_len - len); } } } - nonoption_flags_len = nonoption_flags_max_len; } else @@ -540,7 +535,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only) #ifdef _LIBC #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ - && nonoption_flags[optind] == '1')) + && __getopt_nonoption_flags[optind] == '1')) #else #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif -- cgit v1.1