summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2020-08-16 18:22:05 -0400
committerJakob Kaivo <jkk@ung.org>2020-08-16 18:22:05 -0400
commit9ed2b0ecd370e1b0374e933ae8468b988f48e9be (patch)
treedcc3cb0b0ed4d5cfbedaade899b4b766a2c626e5
parent868b724c674c1520785281dd44346b22032ee9bb (diff)
clean up
-rw-r--r--src/dirent/readdir.c33
1 files 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 <dirent.h>
-#include "limits.h"
-#include "errno.h"
-#include "sys/types.h"
-#include "stddef.h"
+#include <limits.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <string.h>
+#include <unistd.h>
#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;
}