diff --git a/src/tape/changer/sg_pt_changer.rs b/src/tape/changer/sg_pt_changer.rs index a15d8192..098c10d8 100644 --- a/src/tape/changer/sg_pt_changer.rs +++ b/src/tape/changer/sg_pt_changer.rs @@ -651,17 +651,9 @@ fn decode_element_status_page( } let descr_data = reader.read_exact_allocated(len)?; - let mut reader = &descr_data[..]; - loop { - if reader.is_empty() { - break; - } - if reader.len() < (subhead.descriptor_length as usize) { - break; - } - - let len_before = reader.len(); + for descriptor in descr_data.chunks_exact(subhead.descriptor_length as usize) { + let mut reader = &descriptor[..]; match subhead.element_type_code { 1 => { @@ -672,9 +664,6 @@ fn decode_element_status_page( subhead.skip_alternate_volume_tag(&mut reader)?; - let mut reserved = [0u8; 4]; - reader.read_exact(&mut reserved)?; - result.last_element_address = Some(desc.element_address); let status = TransportElementStatus { @@ -691,9 +680,6 @@ fn decode_element_status_page( subhead.skip_alternate_volume_tag(&mut reader)?; - let mut reserved = [0u8; 4]; - reader.read_exact(&mut reserved)?; - result.last_element_address = Some(desc.element_address); if subhead.element_type_code == 3 { @@ -763,19 +749,6 @@ fn decode_element_status_page( } code => bail!("got unknown element type code {}", code), } - - // we have to consume the whole descriptor size, else - // our position in the reader is not correct - let len_after = reader.len(); - let have_read = len_before - len_after; - let desc_len = subhead.descriptor_length as usize; - if desc_len > have_read { - let mut left_to_read = desc_len - have_read; - if left_to_read > len_after { - left_to_read = len_after; // reader has not enough data? - } - let _ = reader.read_exact_allocated(left_to_read)?; - } } }