vec: fix header reading of existing file

This commit is contained in:
nym21
2025-07-13 16:31:22 +02:00
parent 2dd608dfed
commit d6fa5c8a55
3 changed files with 18 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
use std::{
fs::File,
io::{self, Read, Seek, SeekFrom},
io::{self, Seek, SeekFrom},
os::unix::fs::FileExt,
sync::Arc,
};
@@ -103,7 +103,6 @@ impl HeaderInner {
compressed: ZeroCopyBool::from(format),
};
header.write(file)?;
// dbg!(file.bytes().map(|b| b.unwrap()).collect::<Vec<_>>());
file.seek(SeekFrom::End(0))?;
Ok(header)
}
@@ -117,12 +116,14 @@ impl HeaderInner {
vec_version: Version,
format: Format,
) -> Result<Self> {
if file.metadata()?.len() < HEADER_OFFSET as u64 {
let len = file.metadata()?.len();
if len < HEADER_OFFSET as u64 {
return Err(Error::WrongLength);
}
let mut buf = [0; HEADER_OFFSET];
file.read_exact(&mut buf)?;
file.read_exact_at(&mut buf, 0)?;
let header = HeaderInner::read_from_bytes(&buf)?;

View File

@@ -28,8 +28,8 @@ pub struct RawVec<I, T> {
parent: PathBuf,
name: &'static str,
pushed: Vec<T>,
phantom: PhantomData<I>,
stored_len: Arc<AtomicUsize>,
phantom: PhantomData<I>,
}
impl<I, T> RawVec<I, T>
@@ -77,7 +77,9 @@ where
let header = Header::create_and_write(&mut file, version, Format::Raw)?;
(header, None)
}
_ => return Err(e.into()),
_ => {
return Err(e.into());
}
},
};
@@ -92,8 +94,8 @@ where
name: Box::leak(Box::new(name.to_string())),
parent: parent.to_owned(),
pushed: vec![],
phantom: PhantomData,
stored_len: Arc::new(AtomicUsize::new(stored_len)),
phantom: PhantomData,
})
}
@@ -306,12 +308,11 @@ where
type Item = (I, Cow<'a, T>);
fn next(&mut self) -> Option<Self::Item> {
let mmap = &self.mmap;
let index = self.index;
let opt = self
.vec
.get_or_read_(index, mmap)
.get_or_read_(index, &self.mmap)
.unwrap()
.map(|v| (I::from(index), v));