diff options
Diffstat (limited to 'lib/libc/stdio/fflush.c')
| -rw-r--r-- | lib/libc/stdio/fflush.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/lib/libc/stdio/fflush.c b/lib/libc/stdio/fflush.c index 001e3139..1cf4b7bd 100644 --- a/lib/libc/stdio/fflush.c +++ b/lib/libc/stdio/fflush.c @@ -1,10 +1,9 @@ -#include "__stdio.h" // for _IO_ERR +#include "__stdio.h" // for __FILE, _IO_ERR #include "stddef.h" // for NULL #include <atomic.h> // for LIBC_UNLOCK, LIBC_LOCK #include <errno.h> // for errno, EBADF, EIO #include <fcntl.h> // for O_ACCMODE, O_RDONLY -#include <libc.h> // for __IMPL #include <stdio.h> // for EOF, FILE, fflush #include <string.h> // for memmove #include <unistd.h> // for size_t, write, ssize_t @@ -17,39 +16,39 @@ int fflush(FILE *stream) return 0; } - if (__IMPL(stream)->buf_len == 0) { + if (__FILE(stream)->buf_len == 0) { return 0; } - if (__IMPL(stream)->fd == -1) { - stream->buf_len = 0; + if (__FILE(stream)->fd == -1) { + __FILE(stream)->buf_len = 0; return 0; } - if (__IMPL(stream)->flags & _IO_ERR) { + if (__FILE(stream)->flags & _IO_ERR) { errno = EIO; return EOF; } - if ((__IMPL(stream)->flags & O_ACCMODE) == O_RDONLY) { + if ((__FILE(stream)->flags & O_ACCMODE) == O_RDONLY) { errno = EBADF; return EOF; } - LIBC_LOCK(__IMPL(stream)->lock); + LIBC_LOCK(__FILE(stream)->lock); - size_t bytes_to_write = __IMPL(stream)->buf_len; + size_t bytes_to_write = __FILE(stream)->buf_len; size_t total_written = 0; - char *buf_ptr = __IMPL(stream)->buf; + char *buf_ptr = __FILE(stream)->buf; while (total_written < bytes_to_write) { - ssize_t result = write(__IMPL(stream)->fd, + ssize_t result = write(__FILE(stream)->fd, buf_ptr + total_written, bytes_to_write - total_written); if (result < 0) { - __IMPL(stream)->flags |= _IO_ERR; - LIBC_UNLOCK(__IMPL(stream)->lock); + __FILE(stream)->flags |= _IO_ERR; + LIBC_UNLOCK(__FILE(stream)->lock); return EOF; } @@ -61,17 +60,17 @@ int fflush(FILE *stream) } if (total_written == bytes_to_write) { - __IMPL(stream)->buf_len = 0; - __IMPL(stream)->buf_pos = 0; + __FILE(stream)->buf_len = 0; + __FILE(stream)->buf_pos = 0; } else { size_t remaining = bytes_to_write - total_written; - memmove(__IMPL(stream)->buf, - __IMPL(stream)->buf + total_written, remaining); - __IMPL(stream)->buf_len = remaining; - __IMPL(stream)->buf_pos = 0; + memmove(__FILE(stream)->buf, + __FILE(stream)->buf + total_written, remaining); + __FILE(stream)->buf_len = remaining; + __FILE(stream)->buf_pos = 0; } - LIBC_UNLOCK(__IMPL(stream)->lock); + LIBC_UNLOCK(__FILE(stream)->lock); return (total_written == bytes_to_write) ? 0 : EOF; } |
