<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>pxattr: pxattr Namespace Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="namespaces.html"><span>Namespace List</span></a></li>
<li><a href="namespacemembers.html"><span>Namespace Members</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>pxattr Namespace Reference</h1>Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX.
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> { <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fecea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>
}</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">nspace might be used in the future if we support multiple namespaces. <a href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> { <b>PXATTR_NONE</b> = 0,
<a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057838c34be5cf3e65fb197079dd07a90df">PXATTR_NOFOLLOW</a> = 1,
<a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057c07bacf856d30b9a1690844f2922d7c4">PXATTR_CREATE</a> = 2,
<a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057523c6cf55b7740a23138cffdabf361cd">PXATTR_REPLACE</a> = 4
}</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Flags can modify the behaviour of some methods. <a href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2a3443e334d0e0aaa6b604a34af59e5"></a><!-- doxytag: member="pxattr::get" ref="b2a3443e334d0e0aaa6b604a34af59e5" args="(const string &path, const string &name, string *value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#b2a3443e334d0e0aaa6b604a34af59e5">get</a> (const string &path, const string &name, string *value, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the named attribute from path. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="84b73bf47f2c08df18f15397c5df06ea"></a><!-- doxytag: member="pxattr::get" ref="84b73bf47f2c08df18f15397c5df06ea" args="(int fd, const string &name, string *value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#84b73bf47f2c08df18f15397c5df06ea">get</a> (int fd, const string &name, string *value, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the named attribute from open file. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3afa3c80d85fd95732204f1eb05970e0"></a><!-- doxytag: member="pxattr::set" ref="3afa3c80d85fd95732204f1eb05970e0" args="(const string &path, const string &name, const string &value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#3afa3c80d85fd95732204f1eb05970e0">set</a> (const string &path, const string &name, const string &value, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the named attribute on path. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e798b3faeed9b7a1323ebbed9bd7885a"></a><!-- doxytag: member="pxattr::set" ref="e798b3faeed9b7a1323ebbed9bd7885a" args="(int fd, const string &name, const string &value, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#e798b3faeed9b7a1323ebbed9bd7885a">set</a> (int fd, const string &name, const string &value, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the named attribute on open file. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b01dcfb8d96b683086da3224d59f54a"></a><!-- doxytag: member="pxattr::del" ref="6b01dcfb8d96b683086da3224d59f54a" args="(const string &path, const string &name, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#6b01dcfb8d96b683086da3224d59f54a">del</a> (const string &path, const string &name, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Delete the named attribute from path. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2e4c85016a91b7686f72de448ad0118"></a><!-- doxytag: member="pxattr::del" ref="b2e4c85016a91b7686f72de448ad0118" args="(int fd, const string &name, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#b2e4c85016a91b7686f72de448ad0118">del</a> (int fd, const string &name, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Delete the named attribute from open file. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="766ce3b2c1ee4baef676782285cdd046"></a><!-- doxytag: member="pxattr::list" ref="766ce3b2c1ee4baef676782285cdd046" args="(const string &path, vector< string > *names, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#766ce3b2c1ee4baef676782285cdd046">list</a> (const string &path, vector< string > *names, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">List attribute names from path. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf27342147024ad703b0f7e768c008de"></a><!-- doxytag: member="pxattr::list" ref="bf27342147024ad703b0f7e768c008de" args="(int fd, vector< string > *names, flags flags=PXATTR_NONE, nspace dom=PXATTR_USER)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#bf27342147024ad703b0f7e768c008de">list</a> (int fd, vector< string > *names, <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom=PXATTR_USER)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">List attribute names from open file. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5de2ca786678c028f924aa36c68ae3d5"></a><!-- doxytag: member="pxattr::sysname" ref="5de2ca786678c028f924aa36c68ae3d5" args="(nspace dom, const string &pname, string *sname)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#5de2ca786678c028f924aa36c68ae3d5">sysname</a> (<a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom, const string &pname, string *sname)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute actual/system attribute name from external name (ie: myattr->user.myattr). <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e2e3adcdd451c56f6ecf10ce032af46c"></a><!-- doxytag: member="pxattr::pxname" ref="e2e3adcdd451c56f6ecf10ce032af46c" args="(nspace dom, const string &sname, string *pname)" -->
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#e2e3adcdd451c56f6ecf10ce032af46c">pxname</a> (<a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">nspace</a> dom, const string &sname, string *pname)</td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute external name from actual/system name (ie: user.myattr->myattr). <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX.
<p>
We only deal with user attributes. Other namespaces are very system-specific and would be difficult to use in a portable way.<p>
Linux and FreeBSD treat differently the attributes name space segmentation: Linux uses the first name segment ("user.", "system.", ...), FreeBSD uses an enumeration.<p>
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'. <a class="el" href="namespacepxattr.html" title="Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX...">pxattr</a> will deal with adding/removing the 'user.' part as needed.<p>
MacOsX does not segment the attribute name space.<p>
In order to avoid conflicts, it is recommended that attributes names be chosen in a "reverse dns" fashion, ie: org.recoll.indexing.status<p>
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.<p>
Diagnostics: all functions return false on error, and preserve the errno value or set it as appropriate.<p>
For path-based interfaces, the PXATTR_NOFOLLOW flag can be set to decide if symbolic links will be acted on or followed. <hr><h2>Enumeration Type Documentation</h2>
<a class="anchor" name="88c43c8e60bffbc7d2978a316c26c057"></a><!-- doxytag: member="pxattr::flags" ref="88c43c8e60bffbc7d2978a316c26c057" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacepxattr.html#88c43c8e60bffbc7d2978a316c26c057">pxattr::flags</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Flags can modify the behaviour of some methods.
<p>
<dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="88c43c8e60bffbc7d2978a316c26c057838c34be5cf3e65fb197079dd07a90df"></a><!-- doxytag: member="PXATTR_NOFOLLOW" ref="88c43c8e60bffbc7d2978a316c26c057838c34be5cf3e65fb197079dd07a90df" args="" -->PXATTR_NOFOLLOW</em> </td><td>
Act on link instead of following it. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="88c43c8e60bffbc7d2978a316c26c057c07bacf856d30b9a1690844f2922d7c4"></a><!-- doxytag: member="PXATTR_CREATE" ref="88c43c8e60bffbc7d2978a316c26c057c07bacf856d30b9a1690844f2922d7c4" args="" -->PXATTR_CREATE</em> </td><td>
Fail if existing. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="88c43c8e60bffbc7d2978a316c26c057523c6cf55b7740a23138cffdabf361cd"></a><!-- doxytag: member="PXATTR_REPLACE" ref="88c43c8e60bffbc7d2978a316c26c057523c6cf55b7740a23138cffdabf361cd" args="" -->PXATTR_REPLACE</em> </td><td>
Fail if new. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="bf2cfc33fa527183f256c153473103fe"></a><!-- doxytag: member="pxattr::nspace" ref="bf2cfc33fa527183f256c153473103fe" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacepxattr.html#bf2cfc33fa527183f256c153473103fe">pxattr::nspace</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
nspace might be used in the future if we support multiple namespaces.
<p>
<dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="bf2cfc33fa527183f256c153473103fecea7941688fff81a2178dd73fdaebda3"></a><!-- doxytag: member="PXATTR_USER" ref="bf2cfc33fa527183f256c153473103fecea7941688fff81a2178dd73fdaebda3" args="" -->PXATTR_USER</em> </td><td>
User name space. </td></tr>
</table>
</dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jan 20 15:42:34 2009 for pxattr by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>