diff options
| author | enami <enami@NetBSD.org> | 2010-10-05 02:23:38 +0000 |
|---|---|---|
| committer | enami <enami@NetBSD.org> | 2010-10-05 02:23:38 +0000 |
| commit | 4a94dc0b8f87f80c1a07bf7e412fbab6173bfb78 (patch) | |
| tree | 05637dd619248d0741f3ecb711f5b08f08423090 /lib/libc/stdlib | |
| parent | 58f7870b488b63541b8948b936560e6708a1e791 (diff) | |
Avoid unnecessary malloc(). Since __findenv() kindly treats
equal sign as an end of string, we can pass the string of
form "key=value" to lookup "key".
Diffstat (limited to 'lib/libc/stdlib')
| -rw-r--r-- | lib/libc/stdlib/putenv.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/lib/libc/stdlib/putenv.c b/lib/libc/stdlib/putenv.c index e49375d5572..783aa67011d 100644 --- a/lib/libc/stdlib/putenv.c +++ b/lib/libc/stdlib/putenv.c @@ -1,4 +1,4 @@ -/* $NetBSD: putenv.c,v 1.15 2010/10/02 16:56:03 tron Exp $ */ +/* $NetBSD: putenv.c,v 1.16 2010/10/05 02:23:38 enami Exp $ */ /*- * Copyright (c) 1988, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)putenv.c 8.2 (Berkeley) 3/27/94"; #else -__RCSID("$NetBSD: putenv.c,v 1.15 2010/10/02 16:56:03 tron Exp $"); +__RCSID("$NetBSD: putenv.c,v 1.16 2010/10/05 02:23:38 enami Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -54,28 +54,18 @@ __weak_alias(putenv,_putenv) int putenv(char *str) { - char *name, *equal, *p; - size_t namelen; + char *p; int offset; _DIAGASSERT(str != NULL); - if ((equal = strchr(str, '=')) == NULL) + if (strchr(str, '=') == NULL) return -1; - namelen = equal - str; - if ((name = malloc(namelen + 1)) == NULL) + if (rwlock_wrlock(&__environ_lock) != 0) return -1; - (void)memcpy(name, str, namelen); - name[namelen] = '\0'; - if (rwlock_wrlock(&__environ_lock) != 0) { - free(name); - return -1; - } - - p = __findenv(name, &offset); - free(name); + p = __findenv(str, &offset); if (__allocenv(offset) == -1) goto bad; |
