fix fclose return status logic, again
authorRich Felker <dalias@aerifal.cx>
Mon, 2 May 2011 13:18:03 +0000 (09:18 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 2 May 2011 13:18:03 +0000 (09:18 -0400)
the previous fix was incorrect, as it would prevent f->close(f) from
being called if fflush(f) failed. i believe this was the original
motivation for using | rather than ||. so now let's just use a second
statement to constrain the order of function calls, and to back to
using |.

src/stdio/fclose.c

index 9481470de12777352763f15e5c0b5834b832466a..ee772fbb4708a6319d0911552d83ad7a27a07f66 100644 (file)
@@ -13,7 +13,8 @@ int fclose(FILE *f)
                OFLUNLOCK();
        }
 
-       r = -(fflush(f) || f->close(f));
+       r = fflush(f);
+       r |= f->close(f);
 
        if (!perm) free(f);