]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libiberty/setenv.c
Daily bump.
[thirdparty/gcc.git] / libiberty / setenv.c
index eec13006c22936ed40530b0f90c33cd4c1784b93..232b2d6a15c1e0bff08523e71743bf05e56f6d58 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2024 Free Software Foundation, Inc.
    This file based on setenv.c in the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
    You should have received a copy of the GNU Library General Public
    License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+
+/*
+
+@deftypefn Supplemental int setenv (const char *@var{name}, @
+  const char *@var{value}, int @var{overwrite})
+@deftypefnx Supplemental void unsetenv (const char *@var{name})
+
+@code{setenv} adds @var{name} to the environment with value
+@var{value}.  If the name was already present in the environment,
+the new value will be stored only if @var{overwrite} is nonzero.
+The companion @code{unsetenv} function removes @var{name} from the
+environment.  This implementation is not safe for multithreaded code.
+
+@end deftypefn
+
+*/
 
 #if HAVE_CONFIG_H
 # include <config.h>
 #endif
 
+#define setenv libiberty_setenv
+#define unsetenv libiberty_unsetenv
+
 #include "ansidecl.h"
 #include <sys/types.h> /* For `size_t' */
 #include <stdio.h>     /* For `NULL' */
@@ -41,9 +61,10 @@ extern int errno;
 #endif
 
 #define __environ      environ
-#ifndef HAVE_ENVIRON_DECL
-extern char **environ;
-#endif
+#include "environ.h"
+
+#undef setenv
+#undef unsetenv
 
 /* LOCK and UNLOCK are defined as no-ops.  This makes the libiberty
  * implementation MT-Unsafe. */
@@ -58,12 +79,9 @@ static char **last_environ;
 
 
 int
-setenv (name, value, replace)
-     const char *name;
-     const char *value;
-     int replace;
+setenv (const char *name, const char *value, int replace)
 {
-  register char **ep;
+  register char **ep = 0;
   register size_t size;
   const size_t namelen = strlen (name);
   const size_t vallen = strlen (value) + 1;
@@ -72,11 +90,13 @@ setenv (name, value, replace)
 
   size = 0;
   if (__environ != NULL)
-    for (ep = __environ; *ep != NULL; ++ep)
-      if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
-       break;
-      else
-       ++size;
+    {
+      for (ep = __environ; *ep != NULL; ++ep)
+       if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+         break;
+       else
+         ++size;
+    }
 
   if (__environ == NULL || *ep == NULL)
     {
@@ -94,7 +114,7 @@ setenv (name, value, replace)
          return -1;
        }
 
-      new_environ[size] = malloc (namelen + 1 + vallen);
+      new_environ[size] = (char *) malloc (namelen + 1 + vallen);
       if (new_environ[size] == NULL)
        {
          free ((char *) new_environ);
@@ -121,13 +141,13 @@ setenv (name, value, replace)
       if (len + 1 < namelen + 1 + vallen)
        {
          /* The existing string is too short; malloc a new one.  */
-         char *new = malloc (namelen + 1 + vallen);
-         if (new == NULL)
+         char *new_string = (char *) malloc (namelen + 1 + vallen);
+         if (new_string == NULL)
            {
              UNLOCK;
              return -1;
            }
-         *ep = new;
+         *ep = new_string;
        }
       memcpy (*ep, name, namelen);
       (*ep)[namelen] = '=';
@@ -140,8 +160,7 @@ setenv (name, value, replace)
 }
 
 void
-unsetenv (name)
-     const char *name;
+unsetenv (const char *name)
 {
   const size_t len = strlen (name);
   char **ep;