Index: fusl/src/env/unsetenv.c |
diff --git a/fusl/src/env/unsetenv.c b/fusl/src/env/unsetenv.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..356933546a31a41ad859c3bc08709aa76a5a2644 |
--- /dev/null |
+++ b/fusl/src/env/unsetenv.c |
@@ -0,0 +1,31 @@ |
+#include <stdlib.h> |
+#include <string.h> |
+#include <errno.h> |
+ |
+extern char **__environ; |
+extern char **__env_map; |
+ |
+int unsetenv(const char *name) |
+{ |
+ int i, j; |
+ size_t l = strlen(name); |
+ |
+ if (!*name || strchr(name, '=')) { |
+ errno = EINVAL; |
+ return -1; |
+ } |
+again: |
+ for (i=0; __environ[i] && (memcmp(name, __environ[i], l) || __environ[i][l] != '='); i++); |
+ if (__environ[i]) { |
+ if (__env_map) { |
+ for (j=0; __env_map[j] && __env_map[j] != __environ[i]; j++); |
+ free (__env_map[j]); |
+ for (; __env_map[j]; j++) |
+ __env_map[j] = __env_map[j+1]; |
+ } |
+ for (; __environ[i]; i++) |
+ __environ[i] = __environ[i+1]; |
+ goto again; |
+ } |
+ return 0; |
+} |