blob: 3a22ea7b751efb768d72afa2f97fd963e10eec7e [file] [log] [blame]
Junio C Hamano85023572006-12-19 14:34:12 -08001#include "../git-compat-util.h"
Jason Riedye40b61f2005-12-02 15:08:28 -08002
3int gitsetenv(const char *name, const char *value, int replace)
4{
5 int out;
6 size_t namelen, valuelen;
7 char *envstr;
8
9 if (!name || !value) return -1;
10 if (!replace) {
11 char *oldval = NULL;
12 oldval = getenv(name);
13 if (oldval) return 0;
14 }
15
16 namelen = strlen(name);
17 valuelen = strlen(value);
Junio C Hamano3a267432005-12-04 14:41:35 -080018 envstr = malloc((namelen + valuelen + 2));
Jason Riedye40b61f2005-12-02 15:08:28 -080019 if (!envstr) return -1;
20
21 memcpy(envstr, name, namelen);
22 envstr[namelen] = '=';
23 memcpy(envstr + namelen + 1, value, valuelen);
24 envstr[namelen + valuelen + 1] = 0;
25
26 out = putenv(envstr);
Junio C Hamano3a267432005-12-04 14:41:35 -080027 /* putenv(3) makes the argument string part of the environment,
28 * and changing that string modifies the environment --- which
29 * means we do not own that storage anymore. Do not free
30 * envstr.
31 */
Jason Riedye40b61f2005-12-02 15:08:28 -080032
Jason Riedye40b61f2005-12-02 15:08:28 -080033 return out;
34}