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