aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/dl-environ.c33
1 files changed, 13 insertions, 20 deletions
diff --git a/sysdeps/generic/dl-environ.c b/sysdeps/generic/dl-environ.c
index 132dad9c3e..30fe5654d6 100644
--- a/sysdeps/generic/dl-environ.c
+++ b/sysdeps/generic/dl-environ.c
@@ -57,30 +57,23 @@ extern char **__environ attribute_hidden;
int
unsetenv (const char *name)
{
+ const size_t len = strlen (name);
char **ep;
ep = __environ;
while (*ep != NULL)
- {
- size_t cnt = 0;
-
- while ((*ep)[cnt] == name[cnt] && name[cnt] != '\0')
- ++cnt;
-
- if ((*ep)[cnt] == '=')
- {
- /* Found it. Remove this pointer by moving later ones to
- the front. */
- char **dp = ep;
-
- do
- dp[0] = dp[1];
- while (*dp++);
- /* Continue the loop in case NAME appears again. */
- }
- else
- ++ep;
- }
+ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+ {
+ /* Found it. Remove this pointer by moving later ones back. */
+ char **dp = ep;
+
+ do
+ dp[0] = dp[1];
+ while (*dp++);
+ /* Continue the loop in case NAME appears again. */
+ }
+ else
+ ++ep;
return 0;
}