#include #include #include #include extern kern_status_t fs_msg_write( xpc_context_t *xpc, const xpc_endpoint_t *sender, const xpc_buffer_t *data, int *out_err, size_t *out_nr_written, 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_write(f, data, data->buf_len); size_t end = fs_file_get_cursor(f); *out_err = fs_status_to_errno(status); *out_nr_written = end - start; return KERN_OK; }