#include <stdio.h>
#include <stdlib.h>
#if defined(DMALLOC_DEBUG)
#include <dmalloc.h>
#endif


const char *envName = "USER";
const char *envValSmall = "Hi";
const char *envValLarge = "Hi, again";
void __clean_env(void);


int main(int argc,
         char **argv)
{
    const char *env1;
    const char *env2;
    const char *env3;
    const char *env4;
    const char *env5;

    // Initial value of variable.
    printf("getenv(\"%s\")\n", envName);
    env1 = getenv(envName);
    printf("Env1:  %s\n\n", env1);

    // Change value of variable to smaller value and get value.
    printf("setenv(\"%s\", \"%s\", %d)\n", envName, envValSmall, 1);
    setenv(envName, envValSmall, 1);
    printf("Env1:  %s\n", env1);
    env2 = getenv(envName);
    printf("Env2:  %s\n\n", env2);

    // Unset variable.
    printf("unsetenv(\"%s\")\n", envName);
    unsetenv(envName);
    printf("Env1:  %s\n", env1);
    printf("Env2:  %s\n", env2);
    env3 = getenv(envName);
    printf("Env3:  %s\n\n", env3);

    // Set variable to bigger value and get value.
    printf("setenv(\"%s\", \"%s\", %d)\n", envName, envValLarge, 1);
    setenv(envName, envValLarge, 1);
    printf("Env1:  %s\n", env1);
    printf("Env2:  %s\n", env2);
    printf("Env3:  %s\n", env3);
    env4 = getenv(envName);
    printf("Env4:  %s\n\n", env4);

    // Set variable to any value without overwrite and get value.
    printf("setenv(\"%s\", \"%s\", %d)\n", envName, envValSmall, 0);
    setenv(envName, envValSmall, 0);
    printf("Env1:  %s\n", env1);
    printf("Env2:  %s\n", env2);
    printf("Env3:  %s\n", env3);
    printf("Env4:  %s\n", env4);
    env5 = getenv(envName);
    printf("Env5:  %s\n", env5);

    //__clean_environ();

    exit(EXIT_SUCCESS);
}

