V2 scheme.

This commit is contained in:
4lDO2
2024-09-07 02:01:53 +02:00
parent 2980e15280
commit db2322c95c
5 changed files with 24 additions and 24 deletions
Generated
+10 -10
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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")?,
})
}
}