fix multiple stdio functions' behavior on zero-length operations
authorRich Felker <dalias@aerifal.cx>
Fri, 5 Sep 2014 02:21:17 +0000 (22:21 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 30 Mar 2015 05:15:44 +0000 (01:15 -0400)
commitf071365e66174937ffcb68c103e68573ce7dfd13
tree25c8d41e51e721c69f51167af1a30930da7b5f63
parent6d14779eabec925c3977584d5dfd52778047b856
fix multiple stdio functions' behavior on zero-length operations

previously, fgets, fputs, fread, and fwrite completely omitted locking
and access to the FILE object when their arguments yielded a zero
length read or write operation independent of the FILE state. this
optimization was invalid; it wrongly skipped marking the stream as
byte-oriented (a C conformance bug) and exposed observably missing
synchronization (a POSIX conformance bug) where one of these functions
could wrongly complete despite another thread provably holding the
lock.

(cherry picked from commit 6e2bb7acf42589fb7130b039d0623e2ca42503dd)
src/stdio/fgets.c
src/stdio/fputs.c
src/stdio/fread.c
src/stdio/fwrite.c