#[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
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.name: StringFully-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: u32e_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: u32e_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).