Skip to main content

XattrEntry

Struct XattrEntry 

Source
#[non_exhaustive]
pub struct XattrEntry { pub name: String, pub value: Vec<u8>, pub value_inum: u32, pub value_size: u32, }
Expand description

One parsed xattr entry: fully-qualified name + raw value bytes.

#[non_exhaustive] (#120): the fields stay public to read, but a struct literal outside this crate is refused, so the next field the on-disk entry needs is not a break. Build one with XattrEntry::new or XattrEntry::in_ea_inode.

Equality covers every field, value_inum and value_size included: an entry whose value lives in an EA inode never equals an inline one, even with the same name.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§name: String

Fully-qualified name, e.g. “user.com.apple.FinderInfo”.

§value: Vec<u8>

Raw value bytes (Finder uses binary data, ACLs are binary, etc.).

Empty when value_inum is non-zero, because the bytes are not in the region this was parsed from. See read_all.

§value_inum: u32

e_value_inum. Zero for an ordinary entry whose value is stored inline. Non-zero when INCOMPAT_EA_INODE is in play and the value lives in the file body of that inode instead — in which case e_value_offs describes nothing and value above is empty.

Resolving it needs a crate::fs::Filesystem, which the buffer-level parsers do not have; read_all_resolved is the entry point that follows it.

§value_size: u32

e_value_size — how long the entry says its value is.

KEPT EVEN THOUGH THE INLINE CASE HAS ALREADY USED IT, because the EA-inode case has not: the value then comes from another inode’s body, and without this there is nothing to compare what was read against. The kernel makes exactly that comparison and fails with EUCLEAN when the two disagree; this driver returned the EA inode’s whole body and reported success (#121).

Implementations§

Source§

impl XattrEntry

Source

pub fn new(name: impl Into<String>, value: impl Into<Vec<u8>>) -> Self

An entry whose value is stored inline, as the parsers produce one: value_inum zero and value_size the value’s length.

Panics if the value is longer than u32::MAX bytes, which no ext4 entry can describe.

Source

pub fn in_ea_inode( name: impl Into<String>, value_inum: u32, value_size: u32, ) -> Self

An entry whose value lives in the body of EA inode value_inum, as the parsers produce one: value empty, and value_size the length the entry declares.

Trait Implementations§

Source§

impl Clone for XattrEntry

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for XattrEntry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for XattrEntry

Source§

impl PartialEq for XattrEntry

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for XattrEntry

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.