فهرست منبع

as an extension, have putenv("VAR") behave as unsetenv("VAR")

the behavior of putenv is left undefined if the argument does not
contain an equal sign, but traditional implementations behave this way
and gnulib replaces putenv if it doesn't do this.
Rich Felker 12 سال پیش
والد
کامیت
31a55f233b
1فایلهای تغییر یافته به همراه5 افزوده شده و 5 حذف شده
  1. 5 5
      src/env/putenv.c

+ 5 - 5
src/env/putenv.c

@@ -9,14 +9,14 @@ char **__env_map;
 int __putenv(char *s, int a)
 {
 	int i=0, j=0;
-	char *end = strchr(s, '=');
-	size_t l = end-s+1;
+	char *z = strchr(s, '=');
 	char **newenv = 0;
 	char **newmap = 0;
 	static char **oldenv;
-	
-	if (!end || l == 1) return -1;
-	for (; __environ[i] && memcmp(s, __environ[i], l); i++);
+
+	if (!z) return unsetenv(s);
+	if (z==s) return -1;
+	for (; __environ[i] && memcmp(s, __environ[i], z-s+1); i++);
 	if (a) {
 		if (!__env_map) {
 			__env_map = calloc(2, sizeof(char *));