1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
This patch is based on the commit below, taken from
https://github.com/serialport/serialport-rs/pull/263
adapted for use in the Debian package by Peter Michael Green.
commit ab77b612a583f13a171c4c0a6ef61e7f4c7e7669
Author: Paolo Barbolini <paolo.barbolini@m4ss.net>
Date: Wed Apr 30 09:21:19 2025 +0200
Upgrade `nix` to v0.28
Index: serialport/src/posix/poll.rs
===================================================================
--- serialport.orig/src/posix/poll.rs
+++ serialport/src/posix/poll.rs
@@ -23,8 +23,7 @@ pub fn wait_write_fd<Fd: AsFd>(fd: Fd, t
fn wait_fd<Fd: AsFd>(fd: Fd, events: PollFlags, timeout: Duration) -> io::Result<()> {
use nix::errno::Errno::{EIO, EPIPE};
- let fd = fd.as_fd();
- let mut fd = PollFd::new(&fd, events);
+ let mut fd = PollFd::new(fd.as_fd(), events);
let wait = match poll_clamped(&mut fd, timeout) {
Ok(r) => r,
@@ -87,44 +86,39 @@ fn clamped_time_spec(duration: Duration)
// by `poll`.
#[cfg(not(target_os = "linux"))]
fn poll_clamped(fd: &mut PollFd, timeout: Duration) -> nix::Result<c_int> {
- let millis = clamped_millis_c_int(timeout);
+ let millis = clamped_duration_nix(timeout);
nix::poll::poll(slice::from_mut(fd), millis)
}
#[cfg(any(not(target_os = "linux"), test))]
-fn clamped_millis_c_int(duration: Duration) -> c_int {
- let secs_limit = (c_int::MAX as u64) / 1000;
- let secs = duration.as_secs();
-
- if secs <= secs_limit {
- secs as c_int * 1000 + duration.subsec_millis() as c_int
- } else {
- c_int::MAX
- }
+fn clamped_duration_nix(duration: Duration) -> nix::poll::PollTimeout {
+ nix::poll::PollTimeout::try_from(duration).unwrap_or(nix::poll::PollTimeout::MAX)
}
#[cfg(test)]
mod tests {
+ use nix::poll::PollTimeout;
+
use super::*;
use crate::tests::timeout::MONOTONIC_DURATIONS;
#[test]
- fn clamped_millis_c_int_is_monotonic() {
- let mut last = clamped_millis_c_int(Duration::ZERO);
+ fn clamped_duration_nix_is_monotonic() {
+ let mut last = clamped_duration_nix(Duration::ZERO);
for (i, d) in MONOTONIC_DURATIONS.iter().enumerate() {
- let next = clamped_millis_c_int(*d);
+ let next = clamped_duration_nix(*d);
assert!(
next >= last,
- "{next} >= {last} failed for {d:?} at index {i}"
+ "{next:?} >= {last:?} failed for {d:?} at index {i}"
);
last = next;
}
}
#[test]
- fn clamped_millis_c_int_zero_is_zero() {
- assert_eq!(0, clamped_millis_c_int(Duration::ZERO));
+ fn clamped_duration_nix_zero_is_zero() {
+ assert_eq!(PollTimeout::ZERO, clamped_duration_nix(Duration::ZERO));
}
#[test]
Index: serialport/src/posix/tty.rs
===================================================================
--- serialport.orig/src/posix/tty.rs
+++ serialport/src/posix/tty.rs
@@ -456,7 +456,7 @@ impl io::Write for TTYPort {
return Err(io::Error::from(Error::from(e)));
}
- nix::unistd::write(self.fd.as_raw_fd(), buf).map_err(|e| io::Error::from(Error::from(e)))
+ nix::unistd::write(self.fd.as_fd(), buf).map_err(|e| io::Error::from(Error::from(e)))
}
fn flush(&mut self) -> io::Result<()> {
Index: serialport/Cargo.toml
===================================================================
--- serialport.orig/Cargo.toml
+++ serialport/Cargo.toml
@@ -166,7 +166,7 @@ version = "0.1.3"
version = "2.4.0"
[target."cfg(unix)".dependencies.nix]
-version = "0.27"
+version = "0.28"
features = [
"fs",
"ioctl",
|