Skip to content

Commit bbb97bf

Browse files
Merge #1947 #1961
1947: Target table r=rtzoeller a=JonathanWoollett-Light Put targets into a table. <table> <tr><th>Before</th><th>After</th></tr> <tr><td><img alt="image" src="https://user-images.githubusercontent.com/16856679/208483287-e39c218c-0a5c-4cf8-9fc2-b9ab5408ce28.png"></td><td><img alt="image" src="https://user-images.githubusercontent.com/16856679/208483421-53743623-e43b-40d4-8b36-83e570326b56.png"></td></tr> </table> 1961: feat: I/O safety `ftruncate` r=rtzoeller a=JonathanWoollett-Light Uses `AsFd` for `unistd::ftruncate`. Co-authored-by: Jonathan Woollett-Light <[email protected]> Co-authored-by: Jonathan <[email protected]>
3 parents 67f8770 + dbd5d1b + b7f8f93 commit bbb97bf

File tree

3 files changed

+61
-50
lines changed

3 files changed

+61
-50
lines changed

README.md

Lines changed: 53 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -46,46 +46,59 @@ limitations. Support for platforms is split into three tiers:
4646

4747
The following targets are supported by `nix`:
4848

49-
Tier 1:
50-
* aarch64-apple-darwin
51-
* aarch64-unknown-linux-gnu
52-
* arm-unknown-linux-gnueabi
53-
* armv7-unknown-linux-gnueabihf
54-
* i686-unknown-freebsd
55-
* i686-unknown-linux-gnu
56-
* i686-unknown-linux-musl
57-
* mips-unknown-linux-gnu
58-
* mips64-unknown-linux-gnuabi64
59-
* mips64el-unknown-linux-gnuabi64
60-
* mipsel-unknown-linux-gnu
61-
* powerpc64le-unknown-linux-gnu
62-
* x86_64-unknown-freebsd
63-
* x86_64-unknown-linux-gnu
64-
* x86_64-unknown-linux-musl
65-
66-
Tier 2:
67-
* aarch64-apple-ios
68-
* aarch64-linux-android
69-
* arm-linux-androideabi
70-
* arm-unknown-linux-musleabi
71-
* armv7-linux-androideabi
72-
* i686-linux-android
73-
* powerpc-unknown-linux-gnu
74-
* s390x-unknown-linux-gnu
75-
* x86_64-apple-ios
76-
* x86_64-linux-android
77-
* x86_64-apple-darwin
78-
* x86_64-unknown-illumos
79-
* x86_64-unknown-netbsd
80-
81-
Tier 3:
82-
* armv7-unknown-linux-uclibceabihf
83-
* x86_64-fuchsia
84-
* x86_64-unknown-dragonfly
85-
* x86_64-unknown-haiku
86-
* x86_64-unknown-linux-gnux32
87-
* x86_64-unknown-openbsd
88-
* x86_64-unknown-redox
49+
<table>
50+
<tr>
51+
<th>Tier 1</th>
52+
<th>Tier 2</th>
53+
<th>Tier 3</th>
54+
</tr>
55+
<tr>
56+
<td>
57+
<ul>
58+
<li>aarch64-apple-darwin</li>
59+
<li>aarch64-unknown-linux-gnu</li>
60+
<li>arm-unknown-linux-gnueabi</li>
61+
<li>armv7-unknown-linux-gnueabihf</li>
62+
<li>i686-unknown-freebsd</li>
63+
<li>i686-unknown-linux-gnu</li>
64+
<li>i686-unknown-linux-musl</li>
65+
<li>mips-unknown-linux-gnu</li>
66+
<li>mips64-unknown-linux-gnuabi64</li>
67+
<li>mips64el-unknown-linux-gnuabi64</li>
68+
<li>mipsel-unknown-linux-gnu</li>
69+
<li>powerpc64le-unknown-linux-gnu</li>
70+
<li>x86_64-unknown-freebsd</li>
71+
<li>x86_64-unknown-linux-gnu</li>
72+
<li>x86_64-unknown-linux-musl</li>
73+
</ul>
74+
</td>
75+
<td>
76+
<ul>
77+
<li>aarch64-apple-ios</li>
78+
<li>aarch64-linux-android</li>
79+
<li>arm-linux-androideabi</li>
80+
<li>arm-unknown-linux-musleabi</li>
81+
<li>armv7-linux-androideabi</li>
82+
<li>i686-linux-android</li>
83+
<li>powerpc-unknown-linux-gnu</li>
84+
<li>s390x-unknown-linux-gnu</li>
85+
<li>x86_64-apple-ios</li>
86+
<li>x86_64-linux-android</li>
87+
<li>x86_64-apple-darwin</li>
88+
<li>x86_64-unknown-illumos</li>
89+
<li>x86_64-unknown-netbsd</li>
90+
</td>
91+
<td>
92+
<li>armv7-unknown-linux-uclibceabihf</li>
93+
<li>x86_64-fuchsia</li>
94+
<li>x86_64-unknown-dragonfly</li>
95+
<li>x86_64-unknown-haiku</li>
96+
<li>x86_64-unknown-linux-gnux32</li>
97+
<li>x86_64-unknown-openbsd</li>
98+
<li>x86_64-unknown-redox</li>
99+
</td>
100+
</tr>
101+
</table>
89102

90103
## Minimum Supported Rust Version (MSRV)
91104

src/unistd.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use std::ffi::{CString, OsStr};
3535
use std::os::unix::ffi::OsStrExt;
3636
use std::os::unix::ffi::OsStringExt;
3737
use std::os::unix::io::RawFd;
38+
use std::os::unix::io::{AsFd, AsRawFd};
3839
use std::path::PathBuf;
3940
use std::{fmt, mem, ptr};
4041

@@ -1255,8 +1256,8 @@ pub fn truncate<P: ?Sized + NixPath>(path: &P, len: off_t) -> Result<()> {
12551256
///
12561257
/// See also
12571258
/// [ftruncate(2)](https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html)
1258-
pub fn ftruncate(fd: RawFd, len: off_t) -> Result<()> {
1259-
Errno::result(unsafe { libc::ftruncate(fd, len) }).map(drop)
1259+
pub fn ftruncate<Fd: AsFd>(fd: Fd, len: off_t) -> Result<()> {
1260+
Errno::result(unsafe { libc::ftruncate(fd.as_fd().as_raw_fd(), len) }).map(drop)
12601261
}
12611262

12621263
pub fn isatty(fd: RawFd) -> Result<bool> {

test/test_unistd.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -772,15 +772,12 @@ fn test_ftruncate() {
772772
let tempdir = tempdir().unwrap();
773773
let path = tempdir.path().join("file");
774774

775-
let tmpfd = {
776-
let mut tmp = File::create(&path).unwrap();
777-
const CONTENTS: &[u8] = b"12345678";
778-
tmp.write_all(CONTENTS).unwrap();
779-
tmp.into_raw_fd()
780-
};
775+
let mut file = File::create(&path).unwrap();
776+
const CONTENTS: &[u8] = b"12345678";
777+
file.write_all(CONTENTS).unwrap();
781778

782-
ftruncate(tmpfd, 2).unwrap();
783-
close(tmpfd).unwrap();
779+
ftruncate(&file, 2).unwrap();
780+
drop(file);
784781

785782
let metadata = fs::metadata(&path).unwrap();
786783
assert_eq!(2, metadata.len());

0 commit comments

Comments
 (0)