| /* |
| * setenv.c |
| */ |
| |
| #include <errno.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include "env.h" |
| |
| int setenv(const char *name, const char *val, int overwrite) |
| { |
| const char *z; |
| char *s; |
| size_t l1, l2; |
| |
| if (!name || !name[0]) { |
| errno = EINVAL; |
| return -1; |
| } |
| |
| l1 = 0; |
| for (z = name; *z; z++) { |
| l1++; |
| if (*z == '=') { |
| errno = EINVAL; |
| return -1; |
| } |
| } |
| |
| l2 = strlen(val); |
| |
| s = malloc(l1 + l2 + 2); |
| if (!s) |
| return -1; |
| |
| memcpy(s, name, l1); |
| s[l1] = '='; |
| memcpy(s + l1 + 1, val, l2 + 1); |
| |
| return __put_env(s, l1 + 1, overwrite); |
| } |