From fabf69b353e414206a1b4ecca3604eeb5f9656d6 Mon Sep 17 00:00:00 2001 From: pjht Date: Wed, 20 Nov 2024 13:59:04 -0600 Subject: [PATCH] Update to latest line_discipline to handle EOF correctly --- src/main.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index b869441..f7f8bf7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,17 +42,22 @@ impl Pty { } fn read_slave(&self, len: usize) -> Vec { - while !self.input_buffer.lock().contains(&b'\n') { + while self.input_buffer.lock().is_empty() { ipc::process_messages(); let mut input_buffer = self.input_buffer.lock(); - input_buffer.extend_from_slice(&self.line_discipline.lock().get_program_input()); + let input = self.line_discipline.lock().get_program_input(); + let Some(input) = input else { + continue; + }; + if input.is_empty() { + return Vec::new(); + } + input_buffer.extend_from_slice(&input); } let mut input_buffer = self.input_buffer.lock(); - input_buffer.extend_from_slice(&self.line_discipline.lock().get_program_input()); - let Some(line_end) = input_buffer.iter().position(|&x| x == b'\n') else { - return Vec::new(); - }; - let rem_buf = input_buffer.split_off(usize::min(len, line_end + 1)); + input_buffer.extend_from_slice(&self.line_discipline.lock().get_program_input().unwrap_or_default()); + let buf_len = input_buffer.len(); + let rem_buf = input_buffer.split_off(usize::min(len, buf_len)); std::mem::replace(&mut *input_buffer, rem_buf) } @@ -63,7 +68,7 @@ impl Pty { fn curr_slave_poll(&self) -> PollEvents { self.input_buffer .lock() - .extend_from_slice(&self.line_discipline.lock().get_program_input()); + .extend_from_slice(&self.line_discipline.lock().get_program_input().unwrap_or_default()); let mut events = PollEvents::POLLOUT; if self.input_buffer.lock().contains(&b'\n') { events |= PollEvents::POLLIN;