summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md93
-rw-r--r--src/unistd.rs5
-rw-r--r--test/test_unistd.rs13
3 files changed, 61 insertions, 50 deletions
diff --git a/README.md b/README.md
index 97ca145f..72f7486d 100644
--- a/README.md
+++ b/README.md
@@ -46,46 +46,59 @@ limitations. Support for platforms is split into three tiers:
The following targets are supported by `nix`:
-Tier 1:
- * aarch64-apple-darwin
- * aarch64-unknown-linux-gnu
- * arm-unknown-linux-gnueabi
- * armv7-unknown-linux-gnueabihf
- * i686-unknown-freebsd
- * i686-unknown-linux-gnu
- * i686-unknown-linux-musl
- * mips-unknown-linux-gnu
- * mips64-unknown-linux-gnuabi64
- * mips64el-unknown-linux-gnuabi64
- * mipsel-unknown-linux-gnu
- * powerpc64le-unknown-linux-gnu
- * x86_64-unknown-freebsd
- * x86_64-unknown-linux-gnu
- * x86_64-unknown-linux-musl
-
-Tier 2:
- * aarch64-apple-ios
- * aarch64-linux-android
- * arm-linux-androideabi
- * arm-unknown-linux-musleabi
- * armv7-linux-androideabi
- * i686-linux-android
- * powerpc-unknown-linux-gnu
- * s390x-unknown-linux-gnu
- * x86_64-apple-ios
- * x86_64-linux-android
- * x86_64-apple-darwin
- * x86_64-unknown-illumos
- * x86_64-unknown-netbsd
-
-Tier 3:
- * armv7-unknown-linux-uclibceabihf
- * x86_64-fuchsia
- * x86_64-unknown-dragonfly
- * x86_64-unknown-haiku
- * x86_64-unknown-linux-gnux32
- * x86_64-unknown-openbsd
- * x86_64-unknown-redox
+<table>
+ <tr>
+ <th>Tier 1</th>
+ <th>Tier 2</th>
+ <th>Tier 3</th>
+ </tr>
+ <tr>
+ <td>
+ <ul>
+ <li>aarch64-apple-darwin</li>
+ <li>aarch64-unknown-linux-gnu</li>
+ <li>arm-unknown-linux-gnueabi</li>
+ <li>armv7-unknown-linux-gnueabihf</li>
+ <li>i686-unknown-freebsd</li>
+ <li>i686-unknown-linux-gnu</li>
+ <li>i686-unknown-linux-musl</li>
+ <li>mips-unknown-linux-gnu</li>
+ <li>mips64-unknown-linux-gnuabi64</li>
+ <li>mips64el-unknown-linux-gnuabi64</li>
+ <li>mipsel-unknown-linux-gnu</li>
+ <li>powerpc64le-unknown-linux-gnu</li>
+ <li>x86_64-unknown-freebsd</li>
+ <li>x86_64-unknown-linux-gnu</li>
+ <li>x86_64-unknown-linux-musl</li>
+ </ul>
+ </td>
+ <td>
+ <ul>
+ <li>aarch64-apple-ios</li>
+ <li>aarch64-linux-android</li>
+ <li>arm-linux-androideabi</li>
+ <li>arm-unknown-linux-musleabi</li>
+ <li>armv7-linux-androideabi</li>
+ <li>i686-linux-android</li>
+ <li>powerpc-unknown-linux-gnu</li>
+ <li>s390x-unknown-linux-gnu</li>
+ <li>x86_64-apple-ios</li>
+ <li>x86_64-linux-android</li>
+ <li>x86_64-apple-darwin</li>
+ <li>x86_64-unknown-illumos</li>
+ <li>x86_64-unknown-netbsd</li>
+ </td>
+ <td>
+ <li>armv7-unknown-linux-uclibceabihf</li>
+ <li>x86_64-fuchsia</li>
+ <li>x86_64-unknown-dragonfly</li>
+ <li>x86_64-unknown-haiku</li>
+ <li>x86_64-unknown-linux-gnux32</li>
+ <li>x86_64-unknown-openbsd</li>
+ <li>x86_64-unknown-redox</li>
+ </td>
+ </tr>
+</table>
## Minimum Supported Rust Version (MSRV)
diff --git a/src/unistd.rs b/src/unistd.rs
index ae1cca95..8cad67f4 100644
--- a/src/unistd.rs
+++ b/src/unistd.rs
@@ -35,6 +35,7 @@ use std::ffi::{CString, OsStr};
use std::os::unix::ffi::OsStrExt;
use std::os::unix::ffi::OsStringExt;
use std::os::unix::io::RawFd;
+use std::os::unix::io::{AsFd, AsRawFd};
use std::path::PathBuf;
use std::{fmt, mem, ptr};
@@ -1255,8 +1256,8 @@ pub fn truncate<P: ?Sized + NixPath>(path: &P, len: off_t) -> Result<()> {
///
/// See also
/// [ftruncate(2)](https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html)
-pub fn ftruncate(fd: RawFd, len: off_t) -> Result<()> {
- Errno::result(unsafe { libc::ftruncate(fd, len) }).map(drop)
+pub fn ftruncate<Fd: AsFd>(fd: Fd, len: off_t) -> Result<()> {
+ Errno::result(unsafe { libc::ftruncate(fd.as_fd().as_raw_fd(), len) }).map(drop)
}
pub fn isatty(fd: RawFd) -> Result<bool> {
diff --git a/test/test_unistd.rs b/test/test_unistd.rs
index 1d50c5fa..10284e41 100644
--- a/test/test_unistd.rs
+++ b/test/test_unistd.rs
@@ -772,15 +772,12 @@ fn test_ftruncate() {
let tempdir = tempdir().unwrap();
let path = tempdir.path().join("file");
- let tmpfd = {
- let mut tmp = File::create(&path).unwrap();
- const CONTENTS: &[u8] = b"12345678";
- tmp.write_all(CONTENTS).unwrap();
- tmp.into_raw_fd()
- };
+ let mut file = File::create(&path).unwrap();
+ const CONTENTS: &[u8] = b"12345678";
+ file.write_all(CONTENTS).unwrap();
- ftruncate(tmpfd, 2).unwrap();
- close(tmpfd).unwrap();
+ ftruncate(&file, 2).unwrap();
+ drop(file);
let metadata = fs::metadata(&path).unwrap();
assert_eq!(2, metadata.len());