]> diplodocus.org Git - nmh/blobdiff - sbr/putenv.c
Alter mh-chart(7)'s NAME to be lowercase.
[nmh] / sbr / putenv.c
index 2c6af0dc53071c210b7aebb1366bee623a425631..5266d63ee65395a7acba2e1c448a825a3dc2c0ff 100644 (file)
@@ -2,10 +2,13 @@
 /*
  * putenv.c -- (un)set an envariable
  *
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 
 extern char **environ;
 
@@ -16,17 +19,16 @@ int m_putenv (char *, char *);
 int unputenv (char *);
 static int nvmatch (char *, char *);
 
+/* FIXME: These functions leak memory.  No easy fix since they might not
+ * be malloc'd.  Switch to setenv(3) and unsetenv(3). */
 
 int
 m_putenv (char *name, char *value)
 {
-    register int i;
-    register char **ep, **nep, *cp;
+    int i;
+    char **ep, **nep, *cp;
 
-    if (!(cp = malloc ((size_t) (strlen (name) + strlen (value) + 2))))
-       return 1;
-
-    sprintf (cp, "%s=%s", name, value);
+    cp = concat(name, "=", value, NULL);
 
     for (ep = environ, i = 0; *ep; ep++, i++)
        if (nvmatch (name, *ep)) {
@@ -34,8 +36,7 @@ m_putenv (char *name, char *value)
            return 0;
        }
 
-    if (!(nep = (char **) malloc ((size_t) ((i + 2) * sizeof(*nep)))))
-       return 1;
+    nep = (char **) mh_xmalloc ((size_t) ((i + 2) * sizeof(*nep)));
 
     for (ep = environ, i = 0; *ep; nep[i++] = *ep++)
        continue;