projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fmod, fmodl: Fix computation for large quotients x / y.
[gnulib.git]
/
lib
/
putenv.c
diff --git
a/lib/putenv.c
b/lib/putenv.c
index
9c7cf66
..
3c0f7ea
100644
(file)
--- a/
lib/putenv.c
+++ b/
lib/putenv.c
@@
-1,11
+1,12
@@
-/* Copyright (C) 1991, 1994, 1997, 1998, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2012 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,
@@
-14,12
+15,12
@@
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>
@@
-30,36
+31,30
@@
# 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>
-
#include <unistd.h>
#include <unistd.h>
-#if HAVE_GNU_LD
-# define environ __environ
-#else
+#if _LIBC
+# if HAVE_GNU_LD
+# define environ __environ
+# else
extern char **environ;
extern char **environ;
+# endif
#endif
#if _LIBC
#endif
#if _LIBC
-/* This lock protects against simultaneous modifications of
`
environ'. */
+/* This lock protects against simultaneous modifications of
'
environ'. */
# include <bits/libc-lock.h>
__libc_lock_define_initialized (static, envlock)
# include <bits/libc-lock.h>
__libc_lock_define_initialized (static, envlock)
-# define LOCK __libc_lock_lock (envlock)
-# define UNLOCK
__libc_lock_unlock (envlock)
+# define LOCK
__libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
#else
# define LOCK
# define UNLOCK
#endif
static int
#else
# define LOCK
# define UNLOCK
#endif
static int
-unsetenv (const char *name)
+
_
unsetenv (const char *name)
{
size_t len;
char **ep;
{
size_t len;
char **ep;
@@
-78,13
+73,13
@@
unsetenv (const char *name)
while (*ep != NULL)
if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
{
while (*ep != NULL)
if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
{
- /* Found it. Remove this pointer by moving later ones back. */
- char **dp = ep;
+
/* Found it. Remove this pointer by moving later ones back. */
+
char **dp = ep;
- do
- dp[0] = dp[1];
- while (*dp++);
- /* Continue the loop in case NAME appears again. */
+
do
+
dp[0] = dp[1];
+
while (*dp++);
+
/* Continue the loop in case NAME appears again. */
}
else
++ep;
}
else
++ep;
@@
-96,9
+91,9
@@
unsetenv (const char *name)
/* Put STRING, which is of the form "NAME=VALUE", in the environment.
/* Put STRING, which is of the form "NAME=VALUE", in the environment.
- If STRING contains no
`
=', then remove STRING from the environment. */
+ If STRING contains no
'
=', then remove STRING from the environment. */
int
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;
@@
-107,13
+102,13
@@
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;
for (ep = environ; *ep != NULL; ++ep)
if (!strncmp (*ep, string, name_end - string) &&
}
size = 0;
for (ep = environ; *ep != NULL; ++ep)
if (!strncmp (*ep, string, name_end - string) &&
- (*ep)[name_end - string] == '=')
+
(*ep)[name_end - string] == '=')
break;
else
++size;
break;
else
++size;
@@
-123,18
+118,17
@@
rpl_putenv (const char *string)
static char **last_environ = NULL;
char **new_environ = (char **) malloc ((size + 2) * sizeof (char *));
if (new_environ == NULL)
static char **last_environ = NULL;
char **new_environ = (char **) malloc ((size + 2) * sizeof (char *));
if (new_environ == NULL)
- return -1;
+
return -1;
(void) memcpy ((void *) new_environ, (void *) environ,
(void) memcpy ((void *) new_environ, (void *) environ,
- size * sizeof (char *));
+
size * sizeof (char *));
new_environ[size] = (char *) string;
new_environ[size + 1] = NULL;
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;
}