| #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; | |
| } |