diff options
author | David Shaw <dshaw@jabberwocky.com> | 2004-02-20 16:10:36 +0100 |
---|---|---|
committer | David Shaw <dshaw@jabberwocky.com> | 2004-02-20 16:10:36 +0100 |
commit | a3ba17e09eaf08982b0d61defe630ace67eedc53 (patch) | |
tree | 005d90a9dbf572d9b73a1a9062a442bea22b3539 /util/unsetenv.c | |
parent | * mkdtemp.c: Removed. (diff) | |
download | gnupg2-a3ba17e09eaf08982b0d61defe630ace67eedc53.tar.xz gnupg2-a3ba17e09eaf08982b0d61defe630ace67eedc53.zip |
* mkdtemp.c: New (moved from g10/), setenv.c: New, unsetenv.c: New.
* Makefile.am: Include @LIBOBJS@ for replacement functions.
Diffstat (limited to '')
-rw-r--r-- | util/unsetenv.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/util/unsetenv.c b/util/unsetenv.c new file mode 100644 index 000000000..9c4f4e95c --- /dev/null +++ b/util/unsetenv.c @@ -0,0 +1,58 @@ +/* unsetenv.c - libc replacement function + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG 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 2 of the License, or + * (at your option) any later version. + * + * GnuPG 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include <config.h> +#include <string.h> +#include <errno.h> + +extern char **environ; + +/* Basically borrowed from glibc */ +int +unsetenv2 (const char *name) +{ + size_t len; + char **ep; + + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) + { + errno=EINVAL; + return -1; + } + + len = strlen (name); + + 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; + + return 0; +} |