chiark / gitweb /
nix: Provide a compat version of write for 0.28
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 25 Feb 2024 01:55:59 +0000 (01:55 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 25 Feb 2024 17:40:44 +0000 (17:40 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
server/daemon.rs
src/compat.rs

index a45fccb9709b81bd0d2ed17b1e451b81bba98121..45a8f81d626e78a4e806bad08b399e20fe6bd0ef 100644 (file)
@@ -95,7 +95,7 @@ unsafe fn mdup2(oldfd: RawFd, newfd: RawFd, what: &str) {
 }
 
 unsafe fn write_status(st_wfd: RawFd, estatus: u8) {
-  match write(st_wfd, slice::from_ref(&estatus)) {
+  match compat::write(st_wfd, slice::from_ref(&estatus)) {
     Ok(1) => {}
     Ok(_) => crashm("write child startup exit status: short write"),
     Err(e) => crashe("write child startup exit status", e),
index 75d478d7a1efd207f493f996dfbf6e121f0bc5ba..f02d9818384173e9951027d4d4f38f72174fd53d 100644 (file)
@@ -18,3 +18,20 @@ pub unsafe fn writev(fd: c_int, iov: &[IoSlice]) -> nix::Result<usize> {
     iov,
   )
 }
+
+/// Version of [`nix::unistd::write`] with a fixed type for the fd
+//
+///  * nix <=0.27 has `fd: c_int`
+///  * nix >=0.28 has `fd: impl AsFd`
+pub unsafe fn write(fd: c_int, buf: &[u8]) -> nix::Result<usize> {
+  nix::unistd::write(
+    { cfg_if! {
+      if #[cfg(nix_ge_0_28)] {
+        BorrowedFd::borrow_raw(fd)
+      } else {
+        fd
+      }
+    }},
+    buf,
+  )
+}