diff --git a/lib/posix/setenv.c b/lib/posix/setenv.c index 1660f3fa..a5ee8ff8 100644 --- a/lib/posix/setenv.c +++ b/lib/posix/setenv.c @@ -22,25 +22,34 @@ #include #include +// CONSTANT M2_PTR_SIZE 4 +#define M2_PTR_SIZE 1 + int setenv (char const *s, char const *v, int overwrite_p) { char **p = environ; int length = strlen (s); - while (*p) + + while (p[0] != 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 + M2_PTR_SIZE; } 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; - if (end_p) - *++p = 0; + entry[length + strlen (v) + 2] = 0; + if (end_p != 0) + p[1] = 0; + return 0; }