path: root/src/internal
diff options
authorRich Felker <>2012-10-24 21:16:06 -0400
committerRich Felker <>2012-10-24 21:16:06 -0400
commit892cafff665b44d238e3b664f61ca38dd965cba6 (patch)
treec65353fe88b0d78025e113b77ed8728a2b4bc8d4 /src/internal
parent708c91f4e9be2cfd6d35e71361956e13f3201b85 (diff)
greatly improve freopen behavior
1. don't open /dev/null just as a basis to copy flags; use shared __fmodeflags function to get the right file flags for the mode. 2. handle the case (probably invalid, but whatever) case where the original stream's file descriptor was closed; previously, the logic re-closed it. 3. accept the "e" mode flag for close-on-exec; update dup3 to fallback to using dup2 so we can simply call __dup3 instead of putting fallback logic in freopen itself.
Diffstat (limited to 'src/internal')
1 files changed, 1 insertions, 0 deletions
diff --git a/src/internal/stdio_impl.h b/src/internal/stdio_impl.h
index 65dcfbda..279e91fd 100644
--- a/src/internal/stdio_impl.h
+++ b/src/internal/stdio_impl.h
@@ -87,6 +87,7 @@ size_t __fwritex(const unsigned char *, size_t, FILE *);
int __putc_unlocked(int, FILE *);
FILE *__fdopen(int, const char *);
+int __fmodeflags(const char *);
#define OFLLOCK() LOCK(libc.ofl_lock)
#define OFLUNLOCK() UNLOCK(libc.ofl_lock)