18b1453893e95aebf67656898394050a1dce290banjn#include <assert.h>
28b1453893e95aebf67656898394050a1dce290banjn#include <stdlib.h>
38b1453893e95aebf67656898394050a1dce290banjn#include <string.h>
48b1453893e95aebf67656898394050a1dce290banjn
58b1453893e95aebf67656898394050a1dce290banjn// This tests that the suppression for the leak in setenv() works.  See bug
68b1453893e95aebf67656898394050a1dce290banjn// 188572.
78b1453893e95aebf67656898394050a1dce290banjn
88b1453893e95aebf67656898394050a1dce290banjnint main(void)
98b1453893e95aebf67656898394050a1dce290banjn{
108b1453893e95aebf67656898394050a1dce290banjn   char* val1 = "x";
118b1453893e95aebf67656898394050a1dce290banjn   char* val2 = "xx";
128b1453893e95aebf67656898394050a1dce290banjn   char* val3 = "xxx";
138b1453893e95aebf67656898394050a1dce290banjn
148b1453893e95aebf67656898394050a1dce290banjn   setenv("MYVAR", val1, /*overwrite*/0); // makes a copy which is later leaked
158b1453893e95aebf67656898394050a1dce290banjn   assert( 0 == strcmp(getenv("MYVAR"), val1) );
168b1453893e95aebf67656898394050a1dce290banjn
178b1453893e95aebf67656898394050a1dce290banjn   setenv("MYVAR", val2, /*overwrite*/1); // makes a copy which is later leaked
188b1453893e95aebf67656898394050a1dce290banjn   assert( 0 == strcmp(getenv("MYVAR"), val2) );
198b1453893e95aebf67656898394050a1dce290banjn
208b1453893e95aebf67656898394050a1dce290banjn   setenv("MYVAR", val3, /*overwrite*/0); // doesn't overwrite MYVAR=val2
218b1453893e95aebf67656898394050a1dce290banjn   assert( 0 == strcmp(getenv("MYVAR"), val2) );
228b1453893e95aebf67656898394050a1dce290banjn
238b1453893e95aebf67656898394050a1dce290banjn   putenv("MYVAR=xxxx");                  // no leak for putenv()
248b1453893e95aebf67656898394050a1dce290banjn   assert( 0 == strcmp(getenv("MYVAR"), "xxxx") );
258b1453893e95aebf67656898394050a1dce290banjn
268b1453893e95aebf67656898394050a1dce290banjn   unsetenv("MYVAR");
278b1453893e95aebf67656898394050a1dce290banjn   assert( NULL == getenv("MYVAR") );
288b1453893e95aebf67656898394050a1dce290banjn
298b1453893e95aebf67656898394050a1dce290banjn   return 0;
308b1453893e95aebf67656898394050a1dce290banjn}
318b1453893e95aebf67656898394050a1dce290banjn
32