Crates.io | extattr |
lib.rs | extattr |
version | 1.0.0 |
source | src |
created_at | 2022-11-02 09:55:47.579466 |
updated_at | 2022-12-09 14:05:33.823685 |
description | Extended Attributes API bindings for Rust |
homepage | |
repository | https://github.com/SteveLauC/extattr |
max_upload_size | |
id | 703375 |
size | 127,549 |
Yet another Extended Attributes library for Rust.
xattr
?Extended Attributes syscalls vary across implementations, for example, to set an EA:
// Linux
int setxattr(const char *path, const char *name, const void *value,
size_t size, int flags);
// FreeBSD
ssize_t extattr_set_file(const char *path, int attrnamespace,
const char *attrname, const void *data, size_t nbytes);
// macOS
int setxattr(const char *path, const char *name, void *value, size_t size,
u_int32_t position, int options);
xattr
erases differences in those APIs and provides a consistent, rusty
interface.
// A consistent API that would work on every OS
pub fn set<N, P>(path: P, name: N, value: &[u8]) -> Result<()>
extattr
aims to provide bindings close to the native one.
// Linux
pub fn setxattr<P, S, B>(
path: P,
name: S,
value: B,
flags: Flags,
) -> Result<()>
// FreeBSD
pub fn extattr_set_file<P, S, B>(
path: P,
attrnamespace: AttrNamespace,
attrname: S,
data: B
) -> Result<()>
// macOS
pub fn setxattr<P, S, B>(
path: P,
name: S,
value: B,
position: u32,
options: Options
) -> Result<()>
In most cases, you would like to use xattr
instead of extattr
. However, if
you are on Linux and want to use that extra flags
argument, or you are on macOS
and want to use the arguments position
and options
, then extattr
probably
is a good choice:)
extattr
is supported on Rust 1.56.1 and higher. The MSRV will not be changed
without bumping the major version.
Contributions of all forms are welcome, feel free to file an issue or make a pull request!
Format the code
$ cargo fmt
Pass the tests
$ cargo test