1#include <errno.h> 2#include <stdlib.h> 3#include <string.h> 4 5#include "env_impl.h" 6 7int setenv(const char* var, const char* value, int overwrite) { 8 char* s; 9 int l1, l2; 10 11 if (!var || !*var || strchr(var, '=')) { 12 errno = EINVAL; 13 return -1; 14 } 15 if (!overwrite && getenv(var)) 16 return 0; 17 18 l1 = strlen(var); 19 l2 = strlen(value); 20 s = malloc(l1 + l2 + 2); 21 if (s) { 22 memcpy(s, var, l1); 23 s[l1] = '='; 24 memcpy(s + l1 + 1, value, l2); 25 s[l1 + l2 + 1] = 0; 26 if (!__putenv(s, 1)) 27 return 0; 28 } 29 free(s); 30 return -1; 31} 32