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:
parent
610eefefdd
commit
9e71090b9a
|
@ -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>
|
||||
|
||||
* libc/include/pthread.h[_UNIX98_THREAD_MUTEX_ATTRIBUTES]: Add
|
||||
|
|
|
@ -29,7 +29,8 @@ A pointer to the (string) value of the environment variable, or
|
|||
|
||||
PORTABILITY
|
||||
<<_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>>.
|
||||
*/
|
||||
|
@ -98,17 +99,22 @@ _DEFUN (_findenv_r, (reent_ptr, name, offset),
|
|||
return NULL;
|
||||
}
|
||||
|
||||
len = strlen(name);
|
||||
c = name + len;
|
||||
|
||||
for (p = *p_environ; *p; ++p)
|
||||
if (!strncmp (*p, name, len))
|
||||
if (*(c = *p + len) == '=')
|
||||
c = name;
|
||||
while (*c && *c != '=') c++;
|
||||
|
||||
/* Identifiers may not contain an '=', so cannot match if does */
|
||||
if(*c != '=')
|
||||
{
|
||||
len = c - name;
|
||||
for (p = *p_environ; *p; ++p)
|
||||
if (!strncmp (*p, name, len))
|
||||
if (*(c = *p + len) == '=')
|
||||
{
|
||||
*offset = p - *p_environ;
|
||||
ENV_UNLOCK;
|
||||
ENV_UNLOCK;
|
||||
return (char *) (++c);
|
||||
}
|
||||
}
|
||||
ENV_UNLOCK;
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue