1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #include "../git-compat-util.h"
- int gitsetenv(const char *name, const char *value, int replace)
- {
- int out;
- size_t namelen, valuelen;
- char *envstr;
- if (!name || strchr(name, '=') || !value) {
- errno = EINVAL;
- return -1;
- }
- if (!replace) {
- char *oldval = NULL;
- oldval = getenv(name);
- if (oldval) return 0;
- }
- namelen = strlen(name);
- valuelen = strlen(value);
- envstr = malloc(st_add3(namelen, valuelen, 2));
- if (!envstr) {
- errno = ENOMEM;
- return -1;
- }
- memcpy(envstr, name, namelen);
- envstr[namelen] = '=';
- memcpy(envstr + namelen + 1, value, valuelen);
- envstr[namelen + valuelen + 1] = 0;
- out = putenv(envstr);
- /* putenv(3) makes the argument string part of the environment,
- * and changing that string modifies the environment --- which
- * means we do not own that storage anymore. Do not free
- * envstr.
- */
- return out;
- }
|