#include "../file.h" #include #include #include #include kern_status_t fs_msg_getdents( xpc_context_t *xpc, const xpc_endpoint_t *sender, int *out_err, xpc_buffer_t *out_dents, void *arg) { struct fs_context *ctx = arg; struct fs_file *f = fs_context_get_file(ctx, sender->e_port); if (!f) { *out_err = EBADF; return KERN_OK; } if (!(f->f_inode->i_mode & FS_INODE_DIR)) { *out_err = ENOTDIR; return KERN_OK; } size_t start = fs_file_get_cursor(f); enum fs_status status = fs_file_readdir(f, out_dents); size_t end = fs_file_get_cursor(f); *out_err = fs_status_to_errno(status); return KERN_OK; }