r17764: more portable setenv() replacement
authorAndrew Tridgell <tridge@samba.org>
Thu, 24 Aug 2006 00:41:15 +0000 (00:41 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:16:38 +0000 (14:16 -0500)
(This used to be commit 5c00b6d08324b46cd7025264c0320352d2842ead)

source4/lib/ldb/replace/replace.c

index e2df7fe363e6b42a634fb1cba70ddbee6e7631b0..faa5771a76c51d7490412ebadd6ffee62643c8a1 100644 (file)
 #ifndef HAVE_SETENV
  int setenv(const char *name, const char *value, int overwrite) 
 {
-       char *p = NULL;
-       int ret = -1;
+       char *p;
+       size_t l1, l2;
+       int ret;
 
-       asprintf(&p, "%s=%s", name, value);
+       if (!overwrite && getenv(name)) {
+               return 0;
+       }
+
+       l1 = strlen(name);
+       l2 = strlen(value);
+
+       p = malloc(l1+l2+2);
+       if (p == NULL) {
+               return -1;
+       }
+       memcpy(p, name, l1);
+       p[l1] = '=';
+       memcpy(p+l1+1, value, l2);
+       p[l1+l2+1] = 0;
 
-       if (overwrite || getenv(name)) {
-               if (p) ret = putenv(p);
-       } else {
-               ret = 0;
+       ret = putenv(p);
+       if (ret != 0) {
+               free(p);
        }
 
-       return ret;     
+       return ret;
 }
 #endif