stdio: handle file position correctly at program exit
authorRich Felker <dalias@aerifal.cx>
Tue, 19 Jun 2012 05:27:26 +0000 (01:27 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 19 Jun 2012 05:27:26 +0000 (01:27 -0400)
commita71e0af25544fd2486e57ea51c6d05abdbf44c3e
tree434e8ae22e80ae95c2121a0c89076c7e9388b150
parentca8a4e7fbdeeb05b58ac3d456bae696623b8e312
stdio: handle file position correctly at program exit

for seekable files, posix imposed requirements on the offset of the
underlying open file description after a stream is closed. this was
correctly handled (as a side effect of the unconditional fflush call)
when streams were explicitly closed by fclose, but was not handled
correctly at program exit time, where fflush(0) was being used.

the weak symbol hackery is to pull in __stdio_exit if either of
__toread or __towrite is used, but avoid calling it twice so we don't
have to keep extra state. the new __stdio_exit is a streamlined fflush
variant that avoids performing any unnecessary operations and which
never unlocks the files or open file list, so we can be sure no other
threads write new data to a stream's buffer after it's already
flushed.
src/exit/exit.c
src/stdio/__stdio_exit.c [new file with mode: 0644]
src/stdio/__toread.c
src/stdio/__towrite.c