Header And Logo

| The world's most advanced open source database.


unsetenv.c File Reference

#include "c.h"
Include dependency graph for unsetenv.c:

Go to the source code of this file.


void unsetenv (const char *name)

Function Documentation

void unsetenv ( const char *  name  ) 

Definition at line 20 of file unsetenv.c.

References malloc, NULL, and putenv.

    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. See:
     * http://www.greenend.org.uk/rjk/2008/putenv.html
     * 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 */

    /* Override the existing setting by forcibly defining the var */
    sprintf(envstr, "%s=", name);

    /* 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.