1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-21 16:02:15 +03:00
Files
postgres/src/port/unsetenv.c
PostgreSQL Daemon 2ff501590b Tag appropriate files for rc3
Also performed an initial run through of upgrading our Copyright date to
extend to 2005 ... first run here was very simple ... change everything
where: grep 1996-2004 && the word 'Copyright' ... scanned through the
generated list with 'less' first, and after, to make sure that I only
picked up the right entries ...
2004-12-31 22:04:05 +00:00

58 lines
1.6 KiB
C

/*-------------------------------------------------------------------------
*
* unsetenv.c
* unsetenv() emulation for machines without it
*
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/port/unsetenv.c,v 1.4 2004/12/31 22:03:53 pgsql Exp $
*
*-------------------------------------------------------------------------
*/
#include "c.h"
void
unsetenv(const char *name)
{
char *envstr;
if (getenv(name) == NULL)
return; /* no work */
/*
* The technique embodied here works if libc follows the Single Unix
* Spec and actually uses the storage passed to putenv() to hold the
* environ entry. When we clobber the entry in the second step we are
* ensuring that we zap the actual environ member. However, there are
* some libc implementations (notably recent BSDs) that do not obey
* SUS but copy the presented string. This method fails on such
* platforms. Hopefully all such platforms have unsetenv() and thus
* won't be using this hack.
*
* Note that repeatedly setting and unsetting a var using this code will
* leak memory.
*/
envstr = (char *) malloc(strlen(name) + 2);
if (!envstr) /* not much we can do if no memory */
return;
/* Override the existing setting by forcibly defining the var */
sprintf(envstr, "%s=", name);
putenv(envstr);
/* Now we can clobber the variable definition this way: */
strcpy(envstr, "=");
/*
* This last putenv cleans up if we have multiple zero-length names as
* a result of unsetting multiple things.
*/
putenv(envstr);
}