small memory usage improvement (v0.1.3)
This commit is contained in:
parent
40e6da5e97
commit
a8c44fb83d
@ -7,7 +7,7 @@ as GNU Longname. The maximum supported file name length is 100 characters includ
|
||||
The maximum supported file size is 8GiB. Also, directories are not supported yet but only flat
|
||||
collections of files.
|
||||
"""
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
edition = "2018"
|
||||
keywords = ["tar", "tarball", "archive"]
|
||||
categories = ["data-structures", "no-std", "parser-implementations"]
|
||||
|
@ -27,7 +27,6 @@ use crate::header::PosixHeader;
|
||||
use crate::{TypeFlag, BLOCKSIZE};
|
||||
use arrayvec::ArrayString;
|
||||
use core::fmt::{Debug, Formatter};
|
||||
use core::ptr;
|
||||
use core::str::FromStr;
|
||||
|
||||
/// Describes an entry in an archive.
|
||||
@ -116,11 +115,10 @@ impl<'a> ArchiveIterator<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a pointer to the next Header.
|
||||
const fn next_hdr(&self, block_index: usize) -> *const PosixHeader {
|
||||
/// Returns a reference to the next Header.
|
||||
fn next_hdr(&self, block_index: usize) -> &'a PosixHeader {
|
||||
let hdr_ptr = &self.archive.data[block_index * BLOCKSIZE];
|
||||
let hdr_ptr = hdr_ptr as *const u8;
|
||||
hdr_ptr as *const PosixHeader
|
||||
unsafe { (hdr_ptr as *const u8).cast::<PosixHeader>().as_ref() }.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,11 +132,10 @@ impl<'a> Iterator for ArchiveIterator<'a> {
|
||||
}
|
||||
|
||||
let hdr = self.next_hdr(self.block_index);
|
||||
let hdr = unsafe { ptr::read(hdr) };
|
||||
|
||||
// check if we found end of archive
|
||||
if hdr.is_zero_block() {
|
||||
let next_hdr = unsafe { ptr::read(self.next_hdr(self.block_index + 1)) };
|
||||
let next_hdr = self.next_hdr(self.block_index + 1);
|
||||
if next_hdr.is_zero_block() {
|
||||
// gracefully terminated Archive
|
||||
log::debug!("End of Tar archive with two zero blocks!");
|
||||
|
@ -284,9 +284,9 @@ mod tests {
|
||||
use crate::BLOCKSIZE;
|
||||
use std::mem::size_of;
|
||||
|
||||
fn bytes_to_archive(bytes: &[u8]) -> PosixHeader {
|
||||
let hdr = bytes.as_ptr() as *const PosixHeader;
|
||||
unsafe { core::ptr::read(hdr) }
|
||||
/// Casts the bytes to a reference to a PosixhHeader.
|
||||
fn bytes_to_archive(bytes: &[u8]) -> &PosixHeader {
|
||||
unsafe { (bytes.as_ptr() as *const PosixHeader).as_ref() }.unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
Reference in New Issue
Block a user