pxattr
1.0
|
Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX. More...
Enumerations | |
enum | nspace { PXATTR_USER } |
nspace might be used in the future if we support multiple namespaces. More... | |
enum | flags { PXATTR_NONE = 0, PXATTR_NOFOLLOW = 1, PXATTR_CREATE = 2, PXATTR_REPLACE = 4 } |
Flags can modify the behaviour of some methods. More... |
Functions | |
bool | get (const string &path, const string &name, string *value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
Retrieve the named attribute from path. | |
bool | get (int fd, const string &name, string *value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
Retrieve the named attribute from open file. | |
bool | set (const string &path, const string &name, const string &value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
Set the named attribute on path. | |
bool | set (int fd, const string &name, const string &value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
Set the named attribute on open file. | |
bool | del (const string &path, const string &name, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
Delete the named attribute from path. | |
bool | del (int fd, const string &name, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
Delete the named attribute from open file. | |
bool | list (const string &path, vector< string > *names, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
List attribute names from path. | |
bool | list (int fd, vector< string > *names, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER) |
List attribute names from open file. | |
bool | sysname (nspace dom, const string &pname, string *sname) |
Compute actual/system attribute name from external name (ie: myattr->user.myattr) | |
bool | pxname (nspace dom, const string &sname, string *pname) |
Compute external name from actual/system name (ie: user.myattr->myattr) |
Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX.
We only deal with user attributes. Other namespaces are very system-specific and would be difficult to use in a portable way.
Linux and FreeBSD treat differently the attributes name space segmentation: Linux uses the first name segment ("user.", "system.", ...), FreeBSD uses an enumeration.
We handle this by using only domain-internal names in the interface: that is, the caller specifies the names as, ie, 'org.myapp.somename' not 'user.org.myapp.somename'. pxattr will deal with adding/removing the 'user.' part as needed.
MacOsX does not segment the attribute name space.
In order to avoid conflicts, it is recommended that attributes names be chosen in a "reverse dns" fashion, ie: org.recoll.indexing.status
The interface provided should work the same way on all 3 systems, it papers over such differences as the "list" output format, the existence of CREATE/UPDATE distinctions, etc.
Diagnostics: all functions return false on error, and preserve the errno value or set it as appropriate.
For path-based interfaces, the PXATTR_NOFOLLOW flag can be set to decide if symbolic links will be acted on or followed.
enum pxattr::flags |
enum pxattr::nspace |