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