<!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"/> <title>libnl: Abstract Data</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.7.3 --> <div id="top"> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">libnl <span id="projectnumber">1.1</span></div> </td> </tr> </tbody> </table> </div> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div> <div class="header"> <div class="headertitle"> <h1>Abstract Data</h1> </div> <div class="ingroups"><a class="el" href="group__utils.html">Utilities</a></div></div> <div class="contents"> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="member-group"></a> General</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct nl_data * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#gafd58c229c0e4dd4dcea07c8d8493c144">nl_data_alloc</a> (void *buf, size_t size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Allocate a new abstract data object. <a href="#gafd58c229c0e4dd4dcea07c8d8493c144"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct nl_data * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#ga64967fcb4916f66a2bd1a82292350e74">nl_data_clone</a> (struct nl_data *src)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Clone an abstract data object. <a href="#ga64967fcb4916f66a2bd1a82292350e74"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#ga81b8ad4a0fd04f8d80bafecc323f2a35">nl_data_append</a> (struct nl_data *data, void *buf, size_t size)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Append data to an abstract data object. <a href="#ga81b8ad4a0fd04f8d80bafecc323f2a35"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#ga35cbd02038e7abf0be6da4cb2a34189e">nl_data_free</a> (struct nl_data *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Free an abstract data object. <a href="#ga35cbd02038e7abf0be6da4cb2a34189e"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Attribute Access</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#ga1ca4b5ea3a92643c2fe94dd4eeef072b">nl_data_get</a> (struct nl_data *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Get data buffer of abstract data object. <a href="#ga1ca4b5ea3a92643c2fe94dd4eeef072b"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#ga6dbaf24a42f29514e30665c9e42a3d1c">nl_data_get_size</a> (struct nl_data *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Get size of data buffer of abstract data object. <a href="#ga6dbaf24a42f29514e30665c9e42a3d1c"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> Misc</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__data.html#ga232b75513b2aa66e91d5eb51e2a22b12">nl_data_cmp</a> (struct nl_data *a, struct nl_data *b)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Compare two abstract data objects. <a href="#ga232b75513b2aa66e91d5eb51e2a22b12"></a><br/></td></tr> </table> <hr/><h2>Function Documentation</h2> <a class="anchor" id="gafd58c229c0e4dd4dcea07c8d8493c144"></a><!-- doxytag: member="data.c::nl_data_alloc" ref="gafd58c229c0e4dd4dcea07c8d8493c144" args="(void *buf, size_t size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct nl_data* nl_data_alloc </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">buf</td><td>Data buffer containing the actual data. </td></tr> <tr><td class="paramname">size</td><td>Size of data buffer.</td></tr> </table> </dd> </dl> <p>Allocates a new abstract data and copies the specified data buffer into the new handle.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>Newly allocated data handle or NULL </dd></dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00038">38</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <p>Referenced by <a class="el" href="data_8c_source.html#l00069">nl_data_clone()</a>, and <a class="el" href="attr_8c_source.html#l00777">nla_get_data()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keyword">struct </span>nl_data *data; data = calloc(1, <span class="keyword">sizeof</span>(*data)); <span class="keywordflow">if</span> (!data) <span class="keywordflow">goto</span> errout; data->d_data = calloc(1, size); <span class="keywordflow">if</span> (!data->d_data) { free(data); <span class="keywordflow">goto</span> errout; } data->d_size = size; <span class="keywordflow">if</span> (buf) memcpy(data->d_data, buf, size); <span class="keywordflow">return</span> data; errout: nl_errno(ENOMEM); <span class="keywordflow">return</span> NULL; } </pre></div> </div> </div> <a class="anchor" id="ga64967fcb4916f66a2bd1a82292350e74"></a><!-- doxytag: member="data.c::nl_data_clone" ref="ga64967fcb4916f66a2bd1a82292350e74" args="(struct nl_data *src)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct nl_data* nl_data_clone </td> <td>(</td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>src</em></td><td>)</td> <td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>Abstract data object</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Cloned object or NULL </dd></dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00069">69</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <p>References <a class="el" href="data_8c_source.html#l00038">nl_data_alloc()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">return</span> <a class="code" href="group__data.html#gafd58c229c0e4dd4dcea07c8d8493c144" title="Allocate a new abstract data object.">nl_data_alloc</a>(src->d_data, src->d_size); } </pre></div> </div> </div> <a class="anchor" id="ga81b8ad4a0fd04f8d80bafecc323f2a35"></a><!-- doxytag: member="data.c::nl_data_append" ref="ga81b8ad4a0fd04f8d80bafecc323f2a35" args="(struct nl_data *data, void *buf, size_t size)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int nl_data_append </td> <td>(</td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>size</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">data</td><td>Abstract data object. </td></tr> <tr><td class="paramname">buf</td><td>Data buffer containing the data to be appended. </td></tr> <tr><td class="paramname">size</td><td>Size of data to be apppended.</td></tr> </table> </dd> </dl> <p>Reallocates an abstract data and copies the specified data buffer into the new handle.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>0 on success or a negative error code </dd></dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00085">85</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <p>Referenced by <a class="el" href="u32_8c_source.html#l00470">rtnl_u32_add_key()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (size < 0) BUG(); <span class="keywordflow">if</span> (size > 0) { data->d_data = realloc(data->d_data, data->d_size + size); <span class="keywordflow">if</span> (!data->d_data) <span class="keywordflow">return</span> nl_errno(ENOMEM); <span class="keywordflow">if</span> (buf) memcpy(data->d_data + data->d_size, buf, size); <span class="keywordflow">else</span> memset(data->d_data + data->d_size, 0, size); data->d_size += size; } <span class="keywordflow">return</span> 0; } </pre></div> </div> </div> <a class="anchor" id="ga35cbd02038e7abf0be6da4cb2a34189e"></a><!-- doxytag: member="data.c::nl_data_free" ref="ga35cbd02038e7abf0be6da4cb2a34189e" args="(struct nl_data *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void nl_data_free </td> <td>(</td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>data</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">data</td><td>Abstract data object. </td></tr> </table> </dd> </dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00110">110</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">if</span> (data) free(data->d_data); free(data); } </pre></div> </div> </div> <a class="anchor" id="ga1ca4b5ea3a92643c2fe94dd4eeef072b"></a><!-- doxytag: member="data.c::nl_data_get" ref="ga1ca4b5ea3a92643c2fe94dd4eeef072b" args="(struct nl_data *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void* nl_data_get </td> <td>(</td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>data</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">data</td><td>Abstract data object. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Data buffer or NULL if empty. </dd></dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00130">130</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <p>Referenced by <a class="el" href="data_8c_source.html#l00160">nl_data_cmp()</a>, and <a class="el" href="attr_8c_source.html#l00624">nla_put_data()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">return</span> data->d_size > 0 ? data->d_data : NULL; } </pre></div> </div> </div> <a class="anchor" id="ga6dbaf24a42f29514e30665c9e42a3d1c"></a><!-- doxytag: member="data.c::nl_data_get_size" ref="ga6dbaf24a42f29514e30665c9e42a3d1c" args="(struct nl_data *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t nl_data_get_size </td> <td>(</td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>data</em></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">data</td><td>Abstract data object. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Size of data buffer. </dd></dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00140">140</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <p>Referenced by <a class="el" href="data_8c_source.html#l00160">nl_data_cmp()</a>, and <a class="el" href="attr_8c_source.html#l00624">nla_put_data()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordflow">return</span> data->d_size; } </pre></div> </div> </div> <a class="anchor" id="ga232b75513b2aa66e91d5eb51e2a22b12"></a><!-- doxytag: member="data.c::nl_data_cmp" ref="ga232b75513b2aa66e91d5eb51e2a22b12" args="(struct nl_data *a, struct nl_data *b)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int nl_data_cmp </td> <td>(</td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>a</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct nl_data * </td> <td class="paramname"><em>b</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <dl><dt><b>Parameters:</b></dt><dd> <table class="params"> <tr><td class="paramname">a</td><td>Abstract data object. </td></tr> <tr><td class="paramname">b</td><td>Another abstract data object. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>An integer less than, equal to, or greater than zero if a is found, respectively, to be less than, to match, or be greater than b. </dd></dl> <p>Definition at line <a class="el" href="data_8c_source.html#l00160">160</a> of file <a class="el" href="data_8c_source.html">data.c</a>.</p> <p>References <a class="el" href="data_8c_source.html#l00130">nl_data_get()</a>, and <a class="el" href="data_8c_source.html#l00140">nl_data_get_size()</a>.</p> <div class="fragment"><pre class="fragment">{ <span class="keywordtype">void</span> *a_ = <a class="code" href="group__data.html#ga1ca4b5ea3a92643c2fe94dd4eeef072b" title="Get data buffer of abstract data object.">nl_data_get</a>(a); <span class="keywordtype">void</span> *b_ = <a class="code" href="group__data.html#ga1ca4b5ea3a92643c2fe94dd4eeef072b" title="Get data buffer of abstract data object.">nl_data_get</a>(b); <span class="keywordflow">if</span> (a_ && b_) <span class="keywordflow">return</span> memcmp(a_, b_, <a class="code" href="group__data.html#ga6dbaf24a42f29514e30665c9e42a3d1c" title="Get size of data buffer of abstract data object.">nl_data_get_size</a>(a)); <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1; } </pre></div> </div> </div> </div> <hr class="footer"/><address class="footer"><small>Generated on Mon Mar 21 2011 for libnl by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </small></address> </body> </html>