diff --git a/headers/os/kernel/dirent.h b/headers/os/kernel/dirent.h index 96ff238a6f..80d60a1049 100644 --- a/headers/os/kernel/dirent.h +++ b/headers/os/kernel/dirent.h @@ -21,11 +21,9 @@ typedef struct dirent { char d_name[1]; } dirent_t; -// ToDo: this structure is still incompatible with BeOS typedef struct { int fd; - struct dirent *ent; - struct dirent me; + struct dirent ent; } DIR; #ifndef MAXNAMLEN diff --git a/headers/private/kernel/fd.h b/headers/private/kernel/fd.h index db847d8fc2..d5f7f7991e 100644 --- a/headers/private/kernel/fd.h +++ b/headers/private/kernel/fd.h @@ -73,6 +73,8 @@ void put_fd(struct file_descriptor *); void free_fd(struct file_descriptor *); static struct io_context *get_current_io_context(bool kernel); +/* The prototypes of the (sys|user)_ functions are currently defined in vfs.h */ + /* Inlines */ diff --git a/headers/private/kernel/ksyscalls.h b/headers/private/kernel/ksyscalls.h index 7f684ba1f8..fa8190ddbd 100755 --- a/headers/private/kernel/ksyscalls.h +++ b/headers/private/kernel/ksyscalls.h @@ -2,6 +2,7 @@ ** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. ** Distributed under the terms of the NewOS License. */ + #include #ifndef _KERNEL_SYSCALLS_H #define _KERNEL_SYSCALLS_H @@ -81,7 +82,9 @@ enum { SYSCALL_SYSCTL, SYSCALL_SOCKET, SYSCALL_GETDTABLESIZE, - SYSCALL_FSTAT + SYSCALL_FSTAT, + SYSCALL_READ_DIR, + SYSCALL_REWIND_DIR, }; int syscall_dispatcher(unsigned long call_num, void *arg_buffer, uint64 *call_ret); diff --git a/headers/private/kernel/vfs.h b/headers/private/kernel/vfs.h index 5a00a97345..34b363bba4 100755 --- a/headers/private/kernel/vfs.h +++ b/headers/private/kernel/vfs.h @@ -147,7 +147,7 @@ int user_dup2(int ofd, int nfd); extern ssize_t sys_read(int fd, void *buf, off_t pos, size_t len); extern ssize_t sys_write(int fd, const void *buf, off_t pos, size_t len); extern int sys_ioctl(int fd, ulong cmd, void *data, size_t length); -extern ssize_t sys_read_dir(int fd, struct dirent *buffer, size_t bufferSize); +extern ssize_t sys_read_dir(int fd, struct dirent *buffer, size_t bufferSize, uint32 maxCount); extern status_t sys_rewind_dir(int fd); extern int sys_rstat(const char *path, struct stat *stat); extern int sys_close(int fd); @@ -157,7 +157,7 @@ extern int sys_close(int fd); extern ssize_t user_read(int fd, void *buf, off_t pos, size_t len); extern ssize_t user_write(int fd, const void *buf, off_t pos, size_t len); extern int user_ioctl(int fd, ulong cmd, void *data, size_t length); -extern ssize_t user_read_dir(int fd, struct dirent *buffer, size_t bufferSize); +extern ssize_t user_read_dir(int fd, struct dirent *buffer, size_t bufferSize, uint32 maxCount); extern status_t user_rewind_dir(int fd); extern int user_fstat(int, struct stat *); extern int user_close(int fd);