#include <assert.h>
#include <stdlib.h>
#include <string.h>
// This tests that the suppression for the leak in setenv() works. See bug
// 188572.
int main(void)
{
char* val1 = "x";
char* val2 = "xx";
char* val3 = "xxx";
setenv("MYVAR", val1, /*overwrite*/0); // makes a copy which is later leaked
assert( 0 == strcmp(getenv("MYVAR"), val1) );
setenv("MYVAR", val2, /*overwrite*/1); // makes a copy which is later leaked
assert( 0 == strcmp(getenv("MYVAR"), val2) );
setenv("MYVAR", val3, /*overwrite*/0); // doesn't overwrite MYVAR=val2
assert( 0 == strcmp(getenv("MYVAR"), val2) );
putenv("MYVAR=xxxx"); // no leak for putenv()
assert( 0 == strcmp(getenv("MYVAR"), "xxxx") );
unsetenv("MYVAR");
assert( NULL == getenv("MYVAR") );
return 0;
}