]>
Commit | Line | Data |
---|---|---|
e40b61fb JR |
1 | #include <stdlib.h> |
2 | #include <string.h> | |
3 | ||
4 | int gitsetenv(const char *name, const char *value, int replace) | |
5 | { | |
6 | int out; | |
7 | size_t namelen, valuelen; | |
8 | char *envstr; | |
9 | ||
10 | if (!name || !value) return -1; | |
11 | if (!replace) { | |
12 | char *oldval = NULL; | |
13 | oldval = getenv(name); | |
14 | if (oldval) return 0; | |
15 | } | |
16 | ||
17 | namelen = strlen(name); | |
18 | valuelen = strlen(value); | |
19 | envstr = malloc((namelen + valuelen + 2) * sizeof(char)); | |
20 | if (!envstr) return -1; | |
21 | ||
22 | memcpy(envstr, name, namelen); | |
23 | envstr[namelen] = '='; | |
24 | memcpy(envstr + namelen + 1, value, valuelen); | |
25 | envstr[namelen + valuelen + 1] = 0; | |
26 | ||
27 | out = putenv(envstr); | |
28 | ||
29 | free(envstr); | |
30 | return out; | |
31 | } |