Add compat/setenv.c, use in git.c.
[git.git] / compat / setenv.c
diff --git a/compat/setenv.c b/compat/setenv.c
new file mode 100644 (file)
index 0000000..94acd2d
--- /dev/null
@@ -0,0 +1,31 @@
+#include <stdlib.h>
+#include <string.h>
+
+int gitsetenv(const char *name, const char *value, int replace)
+{
+       int out;
+       size_t namelen, valuelen;
+       char *envstr;
+
+       if (!name || !value) return -1;
+       if (!replace) {
+               char *oldval = NULL;
+               oldval = getenv(name);
+               if (oldval) return 0;
+       }
+
+       namelen = strlen(name);
+       valuelen = strlen(value);
+       envstr = malloc((namelen + valuelen + 2) * sizeof(char));
+       if (!envstr) return -1;
+
+       memcpy(envstr, name, namelen);
+       envstr[namelen] = '=';
+       memcpy(envstr + namelen + 1, value, valuelen);
+       envstr[namelen + valuelen + 1] = 0;
+
+       out = putenv(envstr);
+
+       free(envstr);
+       return out;
+}