mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
This is a subset of the Rust `zerocopy` crate, version v0.8.50 (released
2026-05-31), licensed under "BSD-2-Clause OR Apache-2.0 OR MIT", from:
https://github.com/google/zerocopy/tree/v0.8.50
The files are copied as-is, with no modifications whatsoever (not even
adding the SPDX identifiers).
The `benches` folder is added (i.e. not just `src` like in other cases)
since the files there are included in the rendered documentation,
as well as the `rustdoc` CSS style file that is needed to make those
visually more understandable.
For copyright details, please see:
https://github.com/google/zerocopy/blob/v0.8.50/README.md?plain=1
https://github.com/google/zerocopy/blob/v0.8.50/LICENSE-BSD
https://github.com/google/zerocopy/blob/v0.8.50/LICENSE-APACHE
https://github.com/google/zerocopy/blob/v0.8.50/LICENSE-MIT
The next two patches modify these files as needed for use within the
kernel. This patch split allows reviewers to double-check the import
and to clearly see the differences introduced.
The following script may be used to verify the contents:
for path in $(cd rust/zerocopy/ && find . -type f); do
curl --silent --show-error --location \
https://github.com/google/zerocopy/raw/v0.8.50/$path \
| diff --unified rust/zerocopy/$path - && echo $path: OK
done
Cc: Joshua Liebow-Feeser <joshlf@google.com>
Cc: Jack Wrenn <jswrenn@google.com>
Link: https://patch.msgid.link/20260608141439.182634-9-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
25 lines
589 B
Rust
25 lines
589 B
Rust
use zerocopy_derive::*;
|
|
|
|
// The only valid value of this type are the bytes `0xC0C0`.
|
|
#[derive(TryFromBytes, KnownLayout, Immutable)]
|
|
#[repr(u16)]
|
|
pub enum C0C0 {
|
|
_XC0C0 = 0xC0C0,
|
|
}
|
|
|
|
#[derive(FromBytes, KnownLayout, Immutable, SplitAt)]
|
|
#[repr(C, align(4))]
|
|
pub struct Packet<Magic> {
|
|
magic_number: Magic,
|
|
milk: u8,
|
|
mug_size: u8,
|
|
temperature: [u8; 5],
|
|
marshmallows: [[u8; 3]],
|
|
}
|
|
|
|
/// A packet begining with the magic number `0xC0C0`.
|
|
pub type CocoPacket = Packet<C0C0>;
|
|
|
|
/// A packet beginning with any two initialized bytes.
|
|
pub type LocoPacket = Packet<[u8; 2]>;
|