0.5.12: Replace link with flink
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.11"
|
||||
version = "0.5.12"
|
||||
description = "A Rust library to access raw Redox system calls"
|
||||
license = "MIT"
|
||||
authors = ["Jeremy Soller <jackpot51@gmail.com>"]
|
||||
|
||||
+6
-5
@@ -72,6 +72,12 @@ pub fn fpath(fd: usize, buf: &mut [u8]) -> Result<usize> {
|
||||
unsafe { syscall3(SYS_FPATH, fd, buf.as_mut_ptr() as usize, buf.len()) }
|
||||
}
|
||||
|
||||
/// Create a link to a file
|
||||
pub fn flink<T: AsRef<str>>(fd: usize, path: T) -> Result<usize> {
|
||||
let path = path.as_ref();
|
||||
unsafe { syscall3(SYS_FLINK, fd, path.as_ptr() as usize, path.len()) }
|
||||
}
|
||||
|
||||
/// Rename a file
|
||||
pub fn frename<T: AsRef<str>>(fd: usize, path: T) -> Result<usize> {
|
||||
let path = path.as_ref();
|
||||
@@ -142,11 +148,6 @@ pub unsafe fn futex(
|
||||
)
|
||||
}
|
||||
|
||||
/// Create a link to a file
|
||||
pub unsafe fn link(old: *const u8, new: *const u8) -> Result<usize> {
|
||||
syscall2(SYS_LINK, old as usize, new as usize)
|
||||
}
|
||||
|
||||
/// Seek to `offset` bytes in a file descriptor
|
||||
pub fn lseek(fd: usize, offset: isize, whence: usize) -> Result<usize> {
|
||||
unsafe { syscall3(SYS_LSEEK, fd, offset as usize, whence) }
|
||||
|
||||
+1
-1
@@ -10,7 +10,6 @@ pub const SYS_ARG_PATH: usize = 0x0300_0000;
|
||||
pub const SYS_RET: usize = 0x00F0_0000;
|
||||
pub const SYS_RET_FILE: usize = 0x0010_0000;
|
||||
|
||||
pub const SYS_LINK: usize = SYS_CLASS_PATH | SYS_ARG_PATH | 9;
|
||||
pub const SYS_OPEN: usize = SYS_CLASS_PATH | SYS_RET_FILE | 5;
|
||||
pub const SYS_OPENAT: usize = SYS_CLASS_PATH | SYS_RET_FILE | 7;
|
||||
pub const SYS_RMDIR: usize = SYS_CLASS_PATH | 84;
|
||||
@@ -44,6 +43,7 @@ pub const SYS_FUNMAP_OLD: usize = SYS_CLASS_FILE | 91;
|
||||
pub const SYS_FUNMAP: usize = SYS_CLASS_FILE | 92;
|
||||
pub const SYS_MREMAP: usize = 155;
|
||||
|
||||
pub const SYS_FLINK: usize = SYS_CLASS_FILE | SYS_ARG_PATH | 9;
|
||||
pub const SYS_FPATH: usize = SYS_CLASS_FILE | SYS_ARG_MSLICE | 928;
|
||||
pub const SYS_FRENAME: usize = SYS_CLASS_FILE | SYS_ARG_PATH | 38;
|
||||
pub const SYS_FSTAT: usize = SYS_CLASS_FILE | SYS_ARG_MSLICE | 28;
|
||||
|
||||
@@ -53,6 +53,13 @@ pub trait Scheme {
|
||||
SYS_FEVENT => self
|
||||
.fevent(packet.b, EventFlags::from_bits_truncate(packet.c))
|
||||
.map(|f| f.bits()),
|
||||
SYS_FLINK => {
|
||||
if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } {
|
||||
self.flink(packet.b, path, packet.uid, packet.gid)
|
||||
} else {
|
||||
Err(Error::new(EINVAL))
|
||||
}
|
||||
}
|
||||
SYS_FPATH => self.fpath(packet.b, unsafe {
|
||||
slice::from_raw_parts_mut(packet.c as *mut u8, packet.d)
|
||||
}),
|
||||
@@ -184,6 +191,11 @@ pub trait Scheme {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn flink(&self, id: usize, path: &str, uid: u32, gid: u32) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
|
||||
+14
-14
@@ -53,6 +53,13 @@ pub trait SchemeBlock {
|
||||
SYS_FEVENT => self
|
||||
.fevent(packet.b, EventFlags::from_bits_truncate(packet.c))
|
||||
.map(|f| f.map(|f| f.bits())),
|
||||
SYS_FLINK => {
|
||||
if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } {
|
||||
self.flink(packet.b, path, packet.uid, packet.gid)
|
||||
} else {
|
||||
Err(Error::new(EINVAL))
|
||||
}
|
||||
}
|
||||
SYS_FPATH => self.fpath(packet.b, unsafe {
|
||||
slice::from_raw_parts_mut(packet.c as *mut u8, packet.d)
|
||||
}),
|
||||
@@ -184,6 +191,11 @@ pub trait SchemeBlock {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn flink(&self, id: usize, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
Err(Error::new(EBADF))
|
||||
@@ -225,24 +237,12 @@ pub trait SchemeBlock {
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn mmap_prep(
|
||||
&self,
|
||||
id: usize,
|
||||
offset: u64,
|
||||
size: usize,
|
||||
flags: MapFlags,
|
||||
) -> Result<Option<usize>> {
|
||||
fn mmap_prep(&self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<Option<usize>> {
|
||||
Err(Error::new(EOPNOTSUPP))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn munmap(
|
||||
&self,
|
||||
id: usize,
|
||||
offset: u64,
|
||||
size: usize,
|
||||
flags: MunmapFlags,
|
||||
) -> Result<Option<usize>> {
|
||||
fn munmap(&self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<Option<usize>> {
|
||||
Err(Error::new(EOPNOTSUPP))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,13 @@ pub trait SchemeBlockMut {
|
||||
SYS_FEVENT => self
|
||||
.fevent(packet.b, EventFlags::from_bits_truncate(packet.c))
|
||||
.map(|f| f.map(|f| f.bits())),
|
||||
SYS_FLINK => {
|
||||
if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } {
|
||||
self.flink(packet.b, path, packet.uid, packet.gid)
|
||||
} else {
|
||||
Err(Error::new(EINVAL))
|
||||
}
|
||||
}
|
||||
SYS_FPATH => self.fpath(packet.b, unsafe {
|
||||
slice::from_raw_parts_mut(packet.c as *mut u8, packet.d)
|
||||
}),
|
||||
@@ -184,6 +191,11 @@ pub trait SchemeBlockMut {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn flink(&mut self, id: usize, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
Err(Error::new(EBADF))
|
||||
@@ -225,24 +237,12 @@ pub trait SchemeBlockMut {
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn mmap_prep(
|
||||
&mut self,
|
||||
id: usize,
|
||||
offset: u64,
|
||||
size: usize,
|
||||
flags: MapFlags,
|
||||
) -> Result<Option<usize>> {
|
||||
fn mmap_prep(&mut self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<Option<usize>> {
|
||||
Err(Error::new(EOPNOTSUPP))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn munmap(
|
||||
&mut self,
|
||||
id: usize,
|
||||
offset: u64,
|
||||
size: usize,
|
||||
flags: MunmapFlags,
|
||||
) -> Result<Option<usize>> {
|
||||
fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<Option<usize>> {
|
||||
Err(Error::new(EOPNOTSUPP))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,13 @@ pub trait SchemeMut {
|
||||
SYS_FEVENT => self
|
||||
.fevent(packet.b, EventFlags::from_bits_truncate(packet.c))
|
||||
.map(|f| f.bits()),
|
||||
SYS_FLINK => {
|
||||
if let Some(path) = unsafe { str_from_raw_parts(packet.c as *const u8, packet.d) } {
|
||||
self.flink(packet.b, path, packet.uid, packet.gid)
|
||||
} else {
|
||||
Err(Error::new(EINVAL))
|
||||
}
|
||||
}
|
||||
SYS_FPATH => self.fpath(packet.b, unsafe {
|
||||
slice::from_raw_parts_mut(packet.c as *mut u8, packet.d)
|
||||
}),
|
||||
@@ -184,6 +191,11 @@ pub trait SchemeMut {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn flink(&mut self, id: usize, path: &str, uid: u32, gid: u32) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
|
||||
@@ -131,6 +131,7 @@ pub enum Opcode {
|
||||
Call = 28,
|
||||
|
||||
OpenAt = 29, // fd, buf_ptr, buf_len, flags
|
||||
Flink = 30,
|
||||
}
|
||||
|
||||
impl Opcode {
|
||||
@@ -172,6 +173,7 @@ impl Opcode {
|
||||
28 => Call,
|
||||
|
||||
29 => OpenAt,
|
||||
30 => Flink,
|
||||
|
||||
_ => return None,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user