<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>pxattr: pxattr Namespace Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">pxattr
 <span id="projectnumber">2.1</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<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 id="navrow2" class="tabs2">
<ul class="tablist">
<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><!-- top -->
<div class="header">
<div class="summary">
<a href="#enum-members">Enumerations</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">pxattr Namespace Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:abf2cfc33fa527183f256c153473103fe"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> { <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>
}</td></tr>
<tr class="memdesc:abf2cfc33fa527183f256c153473103fe"><td class="mdescLeft"> </td><td class="mdescRight">nspace might be used in the future if we support multiple namespaces. <a href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">More...</a><br/></td></tr>
<tr class="memitem:a88c43c8e60bffbc7d2978a316c26c057"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> { <b>PXATTR_NONE</b> = 0,
<a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057a838c34be5cf3e65fb197079dd07a90df">PXATTR_NOFOLLOW</a> = 1,
<a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057ac07bacf856d30b9a1690844f2922d7c4">PXATTR_CREATE</a> = 2,
<a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057a523c6cf55b7740a23138cffdabf361cd">PXATTR_REPLACE</a> = 4
}</td></tr>
<tr class="memdesc:a88c43c8e60bffbc7d2978a316c26c057"><td class="mdescLeft"> </td><td class="mdescRight">Flags can modify the behaviour of some methods. <a href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">More...</a><br/></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ab2a3443e334d0e0aaa6b604a34af59e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2a3443e334d0e0aaa6b604a34af59e5"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#ab2a3443e334d0e0aaa6b604a34af59e5">get</a> (const string &path, const string &name, string *value, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:ab2a3443e334d0e0aaa6b604a34af59e5"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the named attribute from path. <br/></td></tr>
<tr class="memitem:a84b73bf47f2c08df18f15397c5df06ea"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84b73bf47f2c08df18f15397c5df06ea"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#a84b73bf47f2c08df18f15397c5df06ea">get</a> (int fd, const string &name, string *value, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:a84b73bf47f2c08df18f15397c5df06ea"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the named attribute from open file. <br/></td></tr>
<tr class="memitem:a3afa3c80d85fd95732204f1eb05970e0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3afa3c80d85fd95732204f1eb05970e0"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#a3afa3c80d85fd95732204f1eb05970e0">set</a> (const string &path, const string &name, const string &value, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:a3afa3c80d85fd95732204f1eb05970e0"><td class="mdescLeft"> </td><td class="mdescRight">Set the named attribute on path. <br/></td></tr>
<tr class="memitem:ae798b3faeed9b7a1323ebbed9bd7885a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae798b3faeed9b7a1323ebbed9bd7885a"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#ae798b3faeed9b7a1323ebbed9bd7885a">set</a> (int fd, const string &name, const string &value, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:ae798b3faeed9b7a1323ebbed9bd7885a"><td class="mdescLeft"> </td><td class="mdescRight">Set the named attribute on open file. <br/></td></tr>
<tr class="memitem:a6b01dcfb8d96b683086da3224d59f54a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6b01dcfb8d96b683086da3224d59f54a"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#a6b01dcfb8d96b683086da3224d59f54a">del</a> (const string &path, const string &name, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:a6b01dcfb8d96b683086da3224d59f54a"><td class="mdescLeft"> </td><td class="mdescRight">Delete the named attribute from path. <br/></td></tr>
<tr class="memitem:ab2e4c85016a91b7686f72de448ad0118"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2e4c85016a91b7686f72de448ad0118"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#ab2e4c85016a91b7686f72de448ad0118">del</a> (int fd, const string &name, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:ab2e4c85016a91b7686f72de448ad0118"><td class="mdescLeft"> </td><td class="mdescRight">Delete the named attribute from open file. <br/></td></tr>
<tr class="memitem:a766ce3b2c1ee4baef676782285cdd046"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a766ce3b2c1ee4baef676782285cdd046"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#a766ce3b2c1ee4baef676782285cdd046">list</a> (const string &path, vector< string > *names, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:a766ce3b2c1ee4baef676782285cdd046"><td class="mdescLeft"> </td><td class="mdescRight">List attribute names from path. <br/></td></tr>
<tr class="memitem:abf27342147024ad703b0f7e768c008de"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf27342147024ad703b0f7e768c008de"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#abf27342147024ad703b0f7e768c008de">list</a> (int fd, vector< string > *names, <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a> <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">flags</a>=PXATTR_NONE, <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom=<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3">PXATTR_USER</a>)</td></tr>
<tr class="memdesc:abf27342147024ad703b0f7e768c008de"><td class="mdescLeft"> </td><td class="mdescRight">List attribute names from open file. <br/></td></tr>
<tr class="memitem:a5de2ca786678c028f924aa36c68ae3d5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5de2ca786678c028f924aa36c68ae3d5"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#a5de2ca786678c028f924aa36c68ae3d5">sysname</a> (<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom, const string &pname, string *sname)</td></tr>
<tr class="memdesc:a5de2ca786678c028f924aa36c68ae3d5"><td class="mdescLeft"> </td><td class="mdescRight">Compute actual/system attribute name from external name (ie: myattr->user.myattr) <br/></td></tr>
<tr class="memitem:ae2e3adcdd451c56f6ecf10ce032af46c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2e3adcdd451c56f6ecf10ce032af46c"></a>
bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacepxattr.html#ae2e3adcdd451c56f6ecf10ce032af46c">pxname</a> (<a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">nspace</a> dom, const string &sname, string *pname)</td></tr>
<tr class="memdesc:ae2e3adcdd451c56f6ecf10ce032af46c"><td class="mdescLeft"> </td><td class="mdescRight">Compute external name from actual/system name (ie: user.myattr->myattr) <br/></td></tr>
</table>
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>Provide a uniform C++ API for extended file attributes on Linux/FreeBSD and MacOSX. </p>
<p>We only deal with user attributes. Other namespaces are very system-specific and would be difficult to use in a portable way.</p>
<p>Linux and FreeBSD treat differently the attributes name space segmentation: Linux uses the first name segment ("user.", "system.", ...), FreeBSD uses an enumeration.</p>
<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'. pxattr will deal with adding/removing the 'user.' part as needed.</p>
<p>MacOsX does not segment the attribute name space.</p>
<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>
<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>
<p>Diagnostics: all functions return false on error, and preserve the errno value or set it as appropriate.</p>
<p>For path-based interfaces, the PXATTR_NOFOLLOW flag can be set to decide if symbolic links will be acted on or followed. </p>
</div><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="a88c43c8e60bffbc7d2978a316c26c057"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacepxattr.html#a88c43c8e60bffbc7d2978a316c26c057">pxattr::flags</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Flags can modify the behaviour of some methods. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a88c43c8e60bffbc7d2978a316c26c057a838c34be5cf3e65fb197079dd07a90df"></a>PXATTR_NOFOLLOW</em> </td><td>
<p>Act on link instead of following it. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a88c43c8e60bffbc7d2978a316c26c057ac07bacf856d30b9a1690844f2922d7c4"></a>PXATTR_CREATE</em> </td><td>
<p>Fail if existing. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a88c43c8e60bffbc7d2978a316c26c057a523c6cf55b7740a23138cffdabf361cd"></a>PXATTR_REPLACE</em> </td><td>
<p>Fail if new. </p>
</td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="abf2cfc33fa527183f256c153473103fe"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="namespacepxattr.html#abf2cfc33fa527183f256c153473103fe">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><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="abf2cfc33fa527183f256c153473103feacea7941688fff81a2178dd73fdaebda3"></a>PXATTR_USER</em> </td><td>
<p>User name space. </p>
</td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Feb 4 2013 14:20:24 for pxattr by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>