diff options
author | David Shaw <[email protected]> | 2004-05-21 15:18:32 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2004-05-21 15:18:32 +0000 |
commit | be6dd2e1ede2fbe9237c112edaae91e20d69c312 (patch) | |
tree | cd230463dffe2c6493be33ec3ae48f33b8eff29e | |
parent | * keyserver.c (keyserver_spawn): Fix keyserver options on tempfile only (diff) | |
download | gnupg-be6dd2e1ede2fbe9237c112edaae91e20d69c312.tar.gz gnupg-be6dd2e1ede2fbe9237c112edaae91e20d69c312.zip |
* timegm.c: New replacement function. Removes the need for setenv.c and
unsetenv.c.
* setenv.c: Removed.
* unsetenv.c: Removed.
-rw-r--r-- | util/ChangeLog | 9 | ||||
-rw-r--r-- | util/setenv.c | 51 | ||||
-rw-r--r-- | util/timegm.c | 67 | ||||
-rw-r--r-- | util/unsetenv.c | 58 |
4 files changed, 76 insertions, 109 deletions
diff --git a/util/ChangeLog b/util/ChangeLog index 9c97e4bde..ee0401b16 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,12 @@ +2004-05-21 David Shaw <[email protected]> + + * timegm.c: New replacement function. Removes the need for + setenv.c and unsetenv.c. + + * setenv.c: Removed. + + * unsetenv.c: Removed. + 2004-03-04 David Shaw <[email protected]> * iobuf.c (block_filter): Remove the old gpg indeterminate length diff --git a/util/setenv.c b/util/setenv.c deleted file mode 100644 index 9175e6f30..000000000 --- a/util/setenv.c +++ /dev/null @@ -1,51 +0,0 @@ -/* setenv.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> -#include <stdlib.h> - -/* Implement setenv in terms of putenv. Alas, the nature of setenv is - to be leaky... */ -int -setenv(const char *name, const char *value, int overwrite) -{ - char *item=NULL; - - if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) - { - errno=EINVAL; - return -1; - } - - item=malloc(strlen(name)+1+strlen(value)+1); - if(!item) - { - errno=ENOMEM; - return -1; - } - - strcpy(item,name); - strcat(item,"="); - strcat(item,value); - - return putenv(item); -} diff --git a/util/timegm.c b/util/timegm.c new file mode 100644 index 000000000..3fdd99e43 --- /dev/null +++ b/util/timegm.c @@ -0,0 +1,67 @@ +/* timegm.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 + */ + +/* + timegm() is a GNU function that might not be available everywhere. + It's basically the inverse of gmtime() - you give it a struct tm, + and get back a time_t. It differs from mktime() in that it handles + the case where the struct tm is UTC and the local environment isn't. + + Some BSDs don't handle the putenv("foo") case properly, so we use + unsetenv if the platform has it to remove environment variables. +*/ + +#include <config.h> +#include <time.h> +#include <stdlib.h> +#include <string.h> + +time_t +timegm(struct tm *tm) +{ + time_t answer; + char *zone; + + zone=getenv("TZ"); + putenv("TZ=UTC"); + tzset(); + answer=mktime(tm); + if(zone) + { + char *old_zone; + + old_zone=malloc(3+strlen(zone)+1); + if(old_zone) + { + strcpy(old_zone,"TZ="); + strcat(old_zone,zone); + putenv(old_zone); + } + } + else +#ifdef HAVE_UNSETENV + unsetenv("TZ"); +#else + putenv("TZ"); +#endif + + tzset(); + return answer; +} diff --git a/util/unsetenv.c b/util/unsetenv.c deleted file mode 100644 index fa74656b5..000000000 --- a/util/unsetenv.c +++ /dev/null @@ -1,58 +0,0 @@ -/* 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 -unsetenv(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; -} |