X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libiberty%2Fsetenv.c;h=96917d5769f484e8f923de5ec75278b4319be6fe;hb=ed34ef5ed3b11141a622e3edfb0c47e790f1fea7;hp=eec13006c22936ed40530b0f90c33cd4c1784b93;hpb=e2eaf477991014a67bc122c3225f6a3fe6d1a8e6;p=platform%2Fupstream%2Fbinutils.git diff --git a/libiberty/setenv.c b/libiberty/setenv.c index eec1300..96917d5 100644 --- a/libiberty/setenv.c +++ b/libiberty/setenv.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995, 1996, 1997, 2002, 2011 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 @@ -13,13 +14,33 @@ 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 #endif +#define setenv libiberty_setenv +#define unsetenv libiberty_unsetenv + #include "ansidecl.h" #include /* For `size_t' */ #include /* For `NULL' */ @@ -45,6 +66,9 @@ extern int errno; extern char **environ; #endif +#undef setenv +#undef unsetenv + /* LOCK and UNLOCK are defined as no-ops. This makes the libiberty * implementation MT-Unsafe. */ #define LOCK @@ -58,12 +82,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 +93,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 +117,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 +144,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 +163,7 @@ setenv (name, value, replace) } void -unsetenv (name) - const char *name; +unsetenv (const char *name) { const size_t len = strlen (name); char **ep;