diff options
author | Martin Samuelsson <msamuelsson@storvix.eu> | 2023-07-21 16:53:54 +0200 |
---|---|---|
committer | Martin Samuelsson <msamuelsson@storvix.eu> | 2023-07-21 17:17:02 +0200 |
commit | 2e2fbfd552fd1df1acded8dabd6f74c90f793e8f (patch) | |
tree | 23b4245959e6e7b04c7b0c7ee2b9bc8ef3ef2bc7 | |
parent | c375a102ac0af0d08c4942ffd81c84b6d6769d08 (diff) | |
download | nix-fix/safe_termios.zip |
wip: Make termios safefix/safe_termios
-rw-r--r-- | src/sys/termios.rs | 16 |
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", |