summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Samuelsson <msamuelsson@storvix.eu>2023-07-21 16:53:54 +0200
committerMartin Samuelsson <msamuelsson@storvix.eu>2023-07-21 17:17:02 +0200
commit2e2fbfd552fd1df1acded8dabd6f74c90f793e8f (patch)
tree23b4245959e6e7b04c7b0c7ee2b9bc8ef3ef2bc7
parentc375a102ac0af0d08c4942ffd81c84b6d6769d08 (diff)
downloadnix-fix/safe_termios.zip
wip: Make termios safefix/safe_termios
-rw-r--r--src/sys/termios.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/sys/termios.rs b/src/sys/termios.rs
index af29d64d..e9a18109 100644
--- a/src/sys/termios.rs
+++ b/src/sys/termios.rs
@@ -261,10 +261,18 @@ impl Termios {
pub(crate) fn get_libc_termios(&self) -> Ref<libc::termios> {
{
let mut termios = self.inner.borrow_mut();
- termios.c_iflag = self.input_flags.bits();
- termios.c_oflag = self.output_flags.bits();
- termios.c_cflag = self.control_flags.bits();
- termios.c_lflag = self.local_flags.bits();
+ termios.c_iflag = self.input_flags.bits() | (
+ InputFlags::from_bits_retain(termios.c_iflag).bits() ^
+ InputFlags::from_bits_truncate(termios.c_iflag).bits());
+ termios.c_oflag = self.output_flags.bits() | (
+ InputFlags::from_bits_retain(termios.c_oflag).bits() ^
+ InputFlags::from_bits_truncate(termios.c_oflag).bits());
+ termios.c_cflag = self.control_flags.bits() | (
+ InputFlags::from_bits_retain(termios.c_cflag).bits() ^
+ InputFlags::from_bits_truncate(termios.c_cflag).bits());
+ termios.c_lflag = self.local_flags.bits() | (
+ InputFlags::from_bits_retain(termios.c_lflag).bits() ^
+ InputFlags::from_bits_truncate(termios.c_lflag).bits());
termios.c_cc = self.control_chars;
#[cfg(any(
target_os = "linux",