Update redox-scheme to 0.3.0

This commit is contained in:
bjorn3
2024-12-26 15:45:10 +01:00
parent 20cd7b6dcd
commit 8eabb75524
27 changed files with 141 additions and 93 deletions
Generated
+2 -2
View File
@@ -1157,8 +1157,8 @@ dependencies = [
[[package]]
name = "redox-scheme"
version = "0.2.4"
source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#efe7addc3d6c54149694f875ed51467f8c4aa8b9"
version = "0.3.0"
source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#d2bfa80a1072facb2662d0bc73656247f0b254b4"
dependencies = [
"libredox",
"redox_syscall",
+3 -3
View File
@@ -7,7 +7,7 @@ use std::os::unix::io::AsRawFd;
use std::sync::Arc;
use event::{EventFlags, RawEventQueue};
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use syscall::{EAGAIN, EWOULDBLOCK};
mod acpi;
@@ -66,7 +66,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
.expect("acpid: failed to open `/scheme/kernel.acpi/kstop`");
let mut event_queue = RawEventQueue::new().expect("acpid: failed to create event queue");
let socket = Socket::<V2>::nonblock("acpi").expect("acpid: failed to create disk scheme");
let socket = Socket::nonblock("acpi").expect("acpid: failed to create disk scheme");
daemon.ready().expect("acpid: failed to notify parent");
@@ -114,7 +114,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
};
let response = sqe.handle_scheme_mut(&mut scheme);
let response = sqe.handle_scheme(&mut scheme);
socket
.write_response(response, SignalBehavior::Restart)
.expect("acpid: failed to write response");
+2 -2
View File
@@ -1,6 +1,6 @@
use core::str;
use parking_lot::RwLockReadGuard;
use redox_scheme::{CallerCtx, OpenResult, SchemeMut};
use redox_scheme::{CallerCtx, OpenResult, Scheme};
use std::collections::BTreeMap;
use std::convert::{TryFrom, TryInto};
use syscall::dirent::{DirEntry, DirentBuf, DirentKind};
@@ -141,7 +141,7 @@ fn parse_table(table: &[u8]) -> Option<SdtSignature> {
})
}
impl SchemeMut for AcpiScheme<'_> {
impl Scheme for AcpiScheme<'_> {
fn xopen(&mut self, path: &str, flags: usize, _ctx: &CallerCtx) -> Result<OpenResult> {
let path = path.trim_start_matches('/');
+12 -3
View File
@@ -11,7 +11,8 @@
#![feature(io_error_more)]
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
use libredox::errno::EOPNOTSUPP;
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use crate::scheme::FbbootlogScheme;
@@ -23,7 +24,7 @@ fn main() {
redox_daemon::Daemon::new(|daemon| inner(daemon)).expect("failed to create daemon");
}
fn inner(daemon: redox_daemon::Daemon) -> ! {
let socket: Socket<V2> =
let socket =
Socket::create("fbbootlog").expect("fbbootlogd: failed to create fbbootlog scheme");
let mut scheme = FbbootlogScheme::new();
@@ -54,11 +55,19 @@ fn inner(daemon: redox_daemon::Daemon) -> ! {
RequestKind::Call(call_request) => {
socket
.write_response(
call_request.handle_scheme_mut(&mut scheme),
call_request.handle_scheme(&mut scheme),
SignalBehavior::Restart,
)
.expect("fbbootlogd: failed to write display scheme");
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)
.expect("fbbootlogd: failed to write scheme");
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
+2 -2
View File
@@ -1,6 +1,6 @@
use std::collections::BTreeMap;
use redox_scheme::SchemeMut;
use redox_scheme::Scheme;
use syscall::{Error, EventFlags, Result, EBADF, EINVAL, ENOENT};
use crate::display::Display;
@@ -31,7 +31,7 @@ impl FbbootlogScheme {
}
}
impl SchemeMut for FbbootlogScheme {
impl Scheme for FbbootlogScheme {
fn open(&mut self, path_str: &str, _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
if !path_str.is_empty() {
return Err(Error::new(ENOENT));
+15 -4
View File
@@ -1,7 +1,7 @@
#![feature(io_error_more)]
use event::EventQueue;
use libredox::errno::{EAGAIN, EINTR, ESTALE};
use libredox::errno::{EAGAIN, EINTR, EOPNOTSUPP, ESTALE};
use orbclient::Event;
use redox_scheme::{CallRequest, RequestKind, Response, SignalBehavior, Socket};
use std::os::fd::{AsRawFd, BorrowedFd};
@@ -99,14 +99,25 @@ fn handle_event(
match request.kind() {
RequestKind::Call(call_request) => {
if let Some(resp) = call_request.handle_scheme_block_mut(scheme) {
if let Some(resp) = call_request.handle_scheme_block(scheme) {
socket
.write_response(resp, SignalBehavior::Restart)
.expect("vesad: failed to write display scheme");
.expect("fbcond: failed to write display scheme");
} else {
blocked.push(call_request);
}
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(
&sendfd_request,
Err(syscall::Error::new(EOPNOTSUPP)),
),
SignalBehavior::Restart,
)
.expect("fbcond: failed to write scheme");
}
RequestKind::Cancellation(cancellation_request) => {
if let Some(i) = blocked
.iter()
@@ -154,7 +165,7 @@ fn handle_event(
{
let mut i = 0;
while i < blocked.len() {
if let Some(resp) = blocked[i].handle_scheme_block_mut(scheme) {
if let Some(resp) = blocked[i].handle_scheme_block(scheme) {
socket
.write_response(resp, SignalBehavior::Restart)
.expect("vesad: failed to write display scheme");
+2 -2
View File
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use std::os::fd::AsRawFd;
use event::{EventQueue, UserData};
use redox_scheme::SchemeBlockMut;
use redox_scheme::SchemeBlock;
use syscall::{Error, EventFlags, Result, EBADF, EINVAL, ENOENT, O_NONBLOCK};
use crate::display::Display;
@@ -69,7 +69,7 @@ impl FbconScheme {
}
}
impl SchemeBlockMut for FbconScheme {
impl SchemeBlock for FbconScheme {
fn open(
&mut self,
path_str: &str,
+15 -5
View File
@@ -3,8 +3,8 @@ extern crate orbclient;
extern crate syscall;
use event::{user_data, EventQueue};
use libredox::errno::EAGAIN;
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
use libredox::errno::{EAGAIN, EOPNOTSUPP};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use std::env;
use std::fs::File;
use std::os::fd::AsRawFd;
@@ -78,8 +78,7 @@ fn main() {
.expect("failed to create daemon");
}
fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec<FrameBuffer>, spec: &[()]) -> ! {
let socket: Socket<V2> =
Socket::nonblock("display.vesa").expect("vesad: failed to create display scheme");
let socket = Socket::nonblock("display.vesa").expect("vesad: failed to create display scheme");
let mut scheme = DisplayScheme::new(framebuffers, &spec);
@@ -148,11 +147,22 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec<FrameBuffer>, spec: &[(
RequestKind::Call(call_request) => {
socket
.write_response(
call_request.handle_scheme_mut(&mut scheme),
call_request.handle_scheme(&mut scheme),
SignalBehavior::Restart,
)
.expect("vesad: failed to write display scheme");
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(
&sendfd_request,
Err(syscall::Error::new(EOPNOTSUPP)),
),
SignalBehavior::Restart,
)
.expect("vesad: failed to write scheme");
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
+2 -2
View File
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use std::str;
use inputd::{VtEvent, VtEventKind};
use redox_scheme::SchemeMut;
use redox_scheme::Scheme;
use syscall::{Error, MapFlags, Result, EBADF, EINVAL, ENOENT};
use crate::{framebuffer::FrameBuffer, screen::GraphicScreen};
@@ -105,7 +105,7 @@ impl DisplayScheme {
}
}
impl SchemeMut for DisplayScheme {
impl Scheme for DisplayScheme {
fn open(&mut self, path_str: &str, _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
let mut parts = path_str.split('/');
let mut vt_screen = parts.next().unwrap_or("").split('.');
+16 -5
View File
@@ -27,10 +27,10 @@ use std::os::fd::AsRawFd;
use std::sync::atomic::{AtomicU32, Ordering};
use event::{user_data, EventQueue};
use libredox::errno::EAGAIN;
use libredox::errno::{EAGAIN, EOPNOTSUPP};
use pcid_interface::PciFunctionHandle;
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use virtio_core::utils::VolatileCell;
use virtio_core::MSIX_PRIMARY_VECTOR;
@@ -439,8 +439,8 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
device.transport.run_device();
deamon.ready().unwrap();
let socket: Socket<V2> = Socket::nonblock("display.virtio-gpu")?;
let mut scheme = futures::executor::block_on(scheme::Scheme::new(
let socket = Socket::nonblock("display.virtio-gpu")?;
let mut scheme = futures::executor::block_on(scheme::GpuScheme::new(
config,
control_queue.clone(),
cursor_queue.clone(),
@@ -505,11 +505,22 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
RequestKind::Call(call_request) => {
socket
.write_response(
call_request.handle_scheme_mut(&mut scheme),
call_request.handle_scheme(&mut scheme),
SignalBehavior::Restart,
)
.expect("virtio-gpud: failed to write display scheme");
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(
&sendfd_request,
Err(syscall::Error::new(EOPNOTSUPP)),
),
SignalBehavior::Restart,
)
.expect("virtio-gpud: failed to write scheme");
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
+5 -5
View File
@@ -7,7 +7,7 @@ use std::sync::Arc;
use common::{dma::Dma, sgl};
use inputd::{Damage, VtEvent, VtEventKind};
use redox_scheme::SchemeMut;
use redox_scheme::Scheme;
use syscall::{Error as SysError, MapFlags, EINVAL, PAGE_SIZE};
use virtio_core::spec::{Buffer, ChainBuilder, DescriptorFlags};
@@ -227,7 +227,7 @@ struct Handle<'a> {
vt: usize,
}
pub struct Scheme<'a> {
pub struct GpuScheme<'a> {
handles: BTreeMap<usize /* file descriptor */, Handle<'a>>,
/// Counter used for file descriptor allocation.
next_id: AtomicUsize,
@@ -235,13 +235,13 @@ pub struct Scheme<'a> {
pub inputd_handle: inputd::DisplayHandle,
}
impl<'a> Scheme<'a> {
impl<'a> GpuScheme<'a> {
pub async fn new(
config: &'a mut GpuConfig,
control_queue: Arc<Queue<'a>>,
cursor_queue: Arc<Queue<'a>>,
transport: Arc<dyn Transport>,
) -> Result<Scheme<'a>, Error> {
) -> Result<GpuScheme<'a>, Error> {
let displays = Self::probe(
control_queue.clone(),
cursor_queue.clone(),
@@ -335,7 +335,7 @@ impl<'a> Scheme<'a> {
}
}
impl<'a> SchemeMut for Scheme<'a> {
impl<'a> Scheme for GpuScheme<'a> {
fn open(&mut self, path: &str, _flags: usize, _uid: u32, _gid: u32) -> syscall::Result<usize> {
if path.is_empty() {
return Err(SysError::new(EINVAL));
+11 -5
View File
@@ -18,8 +18,8 @@ use std::sync::atomic::{AtomicUsize, Ordering};
use inputd::{VtActivate, VtEvent, VtEventKind};
use libredox::errno::ESTALE;
use redox_scheme::{RequestKind, SchemeMut, SignalBehavior, Socket, V2};
use libredox::errno::{EOPNOTSUPP, ESTALE};
use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket};
use orbclient::{Event, EventOption};
use syscall::{Error as SysError, EventFlags, EINVAL};
@@ -154,7 +154,7 @@ impl InputScheme {
}
}
impl SchemeMut for InputScheme {
impl Scheme for InputScheme {
fn open(&mut self, path: &str, _flags: usize, _uid: u32, _gid: u32) -> syscall::Result<usize> {
let mut path_parts = path.split('/');
@@ -483,7 +483,7 @@ impl SchemeMut for InputScheme {
fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
// Create the ":input" scheme.
let socket_file: Socket<V2> = Socket::create("input")?;
let socket_file = Socket::create("input")?;
let mut scheme = InputScheme::new();
deamon.ready().unwrap();
@@ -498,7 +498,13 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
match request.kind() {
RequestKind::Call(call_request) => {
socket_file.write_response(
call_request.handle_scheme_mut(&mut scheme),
call_request.handle_scheme(&mut scheme),
SignalBehavior::Restart,
)?;
}
RequestKind::SendFd(sendfd_request) => {
socket_file.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)?;
}
+12 -6
View File
@@ -1,11 +1,11 @@
use std::collections::BTreeMap;
use std::{cmp, io};
use libredox::errno::EOPNOTSUPP;
use libredox::flag::O_NONBLOCK;
use libredox::Fd;
use redox_scheme::{
CallRequest, CallerCtx, OpenResult, RequestKind, Response, SchemeBlockMut, SignalBehavior,
Socket,
CallRequest, CallerCtx, OpenResult, RequestKind, Response, SchemeBlock, SignalBehavior, Socket,
};
use syscall::schemev2::NewFdFlags;
use syscall::{
@@ -85,10 +85,10 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
// Handle any blocked requests
let mut i = 0;
while i < self.blocked.len() {
if let Some(resp) = self.blocked[i].handle_scheme_block_mut(self) {
if let Some(resp) = self.blocked[i].handle_scheme_block(self) {
self.socket
.write_response(resp, SignalBehavior::Restart)
.expect("vesad: failed to write display scheme");
.expect("driver-network: failed to write scheme");
self.blocked.remove(i);
} else {
i += 1;
@@ -109,12 +109,18 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
match request.kind() {
RequestKind::Call(call_request) => {
if let Some(resp) = call_request.handle_scheme_block_mut(self) {
if let Some(resp) = call_request.handle_scheme_block(self) {
self.socket.write_response(resp, SignalBehavior::Restart)?;
} else {
self.blocked.push(call_request);
}
}
RequestKind::SendFd(sendfd_request) => {
self.socket.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)?;
}
RequestKind::Cancellation(cancellation_request) => {
if let Some(i) = self
.blocked
@@ -146,7 +152,7 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
}
}
impl<T: NetworkAdapter> SchemeBlockMut for NetworkScheme<T> {
impl<T: NetworkAdapter> SchemeBlock for NetworkScheme<T> {
fn xopen(
&mut self,
path: &str,
+2 -3
View File
@@ -2,7 +2,7 @@
use std::convert::TryInto;
use std::fs::File;
use std::io::{Read, Write};
use std::io::{Read, Write};
use std::os::unix::io::AsRawFd;
use std::ptr::NonNull;
@@ -218,8 +218,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
}
let event_queue =
EventQueue::<Source>::new().expect("rtl8139d: Could not create event queue.");
let event_queue = EventQueue::<Source>::new().expect("rtl8139d: Could not create event queue.");
event_queue
.subscribe(
irq_file.as_raw_fd() as usize,
+5 -6
View File
@@ -10,7 +10,7 @@ use std::usize;
use event::{EventFlags, RawEventQueue};
use pcid_interface::PciFunctionHandle;
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use syscall::error::{Error, ENODEV};
use log::{error, info};
@@ -53,8 +53,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
.as_ptr() as usize;
{
let scheme_name = format!("disk.{}", name);
let socket =
Socket::<V2>::nonblock(&scheme_name).expect("ahcid: failed to create disk scheme");
let socket = Socket::nonblock(&scheme_name).expect("ahcid: failed to create disk scheme");
let mut irq_file = irq.irq_handle("ahcid");
let irq_fd = irq_file.as_raw_fd() as usize;
@@ -109,7 +108,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
};
if let Some(response) = sqe.handle_scheme_block_mut(&mut scheme) {
if let Some(response) = sqe.handle_scheme_block(&mut scheme) {
// TODO: handle full CQE?
socket
.write_response(response, SignalBehavior::Restart)
@@ -133,7 +132,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
// Handle todos in order to finish previous packets if possible
let mut i = 0;
while i < todo.len() {
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
let _sqe = todo.remove(i);
socket
.write_response(resp, SignalBehavior::Restart)
@@ -151,7 +150,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
// Handle todos to start new packets if possible
let mut i = 0;
while i < todo.len() {
if let Some(response) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(response) = todo[i].handle_scheme_block(&mut scheme) {
let _sqe = todo.remove(i);
socket
.write_response(response, SignalBehavior::Restart)
+2 -2
View File
@@ -4,7 +4,7 @@ use std::str;
use common::io::Io as _;
use driver_block::{Disk, DiskWrapper};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
use syscall::schemev2::NewFdFlags;
use syscall::{
Error, Result, Stat, EACCES, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOVERFLOW, MODE_DIR,
@@ -96,7 +96,7 @@ impl DiskScheme {
}
}
impl SchemeBlockMut for DiskScheme {
impl SchemeBlock for DiskScheme {
fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
if ctx.uid != 0 {
return Err(Error::new(EACCES));
+4 -4
View File
@@ -9,7 +9,7 @@ use std::{
use driver_block::Disk;
use event::{EventFlags, RawEventQueue};
use fdt::{node::FdtNode, Fdt};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use syscall::{
data::{Event, Packet},
error::{Error, ENODEV},
@@ -115,7 +115,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
let scheme_name = "disk.mmc";
let socket_fd = Socket::<V2>::create(&scheme_name).expect("mmcd: failed to create disk scheme");
let socket_fd = Socket::create(&scheme_name).expect("mmcd: failed to create disk scheme");
let mut event_queue = RawEventQueue::new().expect("mmcd: failed to open event file");
event_queue
@@ -158,7 +158,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
}
};
if let Some(resp) = req.handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = req.handle_scheme_block(&mut scheme) {
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("mmcd: failed to write disk scheme");
@@ -173,7 +173,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
// Handle todos to start new packets if possible
let mut i = 0;
while i < todo.len() {
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("mmcd: failed to write disk scheme");
+2 -2
View File
@@ -10,7 +10,7 @@ use syscall::{
MODE_FILE, O_DIRECTORY, O_STAT,
};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
#[derive(Clone)]
enum Handle {
@@ -70,7 +70,7 @@ impl DiskScheme {
}
}
impl SchemeBlockMut for DiskScheme {
impl SchemeBlock for DiskScheme {
fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
if ctx.uid == 0 {
let path_str = path.trim_matches('/');
+6 -7
View File
@@ -4,7 +4,7 @@ use event::{EventFlags, RawEventQueue};
use libredox::flag;
use log::{error, info};
use pcid_interface::{PciBar, PciFunctionHandle};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use std::{
fs::File,
io::{ErrorKind, Read, Write},
@@ -200,8 +200,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
let scheme_name = format!("disk.{}", name);
let socket_fd =
Socket::<V2>::nonblock(&scheme_name).expect("ided: failed to create disk scheme");
let socket_fd = Socket::nonblock(&scheme_name).expect("ided: failed to create disk scheme");
let primary_irq_fd = libredox::call::open(
&format!("/scheme/irq/{}", primary_irq),
@@ -267,7 +266,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
}
};
if let Some(resp) = req.handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = req.handle_scheme_block(&mut scheme) {
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("ided: failed to write disk scheme");
@@ -290,7 +289,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
// Handle todos in order to finish previous packets if possible
let mut i = 0;
while i < todo.len() {
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("ided: failed to write disk scheme");
@@ -315,7 +314,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
// Handle todos in order to finish previous packets if possible
let mut i = 0;
while i < todo.len() {
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("ided: failed to write disk scheme");
@@ -332,7 +331,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
// Handle todos to start new packets if possible
let mut i = 0;
while i < todo.len() {
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("ided: failed to write disk scheme");
+2 -2
View File
@@ -11,7 +11,7 @@ use syscall::{
};
use crate::ide::Channel;
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
#[derive(Clone)]
enum Handle {
@@ -83,7 +83,7 @@ impl DiskScheme {
}
}
impl SchemeBlockMut for DiskScheme {
impl SchemeBlock for DiskScheme {
fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
if ctx.uid == 0 {
let path_str = path.trim_matches('/');
+4 -4
View File
@@ -9,7 +9,7 @@ use std::str;
use libredox::call::MmapArgs;
use libredox::flag;
use redox_scheme::{CallerCtx, OpenResult, RequestKind, SchemeMut, SignalBehavior, Socket, V2};
use redox_scheme::{CallerCtx, OpenResult, RequestKind, Scheme, SignalBehavior, Socket};
use syscall::data::Stat;
use syscall::error::*;
@@ -97,7 +97,7 @@ impl DiskScheme {
}
}
impl SchemeMut for DiskScheme {
impl Scheme for DiskScheme {
fn fsize(&mut self, id: usize) -> Result<u64> {
Ok(
match HandleType::try_from_raw(id).ok_or(Error::new(EBADF))? {
@@ -195,7 +195,7 @@ impl SchemeMut for DiskScheme {
}
fn main() -> anyhow::Result<()> {
redox_daemon::Daemon::new(move |daemon| {
let socket_fd = Socket::<V2>::create("disk.live").expect("failed to open scheme");
let socket_fd = Socket::create("disk.live").expect("failed to open scheme");
let mut scheme = DiskScheme::new().unwrap_or_else(|err| {
eprintln!("failed to initialize livedisk scheme: {}", err);
std::process::exit(1)
@@ -216,7 +216,7 @@ fn main() -> anyhow::Result<()> {
}
None => break,
};
let resp = req.handle_scheme_mut(&mut scheme);
let resp = req.handle_scheme(&mut scheme);
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("failed to write packet");
+3 -3
View File
@@ -12,7 +12,7 @@ use std::{slice, usize};
use libredox::flag;
use pcid_interface::{PciFeature, PciFeatureInfo, PciFunction, PciFunctionHandle};
use redox_scheme::{CallRequest, RequestKind, SignalBehavior, Socket, V2};
use redox_scheme::{CallRequest, RequestKind, SignalBehavior, Socket};
use syscall::{Event, Packet, Result, SchemeBlockMut, PAGE_SIZE};
use self::nvme::{InterruptMethod, InterruptSources, Nvme};
@@ -170,7 +170,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
let address = unsafe { pcid_handle.map_bar(0).expect("nvmed").ptr };
let socket = Socket::<V2>::create(&scheme_name).expect("nvmed: failed to create disk scheme");
let socket = Socket::create(&scheme_name).expect("nvmed: failed to create disk scheme");
daemon.ready().expect("nvmed: failed to signal readiness");
@@ -220,7 +220,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
let mut i = 0;
while i < todo.len() {
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
let _req = todo.remove(i);
socket
.write_response(resp, SignalBehavior::Restart)
+2 -2
View File
@@ -6,7 +6,7 @@ use std::io::prelude::*;
use std::sync::Arc;
use std::{cmp, str};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
use syscall::schemev2::NewFdFlags;
use syscall::{
Error, Result, Stat, EACCES, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOVERFLOW, MODE_DIR,
@@ -192,7 +192,7 @@ impl DiskScheme {
}
}
impl SchemeBlockMut for DiskScheme {
impl SchemeBlock for DiskScheme {
fn xopen(
&mut self,
path_str: &str,
+3 -3
View File
@@ -1,6 +1,6 @@
use std::env;
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use xhcid_interface::{ConfigureEndpointsReq, XhciClientHandle};
pub mod protocol;
@@ -83,7 +83,7 @@ fn daemon(daemon: redox_daemon::Daemon, scheme: String, port: usize, protocol: u
// TODO: Let all of the USB drivers fork or be managed externally, and xhcid won't have to keep
// track of all the drivers.
let socket_fd =
Socket::<V2>::create(&disk_scheme_name).expect("usbscsid: failed to create disk scheme");
Socket::create(&disk_scheme_name).expect("usbscsid: failed to create disk scheme");
//libredox::call::setrens(0, 0).expect("scsid: failed to enter null namespace");
let mut scsi = Scsi::new(&mut *protocol).expect("usbscsid: failed to setup SCSI");
@@ -109,7 +109,7 @@ fn daemon(daemon: redox_daemon::Daemon, scheme: String, port: usize, protocol: u
}
None => break,
};
let resp = req.handle_scheme_mut(&mut scsi_scheme);
let resp = req.handle_scheme(&mut scsi_scheme);
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("scsid: failed to write cqe");
+2 -2
View File
@@ -4,7 +4,7 @@ use std::{cmp, str};
use crate::protocol::Protocol;
use crate::scsi::Scsi;
use redox_scheme::{CallerCtx, OpenResult, SchemeMut};
use redox_scheme::{CallerCtx, OpenResult, Scheme};
use syscall::error::{Error, Result};
use syscall::error::{EACCES, EBADF, EINVAL, EIO, ENOENT, ENOSYS};
use syscall::flag::{MODE_CHR, MODE_DIR};
@@ -39,7 +39,7 @@ impl<'a> ScsiScheme<'a> {
}
}
impl SchemeMut for ScsiScheme<'_> {
impl Scheme for ScsiScheme<'_> {
fn xopen(&mut self, path_str: &str, flags: usize, ctx: &CallerCtx) -> Result<OpenResult> {
if ctx.uid != 0 {
return Err(Error::new(EACCES));
+3 -5
View File
@@ -7,7 +7,7 @@ use std::os::fd::{FromRawFd, RawFd};
use std::sync::{Arc, Weak};
use libredox::flag;
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use static_assertions::const_assert_eq;
use pcid_interface::*;
@@ -147,7 +147,7 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
let scheme_name = format!("disk.{}", name);
let socket_fd = Socket::<V2>::create(&scheme_name).map_err(Error::SyscallError)?;
let socket_fd = Socket::create(&scheme_name).map_err(Error::SyscallError)?;
let mut scheme = scheme::DiskScheme::new(queue, device_space);
@@ -167,9 +167,7 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
}
None => break,
};
let resp = req
.handle_scheme_block_mut(&mut scheme)
.expect("TODO: block?");
let resp = req.handle_scheme_block(&mut scheme).expect("TODO: block?");
socket_fd
.write_response(resp, SignalBehavior::Restart)
.expect("virtio-blkd: failed to write to disk scheme");
+2 -2
View File
@@ -13,7 +13,7 @@ use partitionlib::PartitionTable;
use redox_scheme::CallerCtx;
use redox_scheme::OpenResult;
use redox_scheme::SchemeBlockMut;
use redox_scheme::SchemeBlock;
use syscall::error::*;
use syscall::flag::*;
use syscall::schemev2::NewFdFlags;
@@ -201,7 +201,7 @@ impl<'a> DiskScheme<'a> {
}
}
impl<'a> SchemeBlockMut for DiskScheme<'a> {
impl<'a> SchemeBlock for DiskScheme<'a> {
fn xopen(
&mut self,
path: &str,