#include #include #include void doSomething(FILE * f,void * data); void f(void) { void * data=malloc(0x1000); if(data) { FILE * input; pthread_cleanup_push(free,data); input=fopen("file.txt","r"); if(input) { pthread_cleanup_push((void (*)(void *))fclose,input); doSomething(input,data); pthread_cleanup_pop(1); /* fclose(input) */ } pthread_cleanup_pop(1); /* free(data) */ } }