From 5d76acfd745aaae8279cbe780822ac44da5bad71 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:32:39 +0100 Subject: [PATCH] Update to redox-scheme 0.4 --- Cargo.lock | 29 +++++++++---------------- acpid/Cargo.toml | 2 +- acpid/src/main.rs | 26 ++++++++++++----------- acpid/src/scheme.rs | 10 ++++----- graphics/bgad/Cargo.toml | 2 +- graphics/bgad/src/main.rs | 32 +++++++++------------------- graphics/bgad/src/scheme.rs | 8 +++---- graphics/driver-graphics/Cargo.toml | 2 +- graphics/driver-graphics/src/lib.rs | 33 ++++++++++++----------------- graphics/fbbootlogd/Cargo.toml | 2 +- graphics/fbbootlogd/src/main.rs | 28 ++++++++---------------- graphics/fbbootlogd/src/scheme.rs | 8 +++---- graphics/fbcond/Cargo.toml | 2 +- graphics/fbcond/src/main.rs | 18 ++++------------ graphics/fbcond/src/scheme.rs | 7 +++--- inputd/Cargo.toml | 2 +- inputd/src/main.rs | 23 +++++++++----------- net/driver-network/Cargo.toml | 2 +- net/driver-network/src/lib.rs | 19 ++++++----------- storage/driver-block/Cargo.toml | 2 +- storage/driver-block/src/lib.rs | 26 +++++++++-------------- xhcid/Cargo.toml | 2 +- xhcid/src/main.rs | 17 ++++----------- xhcid/src/xhci/scheme.rs | 10 ++++----- 24 files changed, 121 insertions(+), 191 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d7cd2c0362..476cf221e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,7 +32,7 @@ dependencies = [ "parking_lot 0.12.3", "plain", "redox-daemon", - "redox-scheme 0.3.0", + "redox-scheme", "redox_event", "redox_syscall", "ron", @@ -193,7 +193,7 @@ dependencies = [ "orbclient", "pcid", "redox-daemon", - "redox-scheme 0.3.0", + "redox-scheme", "redox_syscall", ] @@ -393,7 +393,7 @@ version = "0.1.0" dependencies = [ "libredox", "partitionlib", - "redox-scheme 0.3.0", + "redox-scheme", "redox_syscall", ] @@ -406,7 +406,7 @@ dependencies = [ "inputd", "libredox", "log", - "redox-scheme 0.3.0", + "redox-scheme", "redox_syscall", ] @@ -415,7 +415,7 @@ name = "driver-network" version = "0.1.0" dependencies = [ "libredox", - "redox-scheme 0.3.0", + "redox-scheme", "redox_syscall", ] @@ -450,7 +450,7 @@ dependencies = [ "orbclient", "ransid", "redox-daemon", - "redox-scheme 0.3.0", + "redox-scheme", "redox_event", "redox_syscall", ] @@ -466,7 +466,7 @@ dependencies = [ "orbclient", "ransid", "redox-daemon", - "redox-scheme 0.3.0", + "redox-scheme", "redox_event", "redox_syscall", ] @@ -720,7 +720,7 @@ dependencies = [ "log", "orbclient", "redox-daemon", - "redox-scheme 0.3.0", + "redox-scheme", "redox_syscall", ] @@ -965,7 +965,7 @@ dependencies = [ "pico-args", "plain", "redox-daemon", - "redox-scheme 0.4.0", + "redox-scheme", "redox_syscall", "serde", ] @@ -1115,15 +1115,6 @@ dependencies = [ "termion", ] -[[package]] -name = "redox-scheme" -version = "0.3.0" -source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#d2bfa80a1072facb2662d0bc73656247f0b254b4" -dependencies = [ - "libredox", - "redox_syscall", -] - [[package]] name = "redox-scheme" version = "0.4.0" @@ -1924,7 +1915,7 @@ dependencies = [ "pcid", "plain", "redox-daemon", - "redox-scheme 0.3.0", + "redox-scheme", "redox_event", "redox_syscall", "regex", diff --git a/acpid/Cargo.toml b/acpid/Cargo.toml index cf55061667..a7ee63043c 100644 --- a/acpid/Cargo.toml +++ b/acpid/Cargo.toml @@ -23,5 +23,5 @@ ron = "0.8.1" amlserde = { path = "../amlserde" } common = { path = "../common" } libredox = "0.1.3" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" arrayvec = "0.7.6" diff --git a/acpid/src/main.rs b/acpid/src/main.rs index 0b846b54b7..acae764017 100644 --- a/acpid/src/main.rs +++ b/acpid/src/main.rs @@ -91,18 +91,12 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { if event.fd == socket.inner().raw() { loop { - let sqe = match socket.next_request(SignalBehavior::Interrupt) { + let req = match socket.next_request(SignalBehavior::Interrupt) { Ok(None) => { mounted = false; break; } - Ok(Some(s)) => { - if let RequestKind::Call(call) = s.kind() { - call - } else { - continue; - } - } + Ok(Some(req)) => req, Err(err) => { if err.errno == EWOULDBLOCK || err.errno == EAGAIN { break; @@ -112,10 +106,18 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { } }; - let response = sqe.handle_scheme(&mut scheme); - socket - .write_response(response, SignalBehavior::Restart) - .expect("acpid: failed to write response"); + match req.kind() { + RequestKind::Call(call) => { + let response = call.handle_scheme(&mut scheme); + socket + .write_response(response, SignalBehavior::Restart) + .expect("acpid: failed to write response"); + } + RequestKind::OnClose { id } => { + scheme.on_close(id); + } + _ => (), + } } } else if event.fd == shutdown_pipe.as_raw_fd() as usize { log::info!("Received shutdown request from kernel."); diff --git a/acpid/src/scheme.rs b/acpid/src/scheme.rs index 19ab3d7454..a380a33dca 100644 --- a/acpid/src/scheme.rs +++ b/acpid/src/scheme.rs @@ -343,12 +343,10 @@ impl Scheme for AcpiScheme<'_> { fn write(&mut self, _id: usize, _buf: &[u8], _offset: u64, _fcntl: u32) -> Result { Err(Error::new(EBADF)) } +} - fn close(&mut self, id: usize) -> Result { - if self.handles.remove(&id).is_none() { - return Err(Error::new(EBADF)); - } - - Ok(0) +impl AcpiScheme<'_> { + pub fn on_close(&mut self, id: usize) { + self.handles.remove(&id); } } diff --git a/graphics/bgad/Cargo.toml b/graphics/bgad/Cargo.toml index 19e7d08bb7..894f414377 100644 --- a/graphics/bgad/Cargo.toml +++ b/graphics/bgad/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] orbclient = "0.3.47" redox-daemon = "0.1" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" redox_syscall = "0.5" common = { path = "../../common" } diff --git a/graphics/bgad/src/main.rs b/graphics/bgad/src/main.rs index b814bc772b..9fde996ac2 100644 --- a/graphics/bgad/src/main.rs +++ b/graphics/bgad/src/main.rs @@ -1,8 +1,7 @@ use inputd::ProducerHandle; use pcid_interface::PciFunctionHandle; -use redox_scheme::{RequestKind, Response, SignalBehavior, Socket}; +use redox_scheme::{RequestKind, SignalBehavior, Socket}; use syscall::call::iopl; -use syscall::EOPNOTSUPP; use crate::bga::Bga; use crate::scheme::BgaScheme; @@ -41,34 +40,23 @@ fn main() { loop { let Some(request) = socket .next_request(SignalBehavior::Restart) - .expect("bgad: failed to read scheme") + .expect("bgad: failed to get next scheme request") else { // Scheme likely got unmounted std::process::exit(0); }; - match request.kind() { - RequestKind::Call(call_request) => { - let resp = call_request.handle_scheme(&mut scheme); + RequestKind::Call(call) => { + let response = call.handle_scheme(&mut scheme); + socket - .write_response(resp, SignalBehavior::Restart) - .expect("bgad: failed to write display scheme"); + .write_responses(&[response], SignalBehavior::Restart) + .expect("bgad: failed to write next scheme response"); } - RequestKind::SendFd(sendfd_request) => { - socket - .write_response( - Response::for_sendfd( - &sendfd_request, - Err(syscall::Error::new(EOPNOTSUPP)), - ), - SignalBehavior::Restart, - ) - .expect("bgad: failed to write response"); - } - RequestKind::Cancellation(_cancellation_request) => {} - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => { - unreachable!() + RequestKind::OnClose { id } => { + scheme.on_close(id); } + _ => (), } } }) diff --git a/graphics/bgad/src/scheme.rs b/graphics/bgad/src/scheme.rs index 02b197d060..14ad5a6cb9 100644 --- a/graphics/bgad/src/scheme.rs +++ b/graphics/bgad/src/scheme.rs @@ -97,8 +97,8 @@ impl Scheme for BgaScheme { fn fcntl(&mut self, _id: usize, _cmd: usize, _arg: usize) -> Result { Ok(0) } - - fn close(&mut self, _file: usize) -> Result { - Ok(0) - } +} + +impl BgaScheme { + pub fn on_close(&mut self, _id: usize) {} } diff --git a/graphics/driver-graphics/Cargo.toml b/graphics/driver-graphics/Cargo.toml index 6ad15add9d..a1525e23f2 100644 --- a/graphics/driver-graphics/Cargo.toml +++ b/graphics/driver-graphics/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] log = "0.4" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" redox_syscall = "0.5" libredox = "0.1.3" diff --git a/graphics/driver-graphics/src/lib.rs b/graphics/driver-graphics/src/lib.rs index ac31cdcf12..cfe0089928 100644 --- a/graphics/driver-graphics/src/lib.rs +++ b/graphics/driver-graphics/src/lib.rs @@ -3,9 +3,8 @@ use std::io; use graphics_ipc::v1::Damage; use inputd::{VtEvent, VtEventKind}; -use libredox::errno::EOPNOTSUPP; use libredox::Fd; -use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket}; +use redox_scheme::{RequestKind, Scheme, SignalBehavior, Socket}; use syscall::{Error, MapFlags, Result, EAGAIN, EBADF, EINVAL}; pub trait GraphicsAdapter { @@ -118,22 +117,16 @@ impl GraphicsScheme { }; match request.kind() { - RequestKind::Call(call_request) => { - let resp = call_request.handle_scheme(self); + RequestKind::Call(call) => { + let response = call.handle_scheme(self); self.socket - .write_response(resp, SignalBehavior::Restart) - .expect("driver-graphics: failed to write display scheme"); + .write_response(response, SignalBehavior::Restart) + .expect("driver-graphics: failed to write response"); } - RequestKind::SendFd(sendfd_request) => { - self.socket.write_response( - Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))), - SignalBehavior::Restart, - )?; - } - RequestKind::Cancellation(_cancellation_request) => {} - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => { - unreachable!() + RequestKind::OnClose { id } => { + self.on_close(id); } + _ => (), } } @@ -246,10 +239,6 @@ impl Scheme for GraphicsScheme { Ok(buf.len()) } - fn close(&mut self, id: usize) -> syscall::Result { - self.handles.remove(&id).ok_or(Error::new(EBADF))?; - Ok(0) - } fn mmap_prep( &mut self, id: usize, @@ -265,3 +254,9 @@ impl Scheme for GraphicsScheme { Ok(ptr as usize) } } + +impl GraphicsScheme { + fn on_close(&mut self, id: usize) { + self.handles.remove(&id); + } +} diff --git a/graphics/fbbootlogd/Cargo.toml b/graphics/fbbootlogd/Cargo.toml index b05978513e..a4707c8640 100644 --- a/graphics/fbbootlogd/Cargo.toml +++ b/graphics/fbbootlogd/Cargo.toml @@ -9,7 +9,7 @@ ransid = "0.4" redox_event = "0.4" redox_syscall = "0.5" redox-daemon = "0.1" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" console-draw = { path = "../console-draw" } graphics-ipc = { path = "../graphics-ipc" } diff --git a/graphics/fbbootlogd/src/main.rs b/graphics/fbbootlogd/src/main.rs index 8584718c5d..1b0d941362 100644 --- a/graphics/fbbootlogd/src/main.rs +++ b/graphics/fbbootlogd/src/main.rs @@ -9,8 +9,7 @@ //! to get new input. Fbbootlogd does all blocking operations in background threads such that the //! main thread will always keep accepting new input and writing it to the framebuffer. -use libredox::errno::EOPNOTSUPP; -use redox_scheme::{RequestKind, Response, SignalBehavior, Socket}; +use redox_scheme::{RequestKind, SignalBehavior, Socket}; use crate::scheme::FbbootlogScheme; @@ -45,26 +44,17 @@ fn inner(daemon: redox_daemon::Daemon) -> ! { }; match request.kind() { - RequestKind::Call(call_request) => { + RequestKind::Call(call) => { + let response = call.handle_scheme(&mut scheme); + socket - .write_response( - call_request.handle_scheme(&mut scheme), - SignalBehavior::Restart, - ) - .expect("fbbootlogd: failed to write display scheme"); + .write_responses(&[response], SignalBehavior::Restart) + .expect("pcid: failed to write next scheme response"); } - 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!() + RequestKind::OnClose { id } => { + scheme.on_close(id); } + _ => (), } } } diff --git a/graphics/fbbootlogd/src/scheme.rs b/graphics/fbbootlogd/src/scheme.rs index 1cf0adb5c3..9fa087f0fa 100644 --- a/graphics/fbbootlogd/src/scheme.rs +++ b/graphics/fbbootlogd/src/scheme.rs @@ -73,8 +73,8 @@ impl Scheme for FbbootlogScheme { Ok(buf.len()) } - - fn close(&mut self, _id: usize) -> Result { - Ok(0) - } +} + +impl FbbootlogScheme { + pub fn on_close(&mut self, _id: usize) {} } diff --git a/graphics/fbcond/Cargo.toml b/graphics/fbcond/Cargo.toml index 10fc0ebf37..6e8816cfaa 100644 --- a/graphics/fbcond/Cargo.toml +++ b/graphics/fbcond/Cargo.toml @@ -9,7 +9,7 @@ ransid = "0.4" redox_event = "0.4" redox_syscall = "0.5" redox-daemon = "0.1" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" console-draw = { path = "../console-draw" } graphics-ipc = { path = "../graphics-ipc" } diff --git a/graphics/fbcond/src/main.rs b/graphics/fbcond/src/main.rs index 2b70ddc0ce..6c4c5c2214 100644 --- a/graphics/fbcond/src/main.rs +++ b/graphics/fbcond/src/main.rs @@ -1,5 +1,5 @@ use event::EventQueue; -use libredox::errno::{EAGAIN, EINTR, EOPNOTSUPP, ESTALE}; +use libredox::errno::{EAGAIN, EINTR, ESTALE}; use orbclient::Event; use redox_scheme::{CallRequest, RequestKind, Response, SignalBehavior, Socket}; use std::os::fd::{AsRawFd, BorrowedFd}; @@ -105,16 +105,8 @@ fn handle_event( 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::OnClose { id } => { + scheme.on_close(id); } RequestKind::Cancellation(cancellation_request) => { if let Some(i) = blocked @@ -128,9 +120,7 @@ fn handle_event( .expect("vesad: failed to write display scheme"); } } - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => { - unreachable!() - } + _ => {} } } } diff --git a/graphics/fbcond/src/scheme.rs b/graphics/fbcond/src/scheme.rs index 0643b11223..dd4c957e01 100644 --- a/graphics/fbcond/src/scheme.rs +++ b/graphics/fbcond/src/scheme.rs @@ -161,9 +161,10 @@ impl SchemeBlock for FbconScheme { Err(Error::new(EBADF)) } } +} - fn close(&mut self, id: usize) -> Result> { - self.handles.remove(&id).ok_or(Error::new(EBADF))?; - Ok(Some(0)) +impl FbconScheme { + pub fn on_close(&mut self, id: usize) { + self.handles.remove(&id); } } diff --git a/inputd/Cargo.toml b/inputd/Cargo.toml index c3cb227a08..cf1de6546e 100644 --- a/inputd/Cargo.toml +++ b/inputd/Cargo.toml @@ -13,4 +13,4 @@ orbclient = "0.3.27" libredox = "0.1.3" common = { path = "../common" } -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" diff --git a/inputd/src/main.rs b/inputd/src/main.rs index e8cb36a138..d69aa81ef5 100644 --- a/inputd/src/main.rs +++ b/inputd/src/main.rs @@ -18,8 +18,8 @@ use std::sync::atomic::{AtomicUsize, Ordering}; use inputd::{VtActivate, VtEvent, VtEventKind}; -use libredox::errno::{EOPNOTSUPP, ESTALE}; -use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket}; +use libredox::errno::ESTALE; +use redox_scheme::{RequestKind, Scheme, SignalBehavior, Socket}; use orbclient::{Event, EventOption}; use syscall::{Error as SysError, EventFlags, EINVAL}; @@ -457,11 +457,13 @@ impl Scheme for InputScheme { } } } +} - fn close(&mut self, id: usize) -> syscall::Result { - let handle = self.handles.get(&id).ok_or(SysError::new(EINVAL))?; +impl InputScheme { + fn on_close(&mut self, id: usize) { + let handle = self.handles.remove(&id).unwrap(); - match *handle { + match handle { Handle::Consumer { vt, .. } => { self.vts.remove(&vt); if self.active_vt == Some(vt) { @@ -474,7 +476,6 @@ impl Scheme for InputScheme { } _ => {} } - Ok(0) } } @@ -499,14 +500,10 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> { SignalBehavior::Restart, )?; } - RequestKind::SendFd(sendfd_request) => { - socket_file.write_response( - Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))), - SignalBehavior::Restart, - )?; + RequestKind::OnClose { id } => { + scheme.on_close(id); } - RequestKind::Cancellation(_cancellation_request) => {} - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => unreachable!(), + _ => {} } if !scheme.has_new_events { diff --git a/net/driver-network/Cargo.toml b/net/driver-network/Cargo.toml index 524abbffe3..665df4f60e 100644 --- a/net/driver-network/Cargo.toml +++ b/net/driver-network/Cargo.toml @@ -5,5 +5,5 @@ edition = "2021" [dependencies] libredox = "0.1.3" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" redox_syscall = { version = "0.5", features = ["std"] } diff --git a/net/driver-network/src/lib.rs b/net/driver-network/src/lib.rs index d811464b70..339a195cc9 100644 --- a/net/driver-network/src/lib.rs +++ b/net/driver-network/src/lib.rs @@ -1,7 +1,6 @@ use std::collections::BTreeMap; use std::{cmp, io}; -use libredox::errno::EOPNOTSUPP; use libredox::flag::O_NONBLOCK; use libredox::Fd; use redox_scheme::{ @@ -114,11 +113,8 @@ impl NetworkScheme { 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::OnClose { id } => { + self.on_close(id); } RequestKind::Cancellation(cancellation_request) => { if let Some(i) = self @@ -131,9 +127,7 @@ impl NetworkScheme { self.socket.write_response(resp, SignalBehavior::Restart)?; } } - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => { - unreachable!() - } + _ => {} } } @@ -282,9 +276,10 @@ impl SchemeBlock for NetworkScheme { let _handle = self.handles.get(&id).ok_or(Error::new(EBADF))?; Ok(Some(0)) } +} - fn close(&mut self, id: usize) -> Result> { - self.handles.remove(&id).ok_or(Error::new(EBADF))?; - Ok(Some(0)) +impl NetworkScheme { + fn on_close(&mut self, id: usize) { + self.handles.remove(&id); } } diff --git a/storage/driver-block/Cargo.toml b/storage/driver-block/Cargo.toml index 1645bf0314..00e10150bb 100644 --- a/storage/driver-block/Cargo.toml +++ b/storage/driver-block/Cargo.toml @@ -8,4 +8,4 @@ partitionlib = { path = "../partitionlib" } libredox = "0.1.3" redox_syscall = "0.5" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" diff --git a/storage/driver-block/src/lib.rs b/storage/driver-block/src/lib.rs index d3569febcb..6efe0f5c2c 100644 --- a/storage/driver-block/src/lib.rs +++ b/storage/driver-block/src/lib.rs @@ -9,12 +9,12 @@ use std::str; use libredox::Fd; use partitionlib::{LogicalBlockSize, PartitionTable}; use redox_scheme::{ - CallRequest, CallerCtx, OpenResult, RequestKind, Response, SchemeBlock, SignalBehavior, Socket, + CallRequest, CallerCtx, OpenResult, RequestKind, SchemeBlock, SignalBehavior, Socket, }; use syscall::schemev2::NewFdFlags; use syscall::{ - Error, Result, Stat, EACCES, EAGAIN, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOPNOTSUPP, - EOVERFLOW, MODE_DIR, MODE_FILE, O_DIRECTORY, O_STAT, + Error, Result, Stat, EACCES, EAGAIN, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOVERFLOW, + MODE_DIR, MODE_FILE, O_DIRECTORY, O_STAT, }; /// Split the read operation into a series of block reads. @@ -330,18 +330,13 @@ impl DiskScheme { 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::OnClose { id } => { + self.on_close(id); } RequestKind::Cancellation(_cancellation_request) => { // FIXME implement cancellation } - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => { - unreachable!() - } + _ => {} } } @@ -610,11 +605,10 @@ impl SchemeBlock for DiskScheme { }, )) } +} - fn close(&mut self, id: usize) -> Result> { - self.handles - .remove(&id) - .ok_or(Error::new(EBADF)) - .and(Ok(Some(0))) +impl DiskScheme { + fn on_close(&mut self, id: usize) { + self.handles.remove(&id); } } diff --git a/xhcid/Cargo.toml b/xhcid/Cargo.toml index f36753e9e7..95eb88ddee 100644 --- a/xhcid/Cargo.toml +++ b/xhcid/Cargo.toml @@ -21,7 +21,7 @@ lazy_static = "1.4" log = "0.4" redox-daemon = "0.1" redox_event = "0.4.1" -redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-scheme = "0.4" redox_syscall = "0.5" serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/xhcid/src/main.rs b/xhcid/src/main.rs index 74e1ef3454..a7a2d86e9a 100644 --- a/xhcid/src/main.rs +++ b/xhcid/src/main.rs @@ -37,8 +37,7 @@ use pcid_interface::{ MsiSetFeatureInfo, PciFeature, PciFeatureInfo, PciFunctionHandle, SetFeatureInfo, }; -use redox_scheme::{RequestKind, Response, SignalBehavior, Socket}; -use syscall::EOPNOTSUPP; +use redox_scheme::{RequestKind, SignalBehavior, Socket}; use crate::xhci::{InterruptMethod, Xhci}; @@ -216,18 +215,10 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { .write_response(resp, SignalBehavior::Restart) .expect("xhcid: failed to write scheme"); } - RequestKind::SendFd(sendfd_request) => { - socket - .write_response( - Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))), - SignalBehavior::Restart, - ) - .expect("xhcid: failed to write response"); - } - RequestKind::Cancellation(_cancellation_request) => {} - RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => { - unreachable!() + RequestKind::OnClose { id } => { + hci.on_close(id); } + _ => {} } } } diff --git a/xhcid/src/xhci/scheme.rs b/xhcid/src/xhci/scheme.rs index 1b3944ea15..36190e834c 100644 --- a/xhcid/src/xhci/scheme.rs +++ b/xhcid/src/xhci/scheme.rs @@ -2163,14 +2163,12 @@ impl Scheme for &Xhci { _ => Err(Error::new(EBADF)), } } - fn close(&mut self, fd: usize) -> Result { - if self.handles.remove(&fd).is_none() { - return Err(Error::new(EBADF)); - } - Ok(0) - } } impl Xhci { + pub fn on_close(&self, fd: usize) { + self.handles.remove(&fd); + } + pub fn get_endp_status(&self, port_num: usize, endp_num: u8) -> Result { let port_state = self.port_states.get(&port_num).ok_or(Error::new(EBADFD))?;