diff options
author | Rich Felker <dalias@aerifal.cx> | 2015-06-16 07:11:19 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-06-16 07:11:19 +0000 |
commit | 1b0cdc8700d29ef018bf226d74b2b58b23bce91c (patch) | |
tree | 53c58824a9d73de47296b5a8885aefc9a1f39d0b /src/stdio/ofl.c | |
parent | f22a9edaf8a6f2ca1d314d18b3785558279a5c03 (diff) | |
download | musl-1b0cdc8700d29ef018bf226d74b2b58b23bce91c.tar.gz musl-1b0cdc8700d29ef018bf226d74b2b58b23bce91c.tar.xz musl-1b0cdc8700d29ef018bf226d74b2b58b23bce91c.zip |
refactor stdio open file list handling, move it out of global libc struct
functions which open in-memory FILE stream variants all shared a tail with __fdopen, adding the FILE structure to stdio's open file list. replacing this common tail with a function call reduces code size and duplication of logic. the list is also partially encapsulated now. function signatures were chosen to facilitate tail call optimization and reduce the need for additional accessor functions. with these changes, static linked programs that do not use stdio no longer have an open file list at all.
Diffstat (limited to 'src/stdio/ofl.c')
-rw-r--r-- | src/stdio/ofl.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/stdio/ofl.c b/src/stdio/ofl.c new file mode 100644 index 00000000..b143999c --- /dev/null +++ b/src/stdio/ofl.c @@ -0,0 +1,16 @@ +#include "stdio_impl.h" +#include "libc.h" + +static FILE *ofl_head; +static volatile int ofl_lock[2]; + +FILE **__ofl_lock() +{ + LOCK(ofl_lock); + return &ofl_head; +} + +void __ofl_unlock() +{ + UNLOCK(ofl_lock); +} |