Skip to content

Commit 2b90262

Browse files
committed
update: get zerocopy to latest
Signed-off-by: Dan Cross <[email protected]>
1 parent a8c4a42 commit 2b90262

File tree

5 files changed

+270
-197
lines changed

5 files changed

+270
-197
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ num-derive = { version = "0.4", features = [ ] }
1515
num-traits = { version = "0.2", default-features = false }
1616
paste = "1.0"
1717
static_assertions = "1.1"
18-
zerocopy = "0.6"
18+
zerocopy = { version = "0.8", features = ["derive"] }
1919
serde = { version = "1.0", default-features = false, features = ["derive"], optional = true }
2020
serde-hex = { version = "0.1", optional = true }
2121
schemars = { version = "0.8", optional = true }

src/apcb.rs

Lines changed: 77 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ use core::mem::size_of;
2929
use num_traits::FromPrimitive;
3030
use num_traits::ToPrimitive;
3131
use static_assertions::const_assert;
32-
use zerocopy::AsBytes;
33-
use zerocopy::LayoutVerified;
32+
use zerocopy::Ref;
33+
use zerocopy::{Immutable, IntoBytes, KnownLayout};
3434

3535
// The following imports are only used for std enviroments and serde.
3636
#[cfg(feature = "std")]
@@ -443,52 +443,50 @@ impl<'a> Apcb<'a> {
443443
size_of::<V2_HEADER>() + size_of::<V3_HEADER_EXT>();
444444
pub const MAX_SIZE: usize = 0x10000;
445445

446-
pub fn header(&self) -> Result<LayoutVerified<&[u8], V2_HEADER>> {
447-
LayoutVerified::<&[u8], V2_HEADER>::new_unaligned_from_prefix(
448-
&*self.backing_store,
449-
)
450-
.map(|(layout, _)| layout)
451-
.ok_or(Error::FileSystem(
452-
FileSystemError::InconsistentHeader,
453-
"V2_HEADER",
454-
))
446+
pub fn header(&self) -> Result<Ref<&[u8], V2_HEADER>> {
447+
Ref::<&[u8], V2_HEADER>::from_prefix(&*self.backing_store)
448+
.map(|(layout, _)| layout)
449+
.map_err(|_| {
450+
Error::FileSystem(
451+
FileSystemError::InconsistentHeader,
452+
"V2_HEADER",
453+
)
454+
})
455455
}
456456

457-
pub fn header_mut(
458-
&mut self,
459-
) -> Result<LayoutVerified<&mut [u8], V2_HEADER>> {
457+
pub fn header_mut(&mut self) -> Result<Ref<&mut [u8], V2_HEADER>> {
460458
#[cfg(not(feature = "std"))]
461459
let bs: &mut [u8] = self.backing_store;
462460
#[cfg(feature = "std")]
463461
let bs: &mut [u8] = self.backing_store.to_mut();
464-
LayoutVerified::<&mut [u8], V2_HEADER>::new_unaligned_from_prefix(bs)
462+
Ref::<&mut [u8], V2_HEADER>::from_prefix(bs)
465463
.map(|(layout, _)| layout)
466-
.ok_or(Error::FileSystem(
467-
FileSystemError::InconsistentHeader,
468-
"V2_HEADER",
469-
))
464+
.map_err(|_| {
465+
Error::FileSystem(
466+
FileSystemError::InconsistentHeader,
467+
"V2_HEADER",
468+
)
469+
})
470470
}
471471

472-
pub fn v3_header_ext(
473-
&self,
474-
) -> Result<Option<LayoutVerified<&[u8], V3_HEADER_EXT>>> {
472+
pub fn v3_header_ext(&self) -> Result<Option<Ref<&[u8], V3_HEADER_EXT>>> {
475473
let (header, rest) =
476-
LayoutVerified::<&[u8], V2_HEADER>::new_unaligned_from_prefix(
477-
&*self.backing_store,
478-
)
479-
.ok_or(Error::FileSystem(
480-
FileSystemError::InconsistentHeader,
481-
"V2_HEADER",
482-
))?;
474+
Ref::<&[u8], V2_HEADER>::from_prefix(&*self.backing_store)
475+
.map_err(|_| {
476+
Error::FileSystem(
477+
FileSystemError::InconsistentHeader,
478+
"V2_HEADER",
479+
)
480+
})?;
483481
let v3_header_ext =
484482
if usize::from(header.header_size) == Self::V3_HEADER_EXT_SIZE {
485-
let (ext, _) =
486-
LayoutVerified::<&[u8], V3_HEADER_EXT>
487-
::new_unaligned_from_prefix(rest)
488-
.ok_or(Error::FileSystem(
483+
let (ext, _) = Ref::<&[u8], V3_HEADER_EXT>::from_prefix(rest)
484+
.map_err(|_| {
485+
Error::FileSystem(
489486
FileSystemError::InconsistentHeader,
490487
"V3_HEADER_EXT",
491-
))?;
488+
)
489+
})?;
492490
Some(ext)
493491
} else {
494492
None
@@ -498,28 +496,28 @@ impl<'a> Apcb<'a> {
498496

499497
pub fn v3_header_ext_mut(
500498
&mut self,
501-
) -> Result<Option<LayoutVerified<&mut [u8], V3_HEADER_EXT>>> {
499+
) -> Result<Option<Ref<&mut [u8], V3_HEADER_EXT>>> {
502500
#[cfg(not(feature = "std"))]
503501
let bs: &mut [u8] = self.backing_store;
504502
#[cfg(feature = "std")]
505503
let bs: &mut [u8] = self.backing_store.to_mut();
506-
let (header, rest) =
507-
LayoutVerified::<&mut [u8], V2_HEADER>::new_unaligned_from_prefix(
508-
bs,
509-
)
510-
.ok_or(Error::FileSystem(
511-
FileSystemError::InconsistentHeader,
512-
"V2_HEADER",
513-
))?;
504+
let (header, rest) = Ref::<&mut [u8], V2_HEADER>::from_prefix(bs)
505+
.map_err(|_| {
506+
Error::FileSystem(
507+
FileSystemError::InconsistentHeader,
508+
"V2_HEADER",
509+
)
510+
})?;
514511
let v3_header_ext =
515512
if usize::from(header.header_size) == Self::V3_HEADER_EXT_SIZE {
516513
let (header_ext, _) =
517-
LayoutVerified::<&mut [u8], V3_HEADER_EXT>
518-
::new_unaligned_from_prefix(rest)
519-
.ok_or(Error::FileSystem(
520-
FileSystemError::InconsistentHeader,
521-
"V3_HEADER_EXT",
522-
))?;
514+
Ref::<&mut [u8], V3_HEADER_EXT>::from_prefix(rest)
515+
.map_err(|_| {
516+
Error::FileSystem(
517+
FileSystemError::InconsistentHeader,
518+
"V3_HEADER_EXT",
519+
)
520+
})?;
523521
Some(header_ext)
524522
} else {
525523
None
@@ -830,7 +828,9 @@ impl<'a> Apcb<'a> {
830828
/// a enum of struct refs (PlatformSpecificElementRef,
831829
/// PlatformTuningElementRef) or just one struct. Note: Currently,
832830
/// INSTANCE_ID is always supposed to be 0.
833-
pub fn insert_struct_array_as_entry<T: EntryCompatible + AsBytes>(
831+
pub fn insert_struct_array_as_entry<
832+
T: EntryCompatible + IntoBytes + Immutable + KnownLayout,
833+
>(
834834
&mut self,
835835
entry_id: EntryId,
836836
instance_id: u16,
@@ -871,7 +871,7 @@ impl<'a> Apcb<'a> {
871871
/// it. TAIL is allowed to be &[], and often has to be.
872872
/// Note: Currently, INSTANCE_ID is always supposed to be 0.
873873
pub fn insert_struct_entry<
874-
H: EntryCompatible + AsBytes + HeaderWithTail,
874+
H: EntryCompatible + IntoBytes + Immutable + KnownLayout + HeaderWithTail,
875875
>(
876876
&mut self,
877877
entry_id: EntryId,
@@ -1146,22 +1146,22 @@ impl<'a> Apcb<'a> {
11461146
}
11471147

11481148
pub(crate) fn calculate_checksum(
1149-
header: &LayoutVerified<&'_ [u8], V2_HEADER>,
1150-
v3_header_ext: &Option<LayoutVerified<&'_ [u8], V3_HEADER_EXT>>,
1149+
header: &Ref<&'_ [u8], V2_HEADER>,
1150+
v3_header_ext: &Option<Ref<&'_ [u8], V3_HEADER_EXT>>,
11511151
beginning_of_groups: &[u8],
11521152
) -> Result<u8> {
11531153
let mut checksum_byte = 0u8;
11541154
let stored_checksum_byte = header.checksum_byte;
1155-
for c in header.bytes() {
1155+
for c in header.as_bytes() {
11561156
checksum_byte = checksum_byte.wrapping_add(*c);
11571157
}
1158-
let mut offset = header.bytes().len();
1158+
let mut offset = header.as_bytes().len();
11591159
if let Some(v3_header_ext) = &v3_header_ext {
1160-
for c in v3_header_ext.bytes() {
1160+
for c in v3_header_ext.as_bytes() {
11611161
checksum_byte = checksum_byte.wrapping_add(*c);
11621162
}
11631163
offset = offset
1164-
.checked_add(v3_header_ext.bytes().len())
1164+
.checked_add(v3_header_ext.as_bytes().len())
11651165
.ok_or(Error::OutOfSpace)?;
11661166
}
11671167
let apcb_size = header.apcb_size.get();
@@ -1196,14 +1196,12 @@ impl<'a> Apcb<'a> {
11961196
#[cfg(feature = "std")]
11971197
let backing_store: &mut [u8] = bs.to_mut();
11981198

1199-
let (header, mut rest) =
1200-
LayoutVerified::<&[u8], V2_HEADER>::new_unaligned_from_prefix(
1201-
&*backing_store,
1202-
)
1203-
.ok_or(Error::FileSystem(
1204-
FileSystemError::InconsistentHeader,
1205-
"V2_HEADER",
1206-
))?;
1199+
let (header, mut rest) = Ref::<&[u8], V2_HEADER>::from_prefix(
1200+
&*backing_store,
1201+
)
1202+
.map_err(|_| {
1203+
Error::FileSystem(FileSystemError::InconsistentHeader, "V2_HEADER")
1204+
})?;
12071205

12081206
if header.signature != *b"APCB" {
12091207
return Err(Error::FileSystem(
@@ -1232,12 +1230,15 @@ impl<'a> Apcb<'a> {
12321230
let v3_header_ext = if usize::from(header.header_size)
12331231
== size_of::<V2_HEADER>() + size_of::<V3_HEADER_EXT>()
12341232
{
1235-
let (header_ext, restb) = LayoutVerified::<&[u8], V3_HEADER_EXT>
1236-
::new_unaligned_from_prefix(rest)
1237-
.ok_or(Error::FileSystem(
1238-
FileSystemError::InconsistentHeader,
1239-
"V3_HEADER_EXT",
1240-
))?;
1233+
let (header_ext, restb) = Ref::<&[u8], V3_HEADER_EXT>::from_prefix(
1234+
rest,
1235+
)
1236+
.map_err(|_| {
1237+
Error::FileSystem(
1238+
FileSystemError::InconsistentHeader,
1239+
"V3_HEADER_EXT",
1240+
)
1241+
})?;
12411242
let value = &*header_ext;
12421243
rest = restb;
12431244
if value.signature == *b"ECB2" {
@@ -1403,15 +1404,14 @@ impl<'a> Apcb<'a> {
14031404
header.apcb_size = (header.header_size.get() as u32).into();
14041405
}
14051406
let (header, rest) =
1406-
LayoutVerified::<&'_ [u8], V2_HEADER>::new_unaligned_from_prefix(
1407-
&*backing_store,
1408-
)
1409-
.unwrap();
1410-
let (v3_header_ext, rest) = LayoutVerified::<&'_ [u8], V3_HEADER_EXT>::new_unaligned_from_prefix(rest).unwrap();
1407+
Ref::<&'_ [u8], V2_HEADER>::from_prefix(&*backing_store).unwrap();
1408+
let (v3_header_ext, rest) =
1409+
Ref::<&'_ [u8], V3_HEADER_EXT>::from_prefix(rest).unwrap();
14111410
let checksum_byte =
14121411
Self::calculate_checksum(&header, &Some(v3_header_ext), rest)?;
14131412

1414-
let (mut header, _) = LayoutVerified::<&'_ mut [u8], V2_HEADER>::new_unaligned_from_prefix(backing_store).unwrap();
1413+
let (mut header, _) =
1414+
Ref::<&'_ mut [u8], V2_HEADER>::from_prefix(backing_store).unwrap();
14151415
header.checksum_byte = checksum_byte;
14161416
Self::load(bs, options)
14171417
}

0 commit comments

Comments
 (0)