<!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>Open SCAP Library: /home/pvrabec/openscap/openscap-0.5.7/src/common/util.h File Reference</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.6.1 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</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 class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> </div> <div class="contents"> <h1>/home/pvrabec/openscap/openscap-0.5.7/src/common/util.h File Reference</h1> <p>Common openscap utilities. <a href="#_details">More...</a></p> <code>#include <stdbool.h></code><br/> <code>#include <assert.h></code><br/> <code>#include "<a class="el" href="oscap_8h_source.html">public/oscap.h</a>"</code><br/> <code>#include "<a class="el" href="alloc_8h_source.html">public/alloc.h</a>"</code><br/> <p><a href="util_8h_source.html">Go to the source code of this file.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Data Structures</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structoscap__string__map.html">oscap_string_map</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Define mapping between symbolic constant and its string representation. <a href="structoscap__string__map.html#_details">More...</a><br/></td></tr> <tr><td colspan="2"><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1babff1afca81ac7c0fed50144d104fe"></a><!-- doxytag: member="util.h::__attribute__nonnull__" ref="a1babff1afca81ac7c0fed50144d104fe" args="(x)" --> #define </td><td class="memItemRight" valign="bottom"><b>__attribute__nonnull__</b>(x) assert((x) != NULL)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a563cdd8c1ef729ddb0efdcebb4d8454e"></a><!-- doxytag: member="util.h::OSCAP_HIDDEN_START" ref="a563cdd8c1ef729ddb0efdcebb4d8454e" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_HIDDEN_START</b> _Pragma("GCC visibility push(hidden)")</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af782b788db57b27e85421ab639b2b107"></a><!-- doxytag: member="util.h::OSCAP_HIDDEN_END" ref="af782b788db57b27e85421ab639b2b107" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_HIDDEN_END</b> _Pragma("GCC visibility pop")</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a07984eadc1820caddf5fb09f8cc5f461">OSCAP_GENERIC_GETTER_CONV</a>(RTYPE, CONV, SNAME, MNAME, MEXP) RTYPE SNAME##_get_##MNAME(const struct SNAME* item) { return (CONV(item->MEXP)); }</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a getter function with an optional conversion. <a href="#a07984eadc1820caddf5fb09f8cc5f461"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a6537fbd7378c67b0a5cd34fbbb46cf32">OSCAP_GENERIC_GETTER</a>(RTYPE, SNAME, MNAME, MEXP) OSCAP_GENERIC_GETTER_CONV(RTYPE,,SNAME,MNAME,MEXP)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a getter function. <a href="#a6537fbd7378c67b0a5cd34fbbb46cf32"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a2b5200ab726de57e775442cd5e6ea1c5">OSCAP_GENERIC_GETTER_FORCE</a>(RTYPE, SNAME, MNAME, MEXP) OSCAP_GENERIC_GETTER_CONV(RTYPE,(RTYPE),SNAME,MNAME,MEXP)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a getter function with an explicit conversion to the target data type. <a href="#a2b5200ab726de57e775442cd5e6ea1c5"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a5b75e45a0f724a333b5da13bde0686ef">OSCAP_GETTER_FORCE</a>(RTYPE, SNAME, MNAME) OSCAP_GENERIC_GETTER_FORCE(RTYPE,SNAME,MNAME,MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a getter function with an explicit conversion to the target data type. <a href="#a5b75e45a0f724a333b5da13bde0686ef"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#af0a2de3832f32a04e83b9fbfb5073541">OSCAP_GETTER</a>(RTYPE, SNAME, MNAME) OSCAP_GENERIC_GETTER(RTYPE,SNAME,MNAME,MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a getter function. <a href="#af0a2de3832f32a04e83b9fbfb5073541"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54330470d99c66955d018842686a4c08"></a><!-- doxytag: member="util.h::ITERATOR_CAST" ref="a54330470d99c66955d018842686a4c08" args="(x)" --> #define </td><td class="memItemRight" valign="bottom"><b>ITERATOR_CAST</b>(x) ((struct <a class="el" href="structoscap__iterator.html">oscap_iterator</a>*)(x))</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aac231feffce19c6fb9e99436e078390a"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR" ref="aac231feffce19c6fb9e99436e078390a" args="(n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR</b>(n) struct n##_iterator*</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5fd8671683f834ec3286535ab8c81bc6"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_FWD" ref="a5fd8671683f834ec3286535ab8c81bc6" args="(n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_FWD</b>(n) struct n##_iterator;</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf61d6175a466da3de64df35f19d30ec"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_HAS_MORE" ref="abf61d6175a466da3de64df35f19d30ec" args="(n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_HAS_MORE</b>(n) bool n##_iterator_has_more(OSCAP_ITERATOR(n) it) { return oscap_iterator_has_more(ITERATOR_CAST(it)); }</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7f9a4599b8e4866cfacf0f59ddd24cb4"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_NEXT" ref="a7f9a4599b8e4866cfacf0f59ddd24cb4" args="(t, n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_NEXT</b>(t, n) t n##_iterator_next(OSCAP_ITERATOR(n) it) { return oscap_iterator_next(ITERATOR_CAST(it)); }</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afff4ae659802be92738f58c424fde14c"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_FREE" ref="afff4ae659802be92738f58c424fde14c" args="(n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_FREE</b>(n) void n##_iterator_free(OSCAP_ITERATOR(n) it) { oscap_iterator_free(ITERATOR_CAST(it)); }</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafffc0febb60e765fe00d2950dba3bb6"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_DETACH" ref="aafffc0febb60e765fe00d2950dba3bb6" args="(t, n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_DETACH</b>(t, n) t n##_iterator_detach(OSCAP_ITERATOR(n) it) { return oscap_iterator_detach(ITERATOR_CAST(it)); }</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c4f57de05949b06d112ca41a3a5c160"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_GEN_T" ref="a1c4f57de05949b06d112ca41a3a5c160" args="(t, n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_GEN_T</b>(t, n) OSCAP_ITERATOR_FWD(n) OSCAP_ITERATOR_HAS_MORE(n) OSCAP_ITERATOR_NEXT(t,n) OSCAP_ITERATOR_FREE(n)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0dc22293c244079fc760a27d92b8eb51"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_GEN" ref="a0dc22293c244079fc760a27d92b8eb51" args="(n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_GEN</b>(n) OSCAP_ITERATOR_GEN_T(struct n*,n)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a212d6a0fb2878b1c4b41cc4c6ee446e7"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_REMOVE_T" ref="a212d6a0fb2878b1c4b41cc4c6ee446e7" args="(t, n, destructor)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_REMOVE_T</b>(t, n, destructor) void n##_iterator_remove(OSCAP_ITERATOR(n) it) { destructor(oscap_iterator_detach(ITERATOR_CAST(it))); }</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa484850de2f761f4e26f31d65c2dc174"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_REMOVE" ref="aa484850de2f761f4e26f31d65c2dc174" args="(n, destructor)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_REMOVE</b>(n, destructor) OSCAP_ITERATOR_REMOVE_T(struct n*,n,destructor)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd8134519d2874ad5cd90c088bf19e5a"></a><!-- doxytag: member="util.h::OSCAP_ITERATOR_REMOVE_F" ref="acd8134519d2874ad5cd90c088bf19e5a" args="(n)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_ITERATOR_REMOVE_F</b>(n) OSCAP_ITERATOR_REMOVE(n, n##_free)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#aa9ea17012a7a5a4a4823e7ada948d930">OSCAP_IGETTER_CONV</a>(ITYPE, SNAME, MNAME, CONV)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate an iterator getter function. <a href="#aa9ea17012a7a5a4a4823e7ada948d930"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a2634e36b767ff8f1a538e5067842dc6a">OSCAP_IGETTER</a>(ITYPE, SNAME, MNAME) OSCAP_IGETTER_CONV(ITYPE,SNAME,MNAME,)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate an iterator getter function. <a href="#a2634e36b767ff8f1a538e5067842dc6a"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#aa383eae0670f01c7b9d8f9780aedb9d1">OSCAP_IGETTER_GEN</a>(ITYPE, SNAME, MNAME) OSCAP_IGETTER(ITYPE,SNAME,MNAME) OSCAP_ITERATOR_GEN(ITYPE)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate an iterator and its getter. <a href="#aa383eae0670f01c7b9d8f9780aedb9d1"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a1c95b2ccc329b8e3a1c7abd2cd5fee59">OSCAP_HGETTER_EXP</a>(RTYPE, SNAME, MNAME, MEXP)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a geter function from a hash table. <a href="#a1c95b2ccc329b8e3a1c7abd2cd5fee59"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a830fc8c9d39d3004e3f28b69f7c43450">OSCAP_HGETTER</a>(RTYPE, SNAME, MNAME) OSCAP_HGETTER_EXP(RTYPE,SNAME,MNAME,MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a geter function from a hash table. <a href="#a830fc8c9d39d3004e3f28b69f7c43450"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a8fe541399a78b234cbda8eb1532c12a1">OSCAP_HGETTER_STRUCT</a>(RTYPE, SNAME, MNAME) OSCAP_HGETTER_EXP(struct RTYPE*,SNAME,MNAME,MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a geter function from a hash table. <a href="#a8fe541399a78b234cbda8eb1532c12a1"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8d61176e91cfd82a052770db1383340"></a><!-- doxytag: member="util.h::OSCAP_SETTER_HEADER" ref="aa8d61176e91cfd82a052770db1383340" args="(SNAME, MTYPE, MNAME)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_SETTER_HEADER</b>(SNAME, MTYPE, MNAME) bool SNAME##_set_##MNAME(struct SNAME *obj, MTYPE item)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a98964606cf2ab84d093c1e4dae18f101">OSCAP_SETTER_GENERIC_CHECK</a>(SNAME, MTYPE, MNAME, CHECK, DELETER, ASSIGNER)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a setter function with a check. <a href="#a98964606cf2ab84d093c1e4dae18f101"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a452283d465fda2043dd6f80ba43a35b3">OSCAP_SETTER_GENERIC</a>(SNAME, MTYPE, MNAME, DELETER, ASSIGNER)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a setter function without a check. <a href="#a452283d465fda2043dd6f80ba43a35b3"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a94ff3491fb52ba23c0c66e1ca8afe115">OSCAP_SETTER_GENERIC_NODELETE</a>(SNAME, MTYPE, MNAME, ASSIGNER)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a setter function without a check that does not delete the previous value. <a href="#a94ff3491fb52ba23c0c66e1ca8afe115"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a596f918f3ca6cbc014ec148262ba2d5c">OSCAP_SETTER_SIMPLE</a>(SNAME, MTYPE, MNAME) OSCAP_SETTER_GENERIC_NODELETE(SNAME, MTYPE, MNAME, )</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generete a setter function using a simple assignment. <a href="#a596f918f3ca6cbc014ec148262ba2d5c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a5f7f57c665211b0589af75b5e558ccf1">OSCAP_SETTER_STRING</a>(SNAME, MNAME) OSCAP_SETTER_GENERIC(SNAME, const char *, MNAME, free, oscap_strdup)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Assign a string value to a structure member. <a href="#a5f7f57c665211b0589af75b5e558ccf1"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade0c5f5243684c8b21023c02b2e7073f"></a><!-- doxytag: member="util.h::OSCAP_ACCESSOR_STRING" ref="ade0c5f5243684c8b21023c02b2e7073f" args="(SNAME, MNAME)" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#ade0c5f5243684c8b21023c02b2e7073f">OSCAP_ACCESSOR_STRING</a>(SNAME, MNAME) OSCAP_SETTER_STRING(SNAME, MNAME) OSCAP_GETTER(const char*, SNAME, MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Define both, getter and setter for a string structure member. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b0299d8e4ca40797a73fd82c502e8a9"></a><!-- doxytag: member="util.h::OSCAP_ACCESSOR_SIMPLE" ref="a3b0299d8e4ca40797a73fd82c502e8a9" args="(MTYPE, SNAME, MNAME)" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a3b0299d8e4ca40797a73fd82c502e8a9">OSCAP_ACCESSOR_SIMPLE</a>(MTYPE, SNAME, MNAME) OSCAP_SETTER_SIMPLE(SNAME, MTYPE, MNAME) OSCAP_GETTER(MTYPE, SNAME, MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Define both, getter and setter for a structure member using simple get/set. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a58a4f69509578fe726d273e47feadee9">OSCAP_INSERTER</a>(SNAME, FNAME, MTYPE, MNAME)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Generate function to insert an item into a list. <a href="#a58a4f69509578fe726d273e47feadee9"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16b17690bb73f4419a3490ad834ba444"></a><!-- doxytag: member="util.h::OSCAP_IGETINS" ref="a16b17690bb73f4419a3490ad834ba444" args="(ITYPE, SNAME, MNAME, FNAME)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_IGETINS</b>(ITYPE, SNAME, MNAME, FNAME) OSCAP_IGETTER(ITYPE, SNAME, MNAME) OSCAP_INSERTER(SNAME, FNAME, ITYPE, MNAME)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17d23d9f0d184388cd700d4773639c54"></a><!-- doxytag: member="util.h::OSCAP_IGETINS_GEN" ref="a17d23d9f0d184388cd700d4773639c54" args="(ITYPE, SNAME, MNAME, FNAME)" --> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_IGETINS_GEN</b>(ITYPE, SNAME, MNAME, FNAME) OSCAP_IGETTER_GEN(ITYPE, SNAME, MNAME) OSCAP_INSERTER(SNAME, FNAME, ITYPE, MNAME)</td></tr> <tr><td colspan="2"><h2>Typedefs</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2a4648e28ae682b86489ac8be3a22fc"></a><!-- doxytag: member="util.h::oscap_destruct_func" ref="ad2a4648e28ae682b86489ac8be3a22fc" args=")(void *)" --> typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#ad2a4648e28ae682b86489ac8be3a22fc">oscap_destruct_func</a> )(void *)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to an object destructor. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac32fc75588117050825915e52af52992"></a><!-- doxytag: member="util.h::oscap_consumer_func" ref="ac32fc75588117050825915e52af52992" args=")(void *, void *)" --> typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#ac32fc75588117050825915e52af52992">oscap_consumer_func</a> )(void *, void *)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to an object consumer. <br/></td></tr> <tr><td colspan="2"><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#a6b16df3c5b6a73bb8e7ca890a5bcbbbf">oscap_strdup</a> (const char *str)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Use strdup on string, if string is NULL, return NULL. <a href="#a6b16df3c5b6a73bb8e7ca890a5bcbbbf"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="util_8h.html#aa7e2b327cb6228bbe863ce31048a8808">oscap_strsep</a> (char **str, const char *delim)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Use strsep on string We can't use strsep from string.h because of compatibility issues. <a href="#aa7e2b327cb6228bbe863ce31048a8808"></a><br/></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>Common openscap utilities. </p> <hr/><h2>Define Documentation</h2> <a class="anchor" id="a6537fbd7378c67b0a5cd34fbbb46cf32"></a><!-- doxytag: member="util.h::OSCAP_GENERIC_GETTER" ref="a6537fbd7378c67b0a5cd34fbbb46cf32" args="(RTYPE, SNAME, MNAME, MEXP)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_GENERIC_GETTER</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MEXP </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_GENERIC_GETTER_CONV(RTYPE,,SNAME,MNAME,MEXP)</td> </tr> </table> </div> <div class="memdoc"> <p>Generate a getter function. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>return type </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure of which we are getting a member </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>member name affects how the resultant function will be called </td></tr> <tr><td valign="top"></td><td valign="top"><em>MEXP</em> </td><td>expression to get the member </td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a07984eadc1820caddf5fb09f8cc5f461" title="Generate a getter function with an optional conversion.">OSCAP_GENERIC_GETTER_CONV</a> </dd></dl> </div> </div> <a class="anchor" id="a07984eadc1820caddf5fb09f8cc5f461"></a><!-- doxytag: member="util.h::OSCAP_GENERIC_GETTER_CONV" ref="a07984eadc1820caddf5fb09f8cc5f461" args="(RTYPE, CONV, SNAME, MNAME, MEXP)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_GENERIC_GETTER_CONV</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">CONV, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MEXP </td> <td class="paramname"></td> <td> ) </td> <td> RTYPE SNAME##_get_##MNAME(const struct SNAME* item) { return (CONV(item->MEXP)); }</td> </tr> </table> </div> <div class="memdoc"> <p>Generate a getter function with an optional conversion. </p> <p>Header of the generated function will look like this (substitute the capital letter sequences with the actual parametres): </p> <div class="fragment"><pre class="fragment"> RTYPE SNAME_MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME*); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>return type </td></tr> <tr><td valign="top"></td><td valign="top"><em>CONV</em> </td><td>conversion expression, i.e. either a type conversion of form '(type)' or an unary function identifier </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure of which we are getting a member (without the struct keyword) </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>member name affects how the resultant function will be called </td></tr> <tr><td valign="top"></td><td valign="top"><em>MEXP</em> </td><td>expression to get the member </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a2b5200ab726de57e775442cd5e6ea1c5"></a><!-- doxytag: member="util.h::OSCAP_GENERIC_GETTER_FORCE" ref="a2b5200ab726de57e775442cd5e6ea1c5" args="(RTYPE, SNAME, MNAME, MEXP)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_GENERIC_GETTER_FORCE</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MEXP </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_GENERIC_GETTER_CONV(RTYPE,(RTYPE),SNAME,MNAME,MEXP)</td> </tr> </table> </div> <div class="memdoc"> <p>Generate a getter function with an explicit conversion to the target data type. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>return type </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure of which we are getting a member </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>member name affects how the resultant function will be called </td></tr> <tr><td valign="top"></td><td valign="top"><em>MEXP</em> </td><td>expression to get the member </td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a07984eadc1820caddf5fb09f8cc5f461" title="Generate a getter function with an optional conversion.">OSCAP_GENERIC_GETTER_CONV</a> </dd></dl> </div> </div> <a class="anchor" id="af0a2de3832f32a04e83b9fbfb5073541"></a><!-- doxytag: member="util.h::OSCAP_GETTER" ref="af0a2de3832f32a04e83b9fbfb5073541" args="(RTYPE, SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_GETTER</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_GENERIC_GETTER(RTYPE,SNAME,MNAME,MNAME)</td> </tr> </table> </div> <div class="memdoc"> <p>Generate a getter function. </p> <p>Member name and second part of the generated function's name must match. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>return type </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure of which we are getting a member </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>member name affects how the resultant function will be called </td></tr> <tr><td valign="top"></td><td valign="top"><em>MEXP</em> </td><td>expression to get the member </td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a6537fbd7378c67b0a5cd34fbbb46cf32" title="Generate a getter function.">OSCAP_GENERIC_GETTER</a> </dd></dl> </div> </div> <a class="anchor" id="a5b75e45a0f724a333b5da13bde0686ef"></a><!-- doxytag: member="util.h::OSCAP_GETTER_FORCE" ref="a5b75e45a0f724a333b5da13bde0686ef" args="(RTYPE, SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_GETTER_FORCE</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_GENERIC_GETTER_FORCE(RTYPE,SNAME,MNAME,MNAME)</td> </tr> </table> </div> <div class="memdoc"> <p>Generate a getter function with an explicit conversion to the target data type. </p> <p>Member name and second part of the generated function's name must match. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>return type </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure of which we are getting a member </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>member name affects how the resultant function will be called </td></tr> <tr><td valign="top"></td><td valign="top"><em>MEXP</em> </td><td>expression to get the member </td></tr> </table> </dd> </dl> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a2b5200ab726de57e775442cd5e6ea1c5" title="Generate a getter function with an explicit conversion to the target data type.">OSCAP_GENERIC_GETTER_FORCE</a> </dd></dl> </div> </div> <a class="anchor" id="a830fc8c9d39d3004e3f28b69f7c43450"></a><!-- doxytag: member="util.h::OSCAP_HGETTER" ref="a830fc8c9d39d3004e3f28b69f7c43450" args="(RTYPE, SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_HGETTER</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_HGETTER_EXP(RTYPE,SNAME,MNAME,MNAME)</td> </tr> </table> </div> <div class="memdoc"> <p>Generete a geter function from a hash table. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> RTYPE SNAME_MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME* item, <span class="keyword">const</span> <span class="keywordtype">char</span>* key); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>type of the hash table item </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>structure member name </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a1c95b2ccc329b8e3a1c7abd2cd5fee59"></a><!-- doxytag: member="util.h::OSCAP_HGETTER_EXP" ref="a1c95b2ccc329b8e3a1c7abd2cd5fee59" args="(RTYPE, SNAME, MNAME, MEXP)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_HGETTER_EXP</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MEXP </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">RTYPE SNAME##_get_##MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME* item, <span class="keyword">const</span> <span class="keywordtype">char</span>* key) \ { <span class="keywordflow">return</span> oscap_htable_get(item->MEXP, key); } </pre></div> <p>Generete a geter function from a hash table. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> RTYPE SNAME_MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME* item, <span class="keyword">const</span> <span class="keywordtype">char</span>* key); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>type of the hash table item </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>structure member name </td></tr> <tr><td valign="top"></td><td valign="top"><em>MEXP</em> </td><td>expression to get the member variable (i.e. the hash table) </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a8fe541399a78b234cbda8eb1532c12a1"></a><!-- doxytag: member="util.h::OSCAP_HGETTER_STRUCT" ref="a8fe541399a78b234cbda8eb1532c12a1" args="(RTYPE, SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_HGETTER_STRUCT</td> <td>(</td> <td class="paramtype">RTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_HGETTER_EXP(struct RTYPE*,SNAME,MNAME,MNAME)</td> </tr> </table> </div> <div class="memdoc"> <p>Generete a geter function from a hash table. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>RTYPE* SNAME_MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME* item, <span class="keyword">const</span> <span class="keywordtype">char</span>* key); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>RTYPE</em> </td><td>type of the hash table item </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of the structure </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>structure member name </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a2634e36b767ff8f1a538e5067842dc6a"></a><!-- doxytag: member="util.h::OSCAP_IGETTER" ref="a2634e36b767ff8f1a538e5067842dc6a" args="(ITYPE, SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_IGETTER</td> <td>(</td> <td class="paramtype">ITYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_IGETTER_CONV(ITYPE,SNAME,MNAME,)</td> </tr> </table> </div> <div class="memdoc"> <p>Generate an iterator getter function. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>ITYPE_iterator* SNAME_MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME*); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ITYPE</em> </td><td>iterator type (without the '_iterator' suffix) </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of type the structure containing the list </td></tr> <tr><td valign="top"></td><td valign="top"><em>MANME</em> </td><td>list itself </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="aa9ea17012a7a5a4a4823e7ada948d930"></a><!-- doxytag: member="util.h::OSCAP_IGETTER_CONV" ref="aa9ea17012a7a5a4a4823e7ada948d930" args="(ITYPE, SNAME, MNAME, CONV)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_IGETTER_CONV</td> <td>(</td> <td class="paramtype">ITYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">CONV </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">struct </span>ITYPE##_iterator* SNAME##_get_##MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME* item) \ { <span class="keywordflow">return</span> oscap_iterator_new((CONV(item))->MNAME); } </pre></div> <p>Generate an iterator getter function. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> <span class="keyword">struct </span>ITYPE_iterator* SNAME_MNAME(<span class="keyword">const</span> <span class="keyword">struct</span> SNAME*); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ITYPE</em> </td><td>iterator type (without the '_iterator' suffix) </td></tr> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>name of type the structure containing the list </td></tr> <tr><td valign="top"></td><td valign="top"><em>MANME</em> </td><td>list itself </td></tr> <tr><td valign="top"></td><td valign="top"><em>CONV</em> </td><td>convert expression </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="aa383eae0670f01c7b9d8f9780aedb9d1"></a><!-- doxytag: member="util.h::OSCAP_IGETTER_GEN" ref="aa383eae0670f01c7b9d8f9780aedb9d1" args="(ITYPE, SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_IGETTER_GEN</td> <td>(</td> <td class="paramtype">ITYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_IGETTER(ITYPE,SNAME,MNAME) OSCAP_ITERATOR_GEN(ITYPE)</td> </tr> </table> </div> <div class="memdoc"> <p>Generate an iterator and its getter. </p> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a2634e36b767ff8f1a538e5067842dc6a" title="Generate an iterator getter function.">OSCAP_IGETTER</a> </dd> <dd> OSCAP_ITERATOR_GEN </dd></dl> </div> </div> <a class="anchor" id="a58a4f69509578fe726d273e47feadee9"></a><!-- doxytag: member="util.h::OSCAP_INSERTER" ref="a58a4f69509578fe726d273e47feadee9" args="(SNAME, FNAME, MTYPE, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_INSERTER</td> <td>(</td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">FNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">bool</span> SNAME##_add_##FNAME(<span class="keyword">struct</span> SNAME *obj, <span class="keyword">struct</span> MTYPE *item) \ { oscap_list_add(obj->MNAME, item); <span class="keywordflow">return</span> <span class="keyword">true</span>; } </pre></div> <p>Generate function to insert an item into a list. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> SNAME_add_FNAME(<span class="keyword">struct</span> SNAME *obj, <span class="keyword">struct</span> MTYPE *item); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>structure typename (w/o the struct keyword) </td></tr> <tr><td valign="top"></td><td valign="top"><em>FNAME</em> </td><td>how should function name part after the _add_ look like </td></tr> <tr><td valign="top"></td><td valign="top"><em>MTYPE</em> </td><td>list member type </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>name of the list within the structure </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a452283d465fda2043dd6f80ba43a35b3"></a><!-- doxytag: member="util.h::OSCAP_SETTER_GENERIC" ref="a452283d465fda2043dd6f80ba43a35b3" args="(SNAME, MTYPE, MNAME, DELETER, ASSIGNER)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_SETTER_GENERIC</td> <td>(</td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">DELETER, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ASSIGNER </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">OSCAP_SETTER_HEADER(SNAME, MTYPE, MNAME) \ { DELETER(obj->MNAME); obj->MNAME = ASSIGNER(item); <span class="keywordflow">return</span> <span class="keyword">true</span>; } </pre></div> <p>Generete a setter function without a check. </p> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a98964606cf2ab84d093c1e4dae18f101" title="Generete a setter function with a check.">OSCAP_SETTER_GENERIC_CHECK</a> </dd></dl> </div> </div> <a class="anchor" id="a98964606cf2ab84d093c1e4dae18f101"></a><!-- doxytag: member="util.h::OSCAP_SETTER_GENERIC_CHECK" ref="a98964606cf2ab84d093c1e4dae18f101" args="(SNAME, MTYPE, MNAME, CHECK, DELETER, ASSIGNER)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_SETTER_GENERIC_CHECK</td> <td>(</td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">CHECK, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">DELETER, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ASSIGNER </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">OSCAP_SETTER_HEADER(SNAME, MTYPE, MNAME) \ { <span class="keywordflow">if</span> (!(CHECK)) <span class="keywordflow">return</span> <span class="keyword">false</span>; DELETER(obj->MNAME); obj->MNAME = ASSIGNER(item); <span class="keywordflow">return</span> <span class="keyword">true</span>; } </pre></div> <p>Generete a setter function with a check. </p> <p>Signature of the generated function will be as follows (substitute uppercase strings with actual params): </p> <div class="fragment"><pre class="fragment"> <span class="keywordtype">bool</span> SNAME_get_MNAME(<span class="keyword">struct</span> SNAME *obj, MTYPE *item); </pre></div> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>Name of the structure. </td></tr> <tr><td valign="top"></td><td valign="top"><em>MTYPE</em> </td><td>Type of the member item to set. </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>Name of the member item to set. </td></tr> <tr><td valign="top"></td><td valign="top"><em>CHECK</em> </td><td>Code to check validity of the assignment (you can use obj and item variables here). </td></tr> <tr><td valign="top"></td><td valign="top"><em>DELETER</em> </td><td>Function used to delete the old value (or empty string). </td></tr> <tr><td valign="top"></td><td valign="top"><em>ASSIGNER</em> </td><td>Function used to assign value to the item. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a94ff3491fb52ba23c0c66e1ca8afe115"></a><!-- doxytag: member="util.h::OSCAP_SETTER_GENERIC_NODELETE" ref="a94ff3491fb52ba23c0c66e1ca8afe115" args="(SNAME, MTYPE, MNAME, ASSIGNER)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_SETTER_GENERIC_NODELETE</td> <td>(</td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ASSIGNER </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">OSCAP_SETTER_HEADER(SNAME, MTYPE, MNAME) \ { obj->MNAME = ASSIGNER(item); <span class="keywordflow">return</span> <span class="keyword">true</span>; } </pre></div> <p>Generete a setter function without a check that does not delete the previous value. </p> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a98964606cf2ab84d093c1e4dae18f101" title="Generete a setter function with a check.">OSCAP_SETTER_GENERIC_CHECK</a> </dd></dl> </div> </div> <a class="anchor" id="a596f918f3ca6cbc014ec148262ba2d5c"></a><!-- doxytag: member="util.h::OSCAP_SETTER_SIMPLE" ref="a596f918f3ca6cbc014ec148262ba2d5c" args="(SNAME, MTYPE, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_SETTER_SIMPLE</td> <td>(</td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_SETTER_GENERIC_NODELETE(SNAME, MTYPE, MNAME, )</td> </tr> </table> </div> <div class="memdoc"> <p>Generete a setter function using a simple assignment. </p> <dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="util_8h.html#a98964606cf2ab84d093c1e4dae18f101" title="Generete a setter function with a check.">OSCAP_SETTER_GENERIC_CHECK</a> </dd></dl> </div> </div> <a class="anchor" id="a5f7f57c665211b0589af75b5e558ccf1"></a><!-- doxytag: member="util.h::OSCAP_SETTER_STRING" ref="a5f7f57c665211b0589af75b5e558ccf1" args="(SNAME, MNAME)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_SETTER_STRING</td> <td>(</td> <td class="paramtype">SNAME, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">MNAME </td> <td class="paramname"></td> <td> ) </td> <td> OSCAP_SETTER_GENERIC(SNAME, const char *, MNAME, free, oscap_strdup)</td> </tr> </table> </div> <div class="memdoc"> <p>Assign a string value to a structure member. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>SNAME</em> </td><td>Structure name </td></tr> <tr><td valign="top"></td><td valign="top"><em>MNAME</em> </td><td>Name of structure member containing the string to be set. </td></tr> </table> </dd> </dl> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="a6b16df3c5b6a73bb8e7ca890a5bcbbbf"></a><!-- doxytag: member="util.h::oscap_strdup" ref="a6b16df3c5b6a73bb8e7ca890a5bcbbbf" args="(const char *str)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* oscap_strdup </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>str</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Use strdup on string, if string is NULL, return NULL. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td>String we want to duplicate </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="aa7e2b327cb6228bbe863ce31048a8808"></a><!-- doxytag: member="util.h::oscap_strsep" ref="aa7e2b327cb6228bbe863ce31048a8808" args="(char **str, const char *delim)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* oscap_strsep </td> <td>(</td> <td class="paramtype">char ** </td> <td class="paramname"> <em>str</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>delim</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Use strsep on string We can't use strsep from string.h because of compatibility issues. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>str</em> </td><td>String we want to split </td></tr> <tr><td valign="top"></td><td valign="top"><em>delim</em> </td><td>Delimiter of string parts </td></tr> </table> </dd> </dl> </div> </div> </div> <hr size="1"/><address style="text-align: right;"><small>Generated on 26 Feb 2010 for Open SCAP Library by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address> </body> </html>