diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nonstd/__libc_start.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/nonstd/__libc_start.c b/src/nonstd/__libc_start.c index f9fadfd5..c1cf7803 100644 --- a/src/nonstd/__libc_start.c +++ b/src/nonstd/__libc_start.c @@ -3,18 +3,31 @@ #include "nonstd/io.h" +#ifdef _POSIX_SOURCE +#include "unistd.h" +#else +#include "nonstd/syscall.h" +#define isatty(fd) __syscall(__lookup("tty"), fd) +#endif + void __libc_start(int argc, char **argv) { struct __FILE *files = __libc(FILE_STREAMS); stdin = files + 0; stdin->fd = 0; + freopen(NULL, "r", stdin); + setvbuf(stdin, NULL, isatty(0) ? _IOLBF : _IOFBF, BUFSIZ); stdout = files + 1; stdout->fd = 1; + freopen(NULL, "w", stdout); + setvbuf(stdin, NULL, isatty(1) ? _IOLBF : _IOFBF, BUFSIZ); stderr = files + 2; stderr->fd = 2; + freopen(NULL, "w", stderr); + setvbuf(stderr, NULL, _IONBF, 0); stdin->next = stdout; stdout->next = stderr; |
