From f8d76107147f6371649c7ab2f8dd7a0cf8146c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 10 Jul 2002 21:46:34 +0000 Subject: [PATCH] Added the syscalls for sys_read_dir(), and sys_rewind_dir(). sys_read_dir() now has a parameter for the maximum number of dirents that are handled by the upper layer - which is currently 1. Added a comment in fd.h to ease the location of the sys|user prototypes of the corresponding functions in fd.c. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@58 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/kernel/dirent.h | 4 +--- headers/private/kernel/fd.h | 2 ++ headers/private/kernel/ksyscalls.h | 5 ++++- headers/private/kernel/vfs.h | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) 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);