feat(storage): scoped grants (subtree, ro/rw), narrow-only, release revokes all holders; IPC KEEP_DELEGATE opt-in; shell cd/pwd, programs get ro cwd
This commit is contained in:
@@ -4,6 +4,8 @@ use super::{call0, raw, slot_of, Error, Result};
|
||||
use types::bounded::CapSlot;
|
||||
use types::syscall_abi::*;
|
||||
|
||||
pub use types::syscall_abi::Give;
|
||||
|
||||
/// What a receiving call got.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum Received {
|
||||
@@ -48,7 +50,7 @@ pub fn create_endpoint() -> Option<CapSlot> {
|
||||
slot_of(call0(SYS_CREATE_ENDPOINT)).ok()
|
||||
}
|
||||
|
||||
pub fn send_msg(endpoint: CapSlot, words: [usize; 4], cap: Option<CapSlot>) -> Result<()> {
|
||||
pub fn send_msg(endpoint: CapSlot, words: [usize; 4], cap: Option<Give>) -> Result<()> {
|
||||
raw(
|
||||
SYS_SEND,
|
||||
message_regs(endpoint.value() as usize, words, cap),
|
||||
@@ -61,7 +63,7 @@ pub fn receive_msg(endpoint: CapSlot) -> Result<Received> {
|
||||
}
|
||||
|
||||
/// Sends and waits for the reply.
|
||||
pub fn call(endpoint: CapSlot, words: [usize; 4], cap: Option<CapSlot>) -> Result<Received> {
|
||||
pub fn call(endpoint: CapSlot, words: [usize; 4], cap: Option<Give>) -> Result<Received> {
|
||||
raw(
|
||||
SYS_CALL,
|
||||
message_regs(endpoint.value() as usize, words, cap),
|
||||
@@ -80,12 +82,12 @@ pub fn request(endpoint: CapSlot, words: [usize; 4]) -> Result<[usize; 4]> {
|
||||
}
|
||||
|
||||
/// Answers the last `Call` this thread received.
|
||||
pub fn reply(words: [usize; 4], cap: Option<CapSlot>) -> Result<()> {
|
||||
pub fn reply(words: [usize; 4], cap: Option<Give>) -> Result<()> {
|
||||
raw(SYS_REPLY, message_regs(0, words, cap)).map(|_| ())
|
||||
}
|
||||
|
||||
/// Replies to the pending `Call` (if any), then receives the next message.
|
||||
pub fn reply_recv(endpoint: CapSlot, words: [usize; 4], cap: Option<CapSlot>) -> Result<Received> {
|
||||
pub fn reply_recv(endpoint: CapSlot, words: [usize; 4], cap: Option<Give>) -> Result<Received> {
|
||||
raw(
|
||||
SYS_REPLY_RECV,
|
||||
message_regs(endpoint.value() as usize, words, cap),
|
||||
|
||||
Reference in New Issue
Block a user