diff --git a/devices/src/virtio/console.rs b/devices/src/virtio/console.rs index 7fa55db6e4..d0d665a1e9 100644 --- a/devices/src/virtio/console.rs +++ b/devices/src/virtio/console.rs @@ -63,23 +63,17 @@ pub fn handle_input( buffer: &mut VecDeque, receive_queue: &mut Queue, ) -> result::Result<(), ConsoleError> { - let mut exhausted_queue = false; - loop { - let desc = match receive_queue.peek(mem) { - Some(d) => d, - None => { - exhausted_queue = true; - break; - } - }; + let desc = receive_queue + .peek(mem) + .ok_or(ConsoleError::RxDescriptorsExhausted)?; let desc_index = desc.index; // TODO(morg): Handle extra error cases as Err(ConsoleError) instead of just returning. let mut writer = match Writer::new(mem.clone(), desc) { Ok(w) => w, Err(e) => { error!("console: failed to create Writer: {}", e); - break; + return Ok(()); } }; @@ -103,15 +97,9 @@ pub fn handle_input( } if bytes_written == 0 { - break; + return Ok(()); } } - - if exhausted_queue { - Err(ConsoleError::RxDescriptorsExhausted) - } else { - Ok(()) - } } /// Processes the data taken from the given transmit queue into the output sink.