From dfe9bbdbfa86a89afad5681c65a445e9774a0199 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Fri, 14 Feb 2025 02:17:47 +0200 Subject: [PATCH] userspace/libc: implement read, pread, write & pwrite Signed-off-by: EnderIce2 --- Userspace/libc/include/unistd.h | 8 ++++---- Userspace/libc/src/std/unistd.c | 26 ++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Userspace/libc/include/unistd.h b/Userspace/libc/include/unistd.h index 1106d1e5..57a19a43 100644 --- a/Userspace/libc/include/unistd.h +++ b/Userspace/libc/include/unistd.h @@ -116,10 +116,10 @@ extern "C" long int pathconf(const char *, int); int pause(void); int pipe(int[2]); - ssize_t pread(int, void *, size_t, off_t); + ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); int pthread_atfork(void (*)(void), void (*)(void), void (*)(void)); - ssize_t pwrite(int, const void *, size_t, off_t); - ssize_t read(int, void *, size_t); + ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); + ssize_t read(int fildes, void *buf, size_t nbyte); int readlink(const char *, char *, size_t); int rmdir(const char *); void *sbrk(intptr_t); @@ -144,7 +144,7 @@ extern "C" int unlink(const char *); int usleep(useconds_t); pid_t vfork(void); - ssize_t write(int, const void *, size_t); + ssize_t write(int fildes, const void *buf, size_t nbyte); #ifdef __cplusplus } diff --git a/Userspace/libc/src/std/unistd.c b/Userspace/libc/src/std/unistd.c index d240e1d7..9bf75384 100644 --- a/Userspace/libc/src/std/unistd.c +++ b/Userspace/libc/src/std/unistd.c @@ -229,10 +229,24 @@ export int pause(void) } export int pipe(int[2]); -export ssize_t pread(int, void *, size_t, off_t); + +export ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset) +{ + return __check_errno(call_pread(fildes, buf, nbyte, offset), -1); +} + export int pthread_atfork(void (*)(void), void (*)(void), void (*)(void)); -export ssize_t pwrite(int, const void *, size_t, off_t); -export ssize_t read(int, void *, size_t); + +export ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset) +{ + return __check_errno(call_pwrite(fildes, buf, nbyte, offset), -1); +} + +export ssize_t read(int fildes, void *buf, size_t nbyte) +{ + return __check_errno(call_read(fildes, buf, nbyte), -1); +} + export int readlink(const char *, char *, size_t); export int rmdir(const char *); export void *sbrk(intptr_t); @@ -278,4 +292,8 @@ export useconds_t ualarm(useconds_t, useconds_t); export int unlink(const char *); export int usleep(useconds_t); export pid_t vfork(void); -export ssize_t write(int, const void *, size_t); + +export ssize_t write(int fildes, const void *buf, size_t nbyte) +{ + return __check_errno(call_write(fildes, buf, nbyte), -1); +}