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(())
|
||||
}
|
||||
|
||||
pub fn seek(&self, _pos: SeekFrom) -> io::Result<u64> {
|
||||
Err(Error::from_raw_os_error(22))
|
||||
pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> {
|
||||
self.0.seek(pos)
|
||||
}
|
||||
|
||||
pub fn tell(&self) -> io::Result<u64> {
|
||||
self.seek(SeekFrom::Current(0))
|
||||
self.0.tell()
|
||||
}
|
||||
|
||||
pub fn duplicate(&self) -> io::Result<File> {
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
use super::hermit_abi;
|
||||
use crate::cmp;
|
||||
use crate::io::{self, IoSlice, IoSliceMut, Read};
|
||||
use crate::os::hermit::io::{FromRawFd, OwnedFd, RawFd, *};
|
||||
use crate::io::{self, IoSlice, IoSliceMut, Read, SeekFrom};
|
||||
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
|
||||
use crate::sys::{cvt, unsupported};
|
||||
use crate::sys_common::{AsInner, FromInner, IntoInner};
|
||||
|
||||
|
@ -66,9 +66,26 @@ impl FileDesc {
|
|||
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> {
|
||||
self.duplicate_path(&[])
|
||||
}
|
||||
|
||||
pub fn duplicate_path(&self, _path: &[u8]) -> io::Result<FileDesc> {
|
||||
unsupported()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue