From 9ed2b0ecd370e1b0374e933ae8468b988f48e9be Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Sun, 16 Aug 2020 18:22:05 -0400 Subject: clean up --- src/dirent/readdir.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/src/dirent/readdir.c b/src/dirent/readdir.c index 205204d1..0ccbe790 100644 --- a/src/dirent/readdir.c +++ b/src/dirent/readdir.c @@ -1,33 +1,30 @@ #include -#include "limits.h" -#include "errno.h" -#include "sys/types.h" -#include "stddef.h" +#include +#include +#include +#include +#include #include "_dirent.h" -#include "unistd.h" #include "_syscall.h" -#include "string.h" #ifndef NAME_MAX #define NAME_MAX _POSIX_NAME_MAX #endif +/** read a directory **/ + struct dirent * readdir(DIR * dirp) { - struct { - unsigned long inode; - unsigned long offset; - unsigned short length; - } kernel_de = { 0, 0, 0 }; - if (read(dirp->fd, &kernel_de, sizeof(kernel_de)) == -1) { + if (read(dirp->fd, dirp, sizeof(*dirp)) == -1) { if (errno == EISDIR) { + #ifdef __linux__ struct { long inode; off_t offset; unsigned short reclen; char name[NAME_MAX + 1]; } linux = { 0, 0, 0, "" }; - long ret = __syscall(__syscall_lookup(getdents), dirp->fd, &linux, sizeof(linux)); + long ret = __scall3(getdents, dirp->fd, &linux, sizeof(linux)); if (ret < 0) { errno = -ret; return NULL; @@ -36,20 +33,14 @@ struct dirent * readdir(DIR * dirp) #ifdef _XOPEN_SOURCE dirp->de.d_ino = linux.inode; #endif + strcpy(dirp->de.d_name, linux.name); return &dirp->de; + #endif } return NULL; } - #ifdef _XOPEN_SOURCE - dirp->de.d_ino = inode; - #endif - - if (read(dirp->fd, &dirp->de.d_name, kernel_de.length) == -1) { - return NULL; - } - return &dirp->de; } -- cgit v1.2.1