pcc turned up this bug by calling f->close(f) before fflush(f), resulting in lost output and error on flush.
@@ -13,7 +13,7 @@ int fclose(FILE *f)
OFLUNLOCK();
}
- r = fflush(f) | f->close(f);
+ r = -(fflush(f) || f->close(f));
if (!perm) free(f);