From d464f0e78b63ee7df52df9171943f6a9723260fc Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 12 Mar 2007 11:32:19 +0000 Subject: r21797: remove the key directly from the environ array inspired by: http://cvs.linux-ha.org/viewcvs/viewcvs.cgi/linux-ha/replace/unsetenv.c?rev=1.4&view=auto metze (This used to be commit 8787525e518805f8445a376dc4964921598cb2e0) --- source4/lib/replace/replace.c | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) (limited to 'source4') diff --git a/source4/lib/replace/replace.c b/source4/lib/replace/replace.c index 486c1c5e13..03888a8eee 100644 --- a/source4/lib/replace/replace.c +++ b/source4/lib/replace/replace.c @@ -593,34 +593,26 @@ int rep_setenv(const char *name, const char *value, int overwrite) #ifndef HAVE_UNSETENV int rep_unsetenv(const char *name) { - char *p; - size_t l1; - int ret; - - if (!getenv(name)) { - return 0; - } - - l1 = strlen(name); - - p = malloc(l1+1); - if (p == NULL) { - return -1; - } - memcpy(p, name, l1); - p[l1] = 0; + extern char **environ; + size_t len = strlen(name); + size_t i; + int found = 0; + + for (i=0; (environ && environ[i]); i++) { + if (found) { + environ[i-1] = environ[i]; + continue; + } - /* - * use using "name" here unsets the var - * - * "name=" would set it to an empty string.. - */ - ret = putenv(p); - if (ret != 0) { - free(p); + if (strncmp(environ[i], name, len) == 0 && environ[i][len] == '=') { + free(environ[i]); + environ[i] = NULL; + found = 1; + continue; + } } - return ret; + return 0; } #endif -- cgit