Support File::seek for Hermit
This commit is contained in:
parent
32d0c4ed86
commit
1abaacd375
2 changed files with 22 additions and 5 deletions
|
@ -417,12 +417,12 @@ impl File {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn seek(&self, _pos: SeekFrom) -> io::Result<u64> {
|
pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> {
|
||||||
Err(Error::from_raw_os_error(22))
|
self.0.seek(pos)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn tell(&self) -> io::Result<u64> {
|
pub fn tell(&self) -> io::Result<u64> {
|
||||||
self.seek(SeekFrom::Current(0))
|
self.0.tell()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn duplicate(&self) -> io::Result<File> {
|
pub fn duplicate(&self) -> io::Result<File> {
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
use super::hermit_abi;
|
use super::hermit_abi;
|
||||||
use crate::cmp;
|
use crate::cmp;
|
||||||
use crate::io::{self, IoSlice, IoSliceMut, Read};
|
use crate::io::{self, IoSlice, IoSliceMut, Read, SeekFrom};
|
||||||
use crate::os::hermit::io::{FromRawFd, OwnedFd, RawFd, *};
|
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
|
||||||
use crate::sys::{cvt, unsupported};
|
use crate::sys::{cvt, unsupported};
|
||||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
||||||
|
|
||||||
|
@ -66,9 +66,26 @@ impl FileDesc {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> {
|
||||||
|
let (whence, pos) = match pos {
|
||||||
|
// Casting to `i64` is fine, too large values will end up as
|
||||||
|
// negative which will cause an error in `lseek`.
|
||||||
|
SeekFrom::Start(off) => (hermit_abi::SEEK_SET, off as i64),
|
||||||
|
SeekFrom::End(off) => (hermit_abi::SEEK_END, off),
|
||||||
|
SeekFrom::Current(off) => (hermit_abi::SEEK_CUR, off),
|
||||||
|
};
|
||||||
|
let n = cvt(unsafe { hermit_abi::lseek(self.as_raw_fd(), pos as isize, whence) })?;
|
||||||
|
Ok(n as u64)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn tell(&self) -> io::Result<u64> {
|
||||||
|
self.seek(SeekFrom::Current(0))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn duplicate(&self) -> io::Result<FileDesc> {
|
pub fn duplicate(&self) -> io::Result<FileDesc> {
|
||||||
self.duplicate_path(&[])
|
self.duplicate_path(&[])
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn duplicate_path(&self, _path: &[u8]) -> io::Result<FileDesc> {
|
pub fn duplicate_path(&self, _path: &[u8]) -> io::Result<FileDesc> {
|
||||||
unsupported()
|
unsupported()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue