autoupdate
[gnulib.git] / lib / putenv.c
index 6acefaa..cc14b93 100644 (file)
@@ -1,11 +1,12 @@
-/* Copyright (C) 1991, 1994, 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2008
+   Free Software Foundation, Inc.
 
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to bug-glibc@prep.ai.mit.edu.
 
 
    NOTE: The canonical source of this file is maintained with the GNU C
    Library.  Bugs can be reported to bug-glibc@prep.ai.mit.edu.
 
-   This program is free software; you can redistribute it and/or modify it
+   This program is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
    under the terms of the GNU General Public License as published by the
-   Free Software Foundation; either version 2, or (at your option) any
+   Free Software Foundation; either version 3 of the License, or any
    later version.
 
    This program is distributed in the hope that it will be useful,
    later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
+
+/* Specification.  */
+#include <stdlib.h>
 
 #include <stddef.h>
 
 
 #include <stddef.h>
 
 # define __set_errno(ev) ((errno) = (ev))
 #endif
 
 # define __set_errno(ev) ((errno) = (ev))
 #endif
 
-/* Don't include stdlib.h because some (e.g., Solaris 7) declare putenv
-   with a non-const argument.  That would conflict with the declaration of
-   rpl_putenv below (due to the #define putenv rpl_putenv from config.h).  */
-
-void *malloc ();
-void free ();
-
 #include <string.h>
 #include <string.h>
-
-#if defined (__GNU_LIBRARY__) || defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif
+#include <unistd.h>
 
 #if HAVE_GNU_LD
 # define environ __environ
 
 #if HAVE_GNU_LD
 # define environ __environ
@@ -61,7 +52,7 @@ __libc_lock_define_initialized (static, envlock)
 #endif
 
 static int
 #endif
 
 static int
-unsetenv (const char *name)
+_unsetenv (const char *name)
 {
   size_t len;
   char **ep;
 {
   size_t len;
   char **ep;
@@ -100,7 +91,7 @@ unsetenv (const char *name)
 /* Put STRING, which is of the form "NAME=VALUE", in the environment.
    If STRING contains no `=', then remove STRING from the environment.  */
 int
 /* Put STRING, which is of the form "NAME=VALUE", in the environment.
    If STRING contains no `=', then remove STRING from the environment.  */
 int
-rpl_putenv (const char *string)
+putenv (char *string)
 {
   const char *const name_end = strchr (string, '=');
   register size_t size;
 {
   const char *const name_end = strchr (string, '=');
   register size_t size;
@@ -109,7 +100,7 @@ rpl_putenv (const char *string)
   if (name_end == NULL)
     {
       /* Remove the variable from the environment.  */
   if (name_end == NULL)
     {
       /* Remove the variable from the environment.  */
-      return unsetenv (string);
+      return _unsetenv (string);
     }
 
   size = 0;
     }
 
   size = 0;
@@ -130,13 +121,12 @@ rpl_putenv (const char *string)
                     size * sizeof (char *));
       new_environ[size] = (char *) string;
       new_environ[size + 1] = NULL;
                     size * sizeof (char *));
       new_environ[size] = (char *) string;
       new_environ[size + 1] = NULL;
-      if (last_environ != NULL)
-       free (last_environ);
+      free (last_environ);
       last_environ = new_environ;
       environ = new_environ;
     }
   else
       last_environ = new_environ;
       environ = new_environ;
     }
   else
-    *ep = (char *) string;
+    *ep = string;
 
   return 0;
 }
 
   return 0;
 }