mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-05-06 04:09:09 -07:00
vec: fix header reading of existing file
This commit is contained in:
@@ -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)?;
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user