Index: fusl/src/env/setenv.c |
diff --git a/fusl/src/env/setenv.c b/fusl/src/env/setenv.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..76e8ee1206e5b5a4111b8c58481932952de6084f |
--- /dev/null |
+++ b/fusl/src/env/setenv.c |
@@ -0,0 +1,30 @@ |
+#include <stdlib.h> |
+#include <string.h> |
+#include <errno.h> |
+ |
+int __putenv(char *s, int a); |
+ |
+int setenv(const char *var, const char *value, int overwrite) |
+{ |
+ char *s; |
+ int l1, l2; |
+ |
+ if (!var || !*var || strchr(var, '=')) { |
+ errno = EINVAL; |
+ return -1; |
+ } |
+ if (!overwrite && getenv(var)) return 0; |
+ |
+ l1 = strlen(var); |
+ l2 = strlen(value); |
+ s = malloc(l1+l2+2); |
+ if (s) { |
+ memcpy(s, var, l1); |
+ s[l1] = '='; |
+ memcpy(s+l1+1, value, l2); |
+ s[l1+l2+1] = 0; |
+ if (!__putenv(s, 1)) return 0; |
+ } |
+ free(s); |
+ return -1; |
+} |