2008-09-26 Craig Howland <howland@LGSInnovations.com>

* libc/stdlib/getenv_r.c (_getenv_r): Modify to not match if name
        contains an equal sign.
This commit is contained in:
Jeff Johnston 2008-09-26 16:23:58 +00:00
parent 610eefefdd
commit 9e71090b9a
2 changed files with 19 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2008-09-26 Craig Howland <howland@LGSInnovations.com>
* libc/stdlib/getenv_r.c (_getenv_r): Modify to not match if name
contains an equal sign.
2008-09-25 Raphael Derossa Pereira <raphaelpereira@gmail.com> 2008-09-25 Raphael Derossa Pereira <raphaelpereira@gmail.com>
* libc/include/pthread.h[_UNIX98_THREAD_MUTEX_ATTRIBUTES]: Add * libc/include/pthread.h[_UNIX98_THREAD_MUTEX_ATTRIBUTES]: Add

View File

@ -29,7 +29,8 @@ A pointer to the (string) value of the environment variable, or
PORTABILITY PORTABILITY
<<_getenv_r>> is not ANSI; the rules for properly forming names of environment <<_getenv_r>> is not ANSI; the rules for properly forming names of environment
variables vary from one system to another. variables vary from one system to another. This implementation does not
permit '=' to be in identifiers.
<<_getenv_r>> requires a global pointer <<environ>>. <<_getenv_r>> requires a global pointer <<environ>>.
*/ */
@ -98,17 +99,22 @@ _DEFUN (_findenv_r, (reent_ptr, name, offset),
return NULL; return NULL;
} }
len = strlen(name); c = name;
c = name + len; while (*c && *c != '=') c++;
for (p = *p_environ; *p; ++p) /* Identifiers may not contain an '=', so cannot match if does */
if (!strncmp (*p, name, len)) if(*c != '=')
if (*(c = *p + len) == '=') {
len = c - name;
for (p = *p_environ; *p; ++p)
if (!strncmp (*p, name, len))
if (*(c = *p + len) == '=')
{ {
*offset = p - *p_environ; *offset = p - *p_environ;
ENV_UNLOCK; ENV_UNLOCK;
return (char *) (++c); return (char *) (++c);
} }
}
ENV_UNLOCK; ENV_UNLOCK;
return NULL; return NULL;
} }