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