diff --git a/lib/posix/setenv.c b/lib/posix/setenv.c index 1660f3fa..5e695278 100644 --- a/lib/posix/setenv.c +++ b/lib/posix/setenv.c @@ -27,20 +27,25 @@ setenv (char const *s, char const *v, int overwrite_p) { char **p = environ; int length = strlen (s); - while (*p) + while (p[0]) { - if (!strncmp (s, *p, length) && *(*p + length) == '=') - break; - p++; + if (strncmp (s, p[0], length) == 0) + { + char *q = p[0] + length; + if (q[0] == '=') + break; + } + p = p + 1; } char *entry = malloc (length + strlen (v) + 2); - int end_p = *p == 0; - *p = entry; + int end_p = p[0] == 0; + p[0] = entry; strcpy (entry, s); strcpy (entry + length, "="); strcpy (entry + length + 1, v); - *(entry + length + strlen (v) + 2) = 0; + entry[length + strlen (v) + 2] = 0; if (end_p) - *++p = 0; + p[1] = 0; + return 0; }