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"); }