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