diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-08-11 05:32:47 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-08-11 05:32:47 +0000 |
commit | 6ae9b99ef23691204c5e1e8128425f1a78465a4f (patch) | |
tree | a062a94ad8ac565bcb85c58a4547a70cb472025f | |
parent | c020d48c6e91b351cefebbc7a82a9c1ec2d9d83b (diff) | |
download | glibc-6ae9b99ef23691204c5e1e8128425f1a78465a4f.zip glibc-6ae9b99ef23691204c5e1e8128425f1a78465a4f.tar.gz glibc-6ae9b99ef23691204c5e1e8128425f1a78465a4f.tar.bz2 |
Update.
* posix/getopt_init.c (__getopt_clean_environment): Avoid making
the strncmp calls most of the time by testing for '_' as the first
character of the name.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | posix/getopt_init.c | 10 |
2 files changed, 10 insertions, 4 deletions
@@ -1,5 +1,9 @@ 2001-08-10 Ulrich Drepper <drepper@redhat.com> + * posix/getopt_init.c (__getopt_clean_environment): Avoid making + the strncmp calls most of the time by testing for '_' as the first + character of the name. + * elf/dl-open.c (add_to_global): Remove stale comment. * elf/dl-load.c (fillin_rpath): In SUID binaries, don't mark diff --git a/posix/getopt_init.c b/posix/getopt_init.c index 611135b..dd3d433 100644 --- a/posix/getopt_init.c +++ b/posix/getopt_init.c @@ -1,5 +1,5 @@ /* Perform additional initialization for getopt functions in GNU libc. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -45,7 +45,7 @@ __getopt_clean_environment (char **env) of file name wildcard expansion and therefore should not be considered as options. */ static const char envvar_tail[] = "_GNU_nonoption_argv_flags_="; - char var[100]; + char var[50]; char *cp, **ep; size_t len; @@ -54,11 +54,13 @@ __getopt_clean_environment (char **env) cp = memcpy (&var[sizeof (var) - sizeof (envvar_tail)], envvar_tail, sizeof (envvar_tail)); cp = _itoa_word (__getpid (), cp, 10, 0); - *--cp = '_'; + /* Note: we omit adding the leading '_' since we explicitly test for + it before calling strncmp. */ len = (var + sizeof (var) - 1) - cp; for (ep = env; *ep != NULL; ++ep) - if (!strncmp (*ep, cp, len)) + if ((*ep)[0] == '_' + && __builtin_expect (strncmp (*ep + 1, cp, len) == 0, 0)) { /* Found it. Store this pointer and move later ones back. */ char **dp = ep; |