X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2F__fdopen.c;h=8d6ce813e45ec8ed880e1680d38fb409b4f63000;hb=78897b0dc00b7cd5c29af5e0b7eebf2396d8dce0;hp=59690f6dcb97d3153df9541ccf15421759ba1f6b;hpb=c6d441e3a246370d9c459396ec22b096db93850e;p=musl diff --git a/src/stdio/__fdopen.c b/src/stdio/__fdopen.c index 59690f6d..8d6ce813 100644 --- a/src/stdio/__fdopen.c +++ b/src/stdio/__fdopen.c @@ -1,6 +1,5 @@ #include "stdio_impl.h" #include -#include #include #include #include @@ -9,7 +8,7 @@ FILE *__fdopen(int fd, const char *mode) { FILE *f; - struct termios tio; + struct winsize wsz; /* Check for valid initial mode character */ if (!strchr("rwa", *mode)) { @@ -32,7 +31,9 @@ FILE *__fdopen(int fd, const char *mode) /* Set append mode on fd if opened for append */ if (*mode == 'a') { int flags = __syscall(SYS_fcntl, fd, F_GETFL); - __syscall(SYS_fcntl, fd, F_SETFL, flags | O_APPEND); + if (!(flags & O_APPEND)) + __syscall(SYS_fcntl, fd, F_SETFL, flags | O_APPEND); + f->flags |= F_APP; } f->fd = fd; @@ -41,7 +42,7 @@ FILE *__fdopen(int fd, const char *mode) /* Activate line buffered mode for terminals */ f->lbf = EOF; - if (!(f->flags & F_NOWR) && !__syscall(SYS_ioctl, fd, TCGETS, &tio)) + if (!(f->flags & F_NOWR) && !__syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz)) f->lbf = '\n'; /* Initialize op ptrs. No problem if some are unneeded. */ @@ -53,13 +54,7 @@ FILE *__fdopen(int fd, const char *mode) if (!libc.threaded) f->lock = -1; /* Add new FILE to open file list */ - OFLLOCK(); - f->next = libc.ofl_head; - if (libc.ofl_head) libc.ofl_head->prev = f; - libc.ofl_head = f; - OFLUNLOCK(); - - return f; + return __ofl_add(f); } weak_alias(__fdopen, fdopen);