In addition to everything else, please don't use a negative condition in an if/else statement.
if(NULL != fname) {
g = fopen(fname, "w+");
} else {
g = tmpfile();
}
Better: if(NULL == fname) {
g = tmpfile();
} else {
g = fopen(fname, "w+");
}