| Index: bison/src/bison/2.4.1/bison-2.4.1-src/lib/unsetenv.c
|
| ===================================================================
|
| --- bison/src/bison/2.4.1/bison-2.4.1-src/lib/unsetenv.c (revision 0)
|
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/lib/unsetenv.c (revision 0)
|
| @@ -0,0 +1,90 @@
|
| +/* Copyright (C) 1992,1995-1999,2000-2002,2005-2008 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
|
| + it under the terms of the GNU General Public License as published by
|
| + the Free Software Foundation; either version 3 of the License, or
|
| + (at your option) any later version.
|
| +
|
| + This program is distributed in the hope that it will be useful,
|
| + but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| + 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, see <http://www.gnu.org/licenses/>. */
|
| +
|
| +#include <config.h>
|
| +
|
| +/* Specification. */
|
| +#include <stdlib.h>
|
| +
|
| +#include <errno.h>
|
| +#if !_LIBC
|
| +# define __set_errno(ev) ((errno) = (ev))
|
| +#endif
|
| +
|
| +#include <string.h>
|
| +#include <unistd.h>
|
| +
|
| +#if !_LIBC
|
| +# define __environ environ
|
| +#endif
|
| +
|
| +#if _LIBC
|
| +/* This lock protects against simultaneous modifications of `environ'. */
|
| +# include <bits/libc-lock.h>
|
| +__libc_lock_define_initialized (static, envlock)
|
| +# define LOCK __libc_lock_lock (envlock)
|
| +# define UNLOCK __libc_lock_unlock (envlock)
|
| +#else
|
| +# define LOCK
|
| +# define UNLOCK
|
| +#endif
|
| +
|
| +/* In the GNU C library we must keep the namespace clean. */
|
| +#ifdef _LIBC
|
| +# define unsetenv __unsetenv
|
| +#endif
|
| +
|
| +
|
| +int
|
| +unsetenv (const char *name)
|
| +{
|
| + size_t len;
|
| + char **ep;
|
| +
|
| + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
|
| + {
|
| + __set_errno (EINVAL);
|
| + return -1;
|
| + }
|
| +
|
| + len = strlen (name);
|
| +
|
| + LOCK;
|
| +
|
| + ep = __environ;
|
| + while (*ep != NULL)
|
| + if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
|
| + {
|
| + /* 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. */
|
| + }
|
| + else
|
| + ++ep;
|
| +
|
| + UNLOCK;
|
| +
|
| + return 0;
|
| +}
|
| +
|
| +#ifdef _LIBC
|
| +# undef unsetenv
|
| +weak_alias (__unsetenv, unsetenv)
|
| +#endif
|
|
|
| Property changes on: bison\src\bison\2.4.1\bison-2.4.1-src\lib\unsetenv.c
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|