From a9ab9e18b30846cdc04c1d104526c77b4906895e Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 20 May 2018 13:16:14 -0600 Subject: [PATCH] Fix issues with new event method --- src/bin/getty.rs | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/bin/getty.rs b/src/bin/getty.rs index f04df8ce41..a3d4f9ba69 100644 --- a/src/bin/getty.rs +++ b/src/bin/getty.rs @@ -42,25 +42,17 @@ const DEFAULT_COLS: u32 = 80; const DEFAULT_LINES: u32 = 30; pub fn handle(event_file: &mut File, tty_fd: RawFd, master_fd: RawFd, process: &mut Child) { - let handle_event = |event_id: usize, event_count: usize| -> bool { + let handle_event = |event_id: usize| { if event_id == tty_fd { let mut packet = [0; 4096]; let count = syscall::read(tty_fd, &mut packet).expect("getty: failed to read from TTY"); - if count == 0 { - if event_count == 0 { - return false; - } - } else { + if count != 0 { syscall::write(master_fd, &packet[..count]).expect("getty: failed to write master PTY"); } } else if event_id == master_fd { let mut packet = [0; 4096]; let count = syscall::read(master_fd, &mut packet).expect("getty: failed to read master PTY"); - if count == 0 { - if event_count == 0 { - return false; - } - } else { + if count != 0 { syscall::write(tty_fd, &packet[1..count]).expect("getty: failed to write to TTY"); if packet[0] & 1 == 1 { let _ = syscall::fsync(tty_fd); @@ -69,19 +61,15 @@ pub fn handle(event_file: &mut File, tty_fd: RawFd, master_fd: RawFd, process: & } else { println!("Unknown event {}", event_id); } - - true }; - handle_event(tty_fd, 0); - handle_event(master_fd, 0); + handle_event(tty_fd); + handle_event(master_fd); 'events: loop { let mut sys_event = syscall::Event::default(); event_file.read(&mut sys_event).expect("getty: failed to read event file"); - if ! handle_event(sys_event.id, sys_event.data) { - break 'events; - } + handle_event(sys_event.id); match process.try_wait() { Ok(status) => match status { @@ -135,6 +123,9 @@ fn daemon(tty_fd: RawFd, clear: bool, stderr: &mut Stderr) { let (master_fd, pty) = getpty(columns, lines); + println!("tty_fd: {}", tty_fd); + println!("master_fd: {}", master_fd); + let mut event_file = OpenOptions::new() .read(true) .write(true) @@ -177,10 +168,6 @@ fn daemon(tty_fd: RawFd, clear: bool, stderr: &mut Stderr) { match command.spawn() { Ok(mut process) => { - let _ = syscall::close(slave_stderr); - let _ = syscall::close(slave_stdout); - let _ = syscall::close(slave_stdin); - handle(&mut event_file, tty_fd, master_fd, &mut process); }, Err(err) => {