diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-06-23 10:48:58 +0300 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-06-30 08:45:15 +0300 |
commit | 79cc9cb8f30522a4bdf73362803aff5831b73512 (patch) | |
tree | 6ca17a438a32b782a6b6cc625ff87abf43a2d144 /newlib/libc/stdio | |
parent | b70c0bc706d5e9fc19ac84bfaa0fb049c898ef33 (diff) |
Add stdin_init(), stdout_init() and stderr_init()
This simplifies further changes in this area.
Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
Diffstat (limited to 'newlib/libc/stdio')
-rw-r--r-- | newlib/libc/stdio/findfp.c | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c index ecc65d6d3..b40aa9240 100644 --- a/newlib/libc/stdio/findfp.c +++ b/newlib/libc/stdio/findfp.c @@ -84,6 +84,36 @@ _DEFUN(std, (ptr, flags, file), #endif } +static inline void +stdin_init(FILE *ptr) +{ + std (ptr, __SRD, 0); +} + +static inline void +stdout_init(FILE *ptr) +{ + /* On platforms that have true file system I/O, we can verify + whether stdout is an interactive terminal or not, as part of + __smakebuf on first use of the stream. For all other platforms, + we will default to line buffered mode here. Technically, POSIX + requires both stdin and stdout to be line-buffered, but tradition + leaves stdin alone on systems without fcntl. */ +#ifdef HAVE_FCNTL + std (ptr, __SWR, 1); +#else + std (ptr, __SWR | __SLBF, 1); +#endif +} + +static inline void +stderr_init(FILE *ptr) +{ + /* POSIX requires stderr to be opened for reading and writing, even + when the underlying fd 2 is write-only. */ + std (ptr, __SRW | __SNBF, 2); +} + struct glue_with_file { struct _glue glue; FILE file; @@ -235,23 +265,9 @@ _DEFUN(__sinit, (s), s->_stderr = __sfp(s); #endif - std (s->_stdin, __SRD, 0); - - /* On platforms that have true file system I/O, we can verify - whether stdout is an interactive terminal or not, as part of - __smakebuf on first use of the stream. For all other platforms, - we will default to line buffered mode here. Technically, POSIX - requires both stdin and stdout to be line-buffered, but tradition - leaves stdin alone on systems without fcntl. */ -#ifdef HAVE_FCNTL - std (s->_stdout, __SWR, 1); -#else - std (s->_stdout, __SWR | __SLBF, 1); -#endif - - /* POSIX requires stderr to be opened for reading and writing, even - when the underlying fd 2 is write-only. */ - std (s->_stderr, __SRW | __SNBF, 2); + stdin_init (s->_stdin); + stdout_init (s->_stdout); + stderr_init (s->_stderr); s->__sdidinit = 1; |