projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
doc: use ASCII in .texi files where UTF-8 isn't needed
[gnulib.git]
/
lib
/
unsetenv.c
diff --git
a/lib/unsetenv.c
b/lib/unsetenv.c
index
7567011
..
53721fc
100644
(file)
--- a/
lib/unsetenv.c
+++ b/
lib/unsetenv.c
@@
-1,4
+1,4
@@
-/* Copyright (C) 1992,
1995-1999,2000-2002,2005-2009
Free Software Foundation, Inc.
+/* Copyright (C) 1992,
1995-2002, 2005-2014
Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software: you can redistribute it and/or modify
This file is part of the GNU C Library.
This program is free software: you can redistribute it and/or modify
@@
-14,6
+14,10
@@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
+/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc
+ optimizes away the name == NULL test below. */
+#define _GL_ARG_NONNULL(params)
+
#include <config.h>
/* Specification. */
#include <config.h>
/* Specification. */
@@
-28,15
+32,15
@@
#include <unistd.h>
#if !_LIBC
#include <unistd.h>
#if !_LIBC
-# define __environ environ
+# define __environ
environ
#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
#else
# define LOCK
# define UNLOCK
@@
-69,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;
@@
-93,6
+97,13
@@
weak_alias (__unsetenv, unsetenv)
#else /* HAVE_UNSETENV */
# undef unsetenv
#else /* HAVE_UNSETENV */
# undef unsetenv
+# if !HAVE_DECL_UNSETENV
+# if VOID_UNSETENV
+extern void unsetenv (const char *);
+# else
+extern int unsetenv (const char *);
+# endif
+# endif
/* Call the underlying unsetenv, in case there is hidden bookkeeping
that needs updating beyond just modifying environ. */
/* Call the underlying unsetenv, in case there is hidden bookkeeping
that needs updating beyond just modifying environ. */
@@
-105,10
+116,11
@@
rpl_unsetenv (const char *name)
errno = EINVAL;
return -1;
}
errno = EINVAL;
return -1;
}
+ while (getenv (name))
# if !VOID_UNSETENV
# if !VOID_UNSETENV
- result =
+
result =
# endif
# endif
- unsetenv (name);
+
unsetenv (name);
return result;
}
return result;
}