summaryrefslogtreecommitdiff
path: root/setenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'setenv.c')
-rw-r--r--setenv.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/setenv.c b/setenv.c
new file mode 100644
index 0000000..03c7062
--- /dev/null
+++ b/setenv.c
@@ -0,0 +1,34 @@
+ /*
+ * Some systems do not have setenv(). This one is modeled after 4.4 BSD, but
+ * is implemented in terms of portable primitives only: getenv(), putenv()
+ * and malloc(). It should therefore be safe to use on every UNIX system.
+ *
+ * If clobber == 0, do not overwrite an existing variable.
+ *
+ * Returns nonzero if memory allocation fails.
+ *
+ * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#) setenv.c 1.1 93/03/07 22:47:58";
+#endif
+
+/* setenv - update or insert environment (name,value) pair */
+
+int setenv(name, value, clobber)
+char *name;
+char *value;
+int clobber;
+{
+ char *malloc();
+ char *getenv();
+ char *cp;
+
+ if (clobber == 0 && getenv(name) != 0)
+ return (0);
+ if ((cp = malloc(strlen(name) + strlen(value) + 2)) == 0)
+ return (1);
+ sprintf(cp, "%s=%s", name, value);
+ return (putenv(cp));
+}