summaryrefslogtreecommitdiff
path: root/lib/libc/stdio/fflush.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/stdio/fflush.c')
-rw-r--r--lib/libc/stdio/fflush.c39
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;
}