8000 GitHub - SteveLauC/extattr: Yet another Extended Attributes library for Rust.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

SteveLauC/extattr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

extattr

Cirrus Build Status crates.io Crates.io docs.rs MSRV License

Yet another Extended Attributes library for Rust.

Table of contents

Supported platforms and their documents

Why another crate for EA? Any difference from 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, siz
7A40
e_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:)

Minimum Supported Rust Version (MSRV)

extattr is supported on Rust 1.56.1 and higher. The MSRV will not be changed without bumping the major version.

Contributing

Contributions of all forms are welcome, feel free to file an issue or make a pull request!

Test before your commit
  1. Format the code

    $ cargo fmt
  2. Pass the tests

    $ cargo test

About

Yet another Extended Attributes library for Rust.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0