#include #include #include #include extern kern_status_t fs_msg_read( xpc_context_t *xpc, xpc_endpoint_t *sender, size_t count, int *out_err, size_t *out_nr_read, xpc_buffer_t *out_data, 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; } size_t start = fs_file_get_cursor(f); enum fs_status status = fs_file_read(f, out_data, count); size_t end = fs_file_get_cursor(f); *out_err = fs_status_to_errno(status); *out_nr_read = end - start; return KERN_OK; }