From f6ad491a449844a7942c26b3f0907574e918d346 Mon Sep 17 00:00:00 2001 From: y-syo Date: Sat, 6 Dec 2025 17:38:13 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat(ft=5Fread):?= =?UTF-8?q?=20added=20read=20yayy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sys/ft_read.s | 22 ++++++++++++++++++++++ src/sys/ft_write.s | 2 +- src/tests/main.c | 12 ++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/sys/ft_read.s diff --git a/src/sys/ft_read.s b/src/sys/ft_read.s new file mode 100644 index 0000000..6dcd6a9 --- /dev/null +++ b/src/sys/ft_read.s @@ -0,0 +1,22 @@ +extern __errno_location + +section .text +global ft_read + +; ssize_t ft_read(int fd, void *buf, size_t count); +ft_read: + mov eax, 0 + syscall + + cmp rax, 0 + jle .error + +.ret: + ret + +.error: + mov r10, rax + call __errno_location wrt ..plt + mov [rax], r10 + mov rax, -1 + jmp .ret diff --git a/src/sys/ft_write.s b/src/sys/ft_write.s index f390cf9..90e5995 100644 --- a/src/sys/ft_write.s +++ b/src/sys/ft_write.s @@ -3,7 +3,7 @@ extern __errno_location section .text global ft_write -; ssize_t write(int fd, const void *buf, size_t count); +; ssize_t ft_write(int fd, const void *buf, size_t count); ft_write: mov eax, 1 syscall diff --git a/src/tests/main.c b/src/tests/main.c index ce8922d..f738a82 100644 --- a/src/tests/main.c +++ b/src/tests/main.c @@ -2,11 +2,13 @@ int ft_strlen(char *str); char *ft_strcpy(char *dest, const char *src); int ft_strcmp(const char *s1, const char *s2); int ft_write(int fd, const char *buf, unsigned int count); +int ft_read(int fd, char *buf, unsigned int count); #include #include #include #include +#include int main(void) { @@ -38,4 +40,14 @@ int main(void) printf("| 200 \"xd\" 2 | %d\n", ft_write(200, "xd", 2)); int fd = open("out", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); printf("| %d \"[...]\" 42 | %d\n", fd, ft_write(fd, "wizard money gang, we love casting spells\n", 42)); + close(fd); + + printf("\n--- ft_read ---\n"); + char *xd = calloc(sizeof(char), 43); + printf("| 200 _ 2 | %d : %s\n", ft_read(200, xd, 6), xd); + fd = open("out", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); + printf("| %d _ 42 | %d : %s\n", fd, ft_read(fd, xd, 42), xd); + + printf("\n--- ft_strdup ---\n"); + printf("HELL NAH\n"); }