Skip to content

Commit cd658cb

Browse files
authored
Unrolled build for rust-lang#138074
Rollup merge of rust-lang#138074 - thaliaarchi:hermit-seek, r=ChrisDenton Support `File::seek` for Hermit `lseek` was added in `hermit-abi` in commit [87dd201](hermit-os/hermit-rs@87dd201) (add missing interface for lseek, 2024-07-15), which was just released in version 0.5.0. cc ``@mkroening,`` ``@stlankes`` Fixes hermit-os/hermit-rs#652
2 parents 9fb94b3 + 1abaacd commit cd658cb

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

library/Cargo.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ dependencies = [
146146

147147
[[package]]
148148
name = "hermit-abi"
149-
version = "0.4.0"
149+
version = "0.5.0"
150150
source = "registry+https://github.com/rust-lang/crates.io-index"
151-
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
151+
checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e"
152152
dependencies = [
153153
"compiler_builtins",
154154
"rustc-std-workspace-alloc",

library/std/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ fortanix-sgx-abi = { version = "0.5.0", features = [
7373
], public = true }
7474

7575
[target.'cfg(target_os = "hermit")'.dependencies]
76-
hermit-abi = { version = "0.4.0", features = [
76+
hermit-abi = { version = "0.5.0", features = [
7777
'rustc-dep-of-std',
7878
], public = true }
7979

library/std/src/sys/fs/hermit.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -417,12 +417,12 @@ impl File {
417417
Ok(())
418418
}
419419

420-
pub fn seek(&self, _pos: SeekFrom) -> io::Result<u64> {
421-
Err(Error::from_raw_os_error(22))
420+
pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> {
421+
self.0.seek(pos)
422422
}
423423

424424
pub fn tell(&self) -> io::Result<u64> {
425-
self.seek(SeekFrom::Current(0))
425+
self.0.tell()
426426
}
427427

428428
pub fn duplicate(&self) -> io::Result<File> {

library/std/src/sys/pal/hermit/fd.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
use super::hermit_abi;
44
use crate::cmp;
5-
use crate::io::{self, IoSlice, IoSliceMut, Read};
6-
use crate::os::hermit::io::{FromRawFd, OwnedFd, RawFd, *};
5+
use crate::io::{self, IoSlice, IoSliceMut, Read, SeekFrom};
6+
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
77
use crate::sys::{cvt, unsupported};
88
use crate::sys_common::{AsInner, FromInner, IntoInner};
99

@@ -66,9 +66,26 @@ impl FileDesc {
6666
true
6767
}
6868

69+
pub fn seek(&self, pos: SeekFrom) -> io::Result<u64> {
70+
let (whence, pos) = match pos {
71+
// Casting to `i64` is fine, too large values will end up as
72+
// negative which will cause an error in `lseek`.
73+
SeekFrom::Start(off) => (hermit_abi::SEEK_SET, off as i64),
74+
SeekFrom::End(off) => (hermit_abi::SEEK_END, off),
75+
SeekFrom::Current(off) => (hermit_abi::SEEK_CUR, off),
76+
};
77+
let n = cvt(unsafe { hermit_abi::lseek(self.as_raw_fd(), pos as isize, whence) })?;
78+
Ok(n as u64)
79+
}
80+
81+
pub fn tell(&self) -> io::Result<u64> {
82+
self.seek(SeekFrom::Current(0))
83+
}
84+
6985
pub fn duplicate(&self) -> io::Result<FileDesc> {
7086
self.duplicate_path(&[])
7187
}
88+
7289
pub fn duplicate_path(&self, _path: &[u8]) -> io::Result<FileDesc> {
7390
unsupported()
7491
}

0 commit comments

Comments
 (0)