Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/stdlib Avoid unnecessary malloc(). Since __findenv...



details:   https://anonhg.NetBSD.org/src/rev/32416070628d
branches:  trunk
changeset: 757935:32416070628d
user:      enami <enami%NetBSD.org@localhost>
date:      Tue Oct 05 02:23:38 2010 +0000

description:
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:

 lib/libc/stdlib/putenv.c |  22 ++++++----------------
 1 files changed, 6 insertions(+), 16 deletions(-)

diffs (51 lines):

diff -r 48073d577d62 -r 32416070628d lib/libc/stdlib/putenv.c
--- a/lib/libc/stdlib/putenv.c  Tue Oct 05 00:14:55 2010 +0000
+++ b/lib/libc/stdlib/putenv.c  Tue Oct 05 02:23:38 2010 +0000
@@ -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 @@
 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;



Home | Main Index | Thread Index | Old Index