V2 scheme.
This commit is contained in:
Generated
+10
-10
@@ -4,9 +4,9 @@ version = 3
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.4.2"
|
||||
version = "2.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
|
||||
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
|
||||
|
||||
[[package]]
|
||||
name = "ipcd"
|
||||
@@ -21,15 +21,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.153"
|
||||
version = "0.2.158"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
|
||||
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
|
||||
|
||||
[[package]]
|
||||
name = "libredox"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "309ba69985d5170852ebbe8fbb33850d20794d0aed5b210dfea2db798df64e10"
|
||||
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"libc",
|
||||
@@ -48,9 +48,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox-scheme"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a4d4161697395d7cc9b182a14a753b2ba0243dcf622e278e644c6e7f74904c1"
|
||||
checksum = "2148c23b7ed5bf1cc3919b4830e4bf2a674a5d3691c619317624ccd78d13a3ac"
|
||||
dependencies = [
|
||||
"libredox",
|
||||
"redox_syscall",
|
||||
@@ -68,9 +68,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.0"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13c178f952cc7eac391f3124bd9851d1ac0bdbc4c9de2d892ccd5f0d8b160e96"
|
||||
checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
+2
-2
@@ -4,8 +4,8 @@ name = "ipcd"
|
||||
version = "0.1.0"
|
||||
|
||||
[dependencies]
|
||||
libredox = "0.1.2"
|
||||
libredox = "0.1.3"
|
||||
redox-daemon = "0.1.2"
|
||||
redox_syscall = "0.5"
|
||||
redox-scheme = "0.2.0"
|
||||
redox-scheme = "0.2.1"
|
||||
redox_event = "0.4.0"
|
||||
|
||||
+6
-6
@@ -3,7 +3,7 @@ use std::{
|
||||
collections::{HashMap, VecDeque},
|
||||
};
|
||||
use syscall::{flag::*, error::*, Error};
|
||||
use redox_scheme::SchemeBlockMut;
|
||||
use redox_scheme::{SchemeBlockMut, V2};
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct Client {
|
||||
@@ -100,7 +100,7 @@ impl ChanScheme {
|
||||
handles: HashMap::new(),
|
||||
listeners: HashMap::new(),
|
||||
next_id: 0,
|
||||
socket: redox_scheme::Socket::nonblock("chan")?,
|
||||
socket: redox_scheme::Socket::<V2>::nonblock("chan")?,
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -228,7 +228,7 @@ impl SchemeBlockMut for ChanScheme {
|
||||
// | | |_| | | (_> < | |___| |__| |_| |___) | |___
|
||||
// |___\___/ \___/\/ \____|_____\___/|____/|_____|
|
||||
|
||||
fn write(&mut self, id: usize, buf: &[u8]) -> Result<Option<usize>> {
|
||||
fn write(&mut self, id: usize, buf: &[u8], _offset: u64, flags: u32) -> Result<Option<usize>> {
|
||||
let handle = self.handles.get_mut(&id).ok_or(Error::new(EBADF))?;
|
||||
let client = handle.require_client()?;
|
||||
|
||||
@@ -248,7 +248,7 @@ impl SchemeBlockMut for ChanScheme {
|
||||
}
|
||||
} else if client.remote == Connection::Closed {
|
||||
Err(Error::new(EPIPE))
|
||||
} else if handle.flags & O_NONBLOCK == O_NONBLOCK {
|
||||
} else if (flags as usize) & O_NONBLOCK == O_NONBLOCK {
|
||||
Err(Error::new(EAGAIN))
|
||||
} else {
|
||||
Ok(None)
|
||||
@@ -276,7 +276,7 @@ impl SchemeBlockMut for ChanScheme {
|
||||
.ok_or(Error::new(EBADF))
|
||||
.and(Ok(Some(id)))
|
||||
}
|
||||
fn read(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
fn read(&mut self, id: usize, buf: &mut [u8], _offset: u64, flags: u32) -> Result<Option<usize>> {
|
||||
let handle = self.handles.get_mut(&id).ok_or(Error::new(EBADF))?;
|
||||
let client = handle.require_client()?;
|
||||
|
||||
@@ -288,7 +288,7 @@ impl SchemeBlockMut for ChanScheme {
|
||||
} else if client.remote == Connection::Closed {
|
||||
// Remote dropped, send EOF
|
||||
Ok(Some(0))
|
||||
} else if handle.flags & O_NONBLOCK == O_NONBLOCK {
|
||||
} else if (flags as usize) & O_NONBLOCK == O_NONBLOCK {
|
||||
Err(Error::new(EAGAIN))
|
||||
} else {
|
||||
Ok(None)
|
||||
|
||||
+4
-4
@@ -3,7 +3,7 @@
|
||||
use std::collections::VecDeque;
|
||||
use event::{EventQueue, EventFlags};
|
||||
use redox_scheme::{CallRequest, RequestKind, Response, SignalBehavior};
|
||||
use syscall::{Error, Result, EAGAIN, EWOULDBLOCK, ENODEV, EINTR, KSMSG_CANCEL};
|
||||
use syscall::{Error, Result, EAGAIN, EWOULDBLOCK, ENODEV, EINTR};
|
||||
|
||||
mod chan;
|
||||
mod shm;
|
||||
@@ -84,19 +84,19 @@ fn inner(daemon: redox_daemon::Daemon) -> Result<()> {
|
||||
let req = slot.req.take().unwrap();
|
||||
|
||||
match req.handle_scheme_block_mut(chan) {
|
||||
Ok(res) => {
|
||||
Some(res) => {
|
||||
if let Err(err) = chan.socket.write_response(res, SignalBehavior::Restart) {
|
||||
error = Some(err);
|
||||
}
|
||||
false
|
||||
}
|
||||
Err(req) if slot.canceling => {
|
||||
None if slot.canceling => {
|
||||
if let Err(err) = chan.socket.write_response(Response::new(&req, Err(Error::new(EINTR))), SignalBehavior::Restart) {
|
||||
error = Some(err);
|
||||
}
|
||||
false
|
||||
}
|
||||
Err(req) => {
|
||||
None => {
|
||||
slot.req = Some(req);
|
||||
true
|
||||
}
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ use std::{
|
||||
rc::Rc,
|
||||
};
|
||||
use syscall::{error::*, Error, Map, Result, MapFlags, PAGE_SIZE, MAP_PRIVATE};
|
||||
use redox_scheme::SchemeMut;
|
||||
use redox_scheme::{SchemeMut, V2};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct ShmHandle {
|
||||
@@ -23,7 +23,7 @@ impl ShmScheme {
|
||||
maps: HashMap::new(),
|
||||
handles: HashMap::new(),
|
||||
next_id: 0,
|
||||
socket: redox_scheme::Socket::nonblock("shm")?,
|
||||
socket: redox_scheme::Socket::<V2>::nonblock("shm")?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user