<!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"/> <meta name="generator" content="Doxygen 1.8.6"/> <title>createrepo_c library: Miscellaneous useful functions and macros.</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="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript"> $(document).ready(initResizable); $(window).load(resizeHeight); </script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </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">createrepo_c library  <span id="projectnumber">0.7.4</span> </div> <div id="projectbrief">C library for metadata manipulation</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <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> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> <img id="MSearchSelect" src="search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Search" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> </span><span class="right"> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </span> </div> </li> </ul> </div> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> <div id="nav-sync" class="sync"></div> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> $(document).ready(function(){initNavTree('group__misc.html','');}); </script> <div id="doc-content"> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div class="header"> <div class="summary"> <a href="#nested-classes">Data Structures</a> | <a href="#define-members">Macros</a> | <a href="#enum-members">Enumerations</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Miscellaneous useful functions and macros.</div> </div> </div><!--header--> <div class="contents"> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Data Structures</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___e_v_r.html">cr_EVR</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___version.html">cr_Version</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structcr___header_range_struct.html">cr_HeaderRangeStruct</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:ga1ddc80ab2b0e6acafa29495053cdc553"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga1ddc80ab2b0e6acafa29495053cdc553">CR_UNUSED</a>(x)   (void)(x)</td></tr> <tr class="separator:ga1ddc80ab2b0e6acafa29495053cdc553"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gabf188437adc597f7cbb4bbfb8388f43d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gabf188437adc597f7cbb4bbfb8388f43d">CR_STATICSTRLEN</a>(s)   (sizeof(s)/sizeof(s[0]))</td></tr> <tr class="separator:gabf188437adc597f7cbb4bbfb8388f43d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga7dc6858222b7215b792bc847ce6689d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7dc6858222b7215b792bc847ce6689d4"></a> #define </td><td class="memItemRight" valign="bottom"><b>CR_ARRAYLEN</b>(x)   ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))</td></tr> <tr class="separator:ga7dc6858222b7215b792bc847ce6689d4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga8f8923effb76af1e711ceeed0bd7bd41"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga8f8923effb76af1e711ceeed0bd7bd41">cr_compress_file</a>(SRC, DST, COMTYPE, ERR)   <a class="el" href="group__misc.html#gaf7e340a6bf3594003753baba521bc2a1">cr_compress_file_with_stat</a>(SRC, DST, COMTYPE, NULL, ERR)</td></tr> <tr class="separator:ga8f8923effb76af1e711ceeed0bd7bd41"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga3547301eabf0e2805de0ed8e3b0f0be8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga3547301eabf0e2805de0ed8e3b0f0be8">cr_decompress_file</a>(SRC, DST, COMTYPE, ERR)   <a class="el" href="group__misc.html#gadf022bf5f2f45b28ed23e886e996c437">cr_decompress_file_with_stat</a>(SRC, DST, COMTYPE, NULL, ERR)</td></tr> <tr class="separator:ga3547301eabf0e2805de0ed8e3b0f0be8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga11656c94b955f180c8e7b4ac2beef409"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga11656c94b955f180c8e7b4ac2beef409">cr_cmp_nevra</a>(A, B)</td></tr> <tr class="separator:ga11656c94b955f180c8e7b4ac2beef409"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a> Enumerations</h2></td></tr> <tr class="memitem:gabc8fad1d71801271ed3cd4ab6a18c98a"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gabc8fad1d71801271ed3cd4ab6a18c98a">cr_CpFlags</a> { <a class="el" href="group__misc.html#ggabc8fad1d71801271ed3cd4ab6a18c98aae5b838c2cf1ee25b810cf72b8ba8e3f5">CR_CP_DEFAULT</a> = (1<<0), <a class="el" href="group__misc.html#ggabc8fad1d71801271ed3cd4ab6a18c98aa6a7084eea5a98faea28913af2c8ddec8">CR_CP_RECURSIVE</a> = (1<<1), <a class="el" href="group__misc.html#ggabc8fad1d71801271ed3cd4ab6a18c98aa913651fb6b6be68a5c5f9691242c2021">CR_CP_PRESERVE_ALL</a> = (1<<2) }</td></tr> <tr class="separator:gabc8fad1d71801271ed3cd4ab6a18c98a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga97be19a3fa0d6a79bfb494cb2294423f"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga97be19a3fa0d6a79bfb494cb2294423f">cr_RmFlags</a> { <a class="el" href="group__misc.html#gga97be19a3fa0d6a79bfb494cb2294423fa8ea46b1458bbb2ed9b12e30c73a3e63d">CR_RM_DEFAULT</a> = (1<<0), <a class="el" href="group__misc.html#gga97be19a3fa0d6a79bfb494cb2294423faf22e3954d76ad8cd4d9db61b37a9103c">CR_RM_RECURSIVE</a> = (1<<1), <a class="el" href="group__misc.html#gga97be19a3fa0d6a79bfb494cb2294423fa1d4481359d336f56246c46889fe5d40a">CR_RM_FORCE</a> = (1<<2) }</td></tr> <tr class="separator:ga97be19a3fa0d6a79bfb494cb2294423f"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:gafd45498cded762b53ecbb3f6d628ca28"><td class="memItemLeft" align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gafd45498cded762b53ecbb3f6d628ca28">cr_flag_to_str</a> (gint64 flags)</td></tr> <tr class="separator:gafd45498cded762b53ecbb3f6d628ca28"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga5c5ffe0b753d00c501913a5331f2f307"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structcr___e_v_r.html">cr_EVR</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga5c5ffe0b753d00c501913a5331f2f307">cr_str_to_evr</a> (const char *string, GStringChunk *chunk)</td></tr> <tr class="separator:ga5c5ffe0b753d00c501913a5331f2f307"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga599747ba897352ea34e040c985411b63"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga599747ba897352ea34e040c985411b63">cr_evr_free</a> (<a class="el" href="structcr___e_v_r.html">cr_EVR</a> *evr)</td></tr> <tr class="separator:ga599747ba897352ea34e040c985411b63"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gae9f4093c18110c3bbbe725ea9b6b8d74"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structcr___header_range_struct.html">cr_HeaderRangeStruct</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gae9f4093c18110c3bbbe725ea9b6b8d74">cr_get_header_byte_range</a> (const char *filename, GError **err)</td></tr> <tr class="separator:gae9f4093c18110c3bbbe725ea9b6b8d74"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga535a6c25ef8e2501090d913b258f6858"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga535a6c25ef8e2501090d913b258f6858">cr_get_filename</a> (const char *filepath)</td></tr> <tr class="separator:ga535a6c25ef8e2501090d913b258f6858"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga70b9364515243f41a8c58426345d1a33"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga70b9364515243f41a8c58426345d1a33">cr_download</a> (CURL *handle, const char *url, const char *destination, GError **err)</td></tr> <tr class="separator:ga70b9364515243f41a8c58426345d1a33"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga947f12fde3adf0525a722b90d419fd64"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga947f12fde3adf0525a722b90d419fd64">cr_copy_file</a> (const char *src, const char *dst, GError **err)</td></tr> <tr class="separator:ga947f12fde3adf0525a722b90d419fd64"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaf7e340a6bf3594003753baba521bc2a1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaf7e340a6bf3594003753baba521bc2a1">cr_compress_file_with_stat</a> (const char *src, const char *dst, <a class="el" href="group__compression__wrapper.html#gac218acbb5e4b319304fc74e5448a2214">cr_CompressionType</a> comtype, <a class="el" href="structcr___content_stat.html">cr_ContentStat</a> *stat, GError **err)</td></tr> <tr class="separator:gaf7e340a6bf3594003753baba521bc2a1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gadf022bf5f2f45b28ed23e886e996c437"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gadf022bf5f2f45b28ed23e886e996c437">cr_decompress_file_with_stat</a> (const char *src, const char *dst, <a class="el" href="group__compression__wrapper.html#gac218acbb5e4b319304fc74e5448a2214">cr_CompressionType</a> comtype, <a class="el" href="structcr___content_stat.html">cr_ContentStat</a> *stat, GError **err)</td></tr> <tr class="separator:gadf022bf5f2f45b28ed23e886e996c437"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaf6506b1612a5b738b0ff56811b386967"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaf6506b1612a5b738b0ff56811b386967">cr_better_copy_file</a> (const char *src, const char *dst, GError **err)</td></tr> <tr class="separator:gaf6506b1612a5b738b0ff56811b386967"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gac6d9ba4aafa31e8e1607244b1374f6b4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gac6d9ba4aafa31e8e1607244b1374f6b4">cr_remove_dir</a> (const char *path, GError **err)</td></tr> <tr class="separator:gac6d9ba4aafa31e8e1607244b1374f6b4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa43e80d5c40473c1e77c2ceba31b7c4f"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaa43e80d5c40473c1e77c2ceba31b7c4f">cr_normalize_dir_path</a> (const char *path)</td></tr> <tr class="separator:gaa43e80d5c40473c1e77c2ceba31b7c4f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga729df7956d57c03b0cd0ae7f645a8798"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structcr___version.html">cr_Version</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga729df7956d57c03b0cd0ae7f645a8798">cr_str_to_version</a> (const char *str)</td></tr> <tr class="separator:ga729df7956d57c03b0cd0ae7f645a8798"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga02786083873436374e9aecaae9f2b426"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga02786083873436374e9aecaae9f2b426">cr_cmp_version_str</a> (const char *str1, const char *str2)</td></tr> <tr class="separator:ga02786083873436374e9aecaae9f2b426"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaaf59b6c058e4b7bfbf0c225ebc881179"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaaf59b6c058e4b7bfbf0c225ebc881179">cr_null_log_fn</a> (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)</td></tr> <tr class="separator:gaaf59b6c058e4b7bfbf0c225ebc881179"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga4f01d7dacd945188af5e8341b9f2b52a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga4f01d7dacd945188af5e8341b9f2b52a">cr_log_fn</a> (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)</td></tr> <tr class="separator:ga4f01d7dacd945188af5e8341b9f2b52a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gac4e4c3de2a51323ea0f4348dc9a8cf92"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gac4e4c3de2a51323ea0f4348dc9a8cf92">cr_slist_free_full</a> (GSList *list, GDestroyNotify free_f)</td></tr> <tr class="separator:gac4e4c3de2a51323ea0f4348dc9a8cf92"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga2dd7feb284e4f3ef184c18e6590044e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga2dd7feb284e4f3ef184c18e6590044e6">cr_queue_free_full</a> (GQueue *queue, GDestroyNotify free_f)</td></tr> <tr class="separator:ga2dd7feb284e4f3ef184c18e6590044e6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga01c5103de03cc934388441486323e05a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga01c5103de03cc934388441486323e05a">cr_split_rpm_filename</a> (const char *filename)</td></tr> <tr class="separator:ga01c5103de03cc934388441486323e05a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaeac6be0f0bcbd75eaf261e8f64822ac0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gaeac6be0f0bcbd75eaf261e8f64822ac0">cr_cmp_evr</a> (const char *e1, const char *v1, const char *r1, const char *e2, const char *v2, const char *r2)</td></tr> <tr class="separator:gaeac6be0f0bcbd75eaf261e8f64822ac0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9e4360f3ba71bafc55813bc4b0bd1071"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga9e4360f3ba71bafc55813bc4b0bd1071">cr_warning_cb</a> (<a class="el" href="group__xml__parser.html#ga534c9fafb0d8f643a8153b5edcc784b8">cr_XmlParserWarningType</a> type, char *msg, void *cbdata, GError **err)</td></tr> <tr class="separator:ga9e4360f3ba71bafc55813bc4b0bd1071"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga28aa07722ada8e9316009fc197ddc171"><td class="memItemLeft" align="right" valign="top">gboolean </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga28aa07722ada8e9316009fc197ddc171">cr_write_to_file</a> (GError **err, gchar *filename, const char *format,...)</td></tr> <tr class="separator:ga28aa07722ada8e9316009fc197ddc171"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga4f34f35b942c3446bb055a92e1740a6d"><td class="memItemLeft" align="right" valign="top">gboolean </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga4f34f35b942c3446bb055a92e1740a6d">cr_cp</a> (const char *src, const char *dst, <a class="el" href="group__misc.html#gabc8fad1d71801271ed3cd4ab6a18c98a">cr_CpFlags</a> flags, const char *working_directory, GError **err)</td></tr> <tr class="separator:ga4f34f35b942c3446bb055a92e1740a6d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga093855ffde803555b194f45709a33644"><td class="memItemLeft" align="right" valign="top">gboolean </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga093855ffde803555b194f45709a33644">cr_rm</a> (const char *path, <a class="el" href="group__misc.html#ga97be19a3fa0d6a79bfb494cb2294423f">cr_RmFlags</a> flags, const char *working_dir, GError **err)</td></tr> <tr class="separator:ga093855ffde803555b194f45709a33644"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gab97a73f0463299a2d1ada704a42d8c1b"><td class="memItemLeft" align="right" valign="top">gchar * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gab97a73f0463299a2d1ada704a42d8c1b">cr_append_pid_and_datetime</a> (const char *str, const char *suffix)</td></tr> <tr class="separator:gab97a73f0463299a2d1ada704a42d8c1b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gad9fe83e08547ce55e600425a7565eb84"><td class="memItemLeft" align="right" valign="top">gboolean </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gad9fe83e08547ce55e600425a7565eb84">cr_spawn_check_exit_status</a> (gint exit_status, GError **error)</td></tr> <tr class="separator:gad9fe83e08547ce55e600425a7565eb84"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga8605c6e2c7a498104fbb147f4e676222"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga8605c6e2c7a498104fbb147f4e676222">cr_str_to_nevr</a> (const char *str)</td></tr> <tr class="separator:ga8605c6e2c7a498104fbb147f4e676222"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga784407acebacdc7e50b63b544108b6e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga784407acebacdc7e50b63b544108b6e1">cr_nevr_free</a> (<a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a> *nevr)</td></tr> <tr class="separator:ga784407acebacdc7e50b63b544108b6e1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gab96c9422119f8ab89db7218aa06aa56a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#gab96c9422119f8ab89db7218aa06aa56a">cr_str_to_nevra</a> (const char *str)</td></tr> <tr class="separator:gab96c9422119f8ab89db7218aa06aa56a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga84b0a360c8af9d689d7a8753949edd08"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__misc.html#ga84b0a360c8af9d689d7a8753949edd08">cr_nevra_free</a> (<a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> *nevra)</td></tr> <tr class="separator:ga84b0a360c8af9d689d7a8753949edd08"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <h2 class="groupheader">Macro Definition Documentation</h2> <a class="anchor" id="ga11656c94b955f180c8e7b4ac2beef409"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define cr_cmp_nevra</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">A, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">B </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line">(<a class="code" href="group__misc.html#gaeac6be0f0bcbd75eaf261e8f64822ac0">cr_cmp_evr</a>((A)->epoch, (A)->version, (A)->release,\</div> <div class="line"> (B)->epoch, (B)->version, (B)->release))</div> <div class="ttc" id="group__misc_html_gaeac6be0f0bcbd75eaf261e8f64822ac0"><div class="ttname"><a href="group__misc.html#gaeac6be0f0bcbd75eaf261e8f64822ac0">cr_cmp_evr</a></div><div class="ttdeci">int cr_cmp_evr(const char *e1, const char *v1, const char *r1, const char *e2, const char *v2, const char *r2)</div></div> </div><!-- fragment --><p>Compare evr of two <a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a>. Name and arch are ignored. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">A</td><td>pointer to first <a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> </td></tr> <tr><td class="paramname">B</td><td>pointer to second <a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 = same, 1 = first is newer, -1 = second is newer </dd></dl> <p>Definition at line <a class="el" href="misc_8h_source.html#l00320">320</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <a class="anchor" id="ga8f8923effb76af1e711ceeed0bd7bd41"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define cr_compress_file</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">SRC, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">DST, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">COMTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">ERR </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   <a class="el" href="group__misc.html#gaf7e340a6bf3594003753baba521bc2a1">cr_compress_file_with_stat</a>(SRC, DST, COMTYPE, NULL, ERR)</td> </tr> </table> </div><div class="memdoc"> <p>Compress file. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">SRC</td><td>source filename </td></tr> <tr><td class="paramname">DST</td><td>destination (If dst is dir, filename of src + compression suffix is used. If dst is NULL, src + compression suffix is used) </td></tr> <tr><td class="paramname">COMTYPE</td><td>type of compression </td></tr> <tr><td class="paramname">ERR</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> <p>Definition at line <a class="el" href="misc_8h_source.html#l00178">178</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <a class="anchor" id="ga3547301eabf0e2805de0ed8e3b0f0be8"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define cr_decompress_file</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">SRC, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">DST, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">COMTYPE, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">ERR </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   <a class="el" href="group__misc.html#gadf022bf5f2f45b28ed23e886e996c437">cr_decompress_file_with_stat</a>(SRC, DST, COMTYPE, NULL, ERR)</td> </tr> </table> </div><div class="memdoc"> <p>Decompress file. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">SRC</td><td>source filename </td></tr> <tr><td class="paramname">DST</td><td>destination (If dst is dir, filename of src without compression suffix (if present) is used. If dst is NULL, src without compression suffix is used) Otherwise ".decompressed" suffix is used </td></tr> <tr><td class="paramname">COMTYPE</td><td>type of compression </td></tr> <tr><td class="paramname">ERR</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> <p>Definition at line <a class="el" href="misc_8h_source.html#l00207">207</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <a class="anchor" id="gabf188437adc597f7cbb4bbfb8388f43d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CR_STATICSTRLEN</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">s</td><td>)</td> <td>   (sizeof(s)/sizeof(s[0]))</td> </tr> </table> </div><div class="memdoc"> <p>Lenght of static string (including last '\0' byte) </p> <p>Definition at line <a class="el" href="misc_8h_source.html#l00044">44</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <a class="anchor" id="ga1ddc80ab2b0e6acafa29495053cdc553"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CR_UNUSED</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">x</td><td>)</td> <td>   (void)(x)</td> </tr> </table> </div><div class="memdoc"> <p>Macro for supress compiler warning about unused param. </p> <p>Definition at line <a class="el" href="misc_8h_source.html#l00040">40</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <h2 class="groupheader">Enumeration Type Documentation</h2> <a class="anchor" id="gabc8fad1d71801271ed3cd4ab6a18c98a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="group__misc.html#gabc8fad1d71801271ed3cd4ab6a18c98a">cr_CpFlags</a></td> </tr> </table> </div><div class="memdoc"> <table class="fieldtable"> <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ggabc8fad1d71801271ed3cd4ab6a18c98aae5b838c2cf1ee25b810cf72b8ba8e3f5"></a>CR_CP_DEFAULT</em> </td><td class="fielddoc"> <p>No attributes - default </p> </td></tr> <tr><td class="fieldname"><em><a class="anchor" id="ggabc8fad1d71801271ed3cd4ab6a18c98aa6a7084eea5a98faea28913af2c8ddec8"></a>CR_CP_RECURSIVE</em> </td><td class="fielddoc"> <p>Copy directories recursively </p> </td></tr> <tr><td class="fieldname"><em><a class="anchor" id="ggabc8fad1d71801271ed3cd4ab6a18c98aa913651fb6b6be68a5c5f9691242c2021"></a>CR_CP_PRESERVE_ALL</em> </td><td class="fielddoc"> <p>preserve the all attributes (if possible) </p> </td></tr> </table> <p>Definition at line <a class="el" href="misc_8h_source.html#l00424">424</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <a class="anchor" id="ga97be19a3fa0d6a79bfb494cb2294423f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="group__misc.html#ga97be19a3fa0d6a79bfb494cb2294423f">cr_RmFlags</a></td> </tr> </table> </div><div class="memdoc"> <table class="fieldtable"> <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="gga97be19a3fa0d6a79bfb494cb2294423fa8ea46b1458bbb2ed9b12e30c73a3e63d"></a>CR_RM_DEFAULT</em> </td><td class="fielddoc"> <p>No attributes - default </p> </td></tr> <tr><td class="fieldname"><em><a class="anchor" id="gga97be19a3fa0d6a79bfb494cb2294423faf22e3954d76ad8cd4d9db61b37a9103c"></a>CR_RM_RECURSIVE</em> </td><td class="fielddoc"> <p>Copy directories recursively </p> </td></tr> <tr><td class="fieldname"><em><a class="anchor" id="gga97be19a3fa0d6a79bfb494cb2294423fa1d4481359d336f56246c46889fe5d40a"></a>CR_RM_FORCE</em> </td><td class="fielddoc"> <p>Use force </p> </td></tr> </table> <p>Definition at line <a class="el" href="misc_8h_source.html#l00447">447</a> of file <a class="el" href="misc_8h_source.html">misc.h</a>.</p> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="gab97a73f0463299a2d1ada704a42d8c1b"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">gchar* cr_append_pid_and_datetime </td> <td>(</td> <td class="paramtype">const 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>suffix</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Append "YYYYmmddHHMMSS.MICROSECONDS.PID" suffix to the str. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">str</td><td>String or NULL </td></tr> <tr><td class="paramname">suffix</td><td>Another string that will be appended or NULL </td></tr> <tr><td class="paramname">return</td><td>Newly allocated string </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gaf6506b1612a5b738b0ff56811b386967"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_better_copy_file </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>src</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Better copy file. Source (src) could be remote address (<a href="http://">http://</a> or <a href="ftp://">ftp://</a>). </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>source filename </td></tr> <tr><td class="paramname">dst</td><td>destination (if dst is dir, filename of src is used) </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> </div> </div> <a class="anchor" id="gaeac6be0f0bcbd75eaf261e8f64822ac0"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_cmp_evr </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>e1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>v1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>r1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>e2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>v2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>r2</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Compare two version strings splited into evr chunks. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">e1</td><td>1. epoch </td></tr> <tr><td class="paramname">v1</td><td>1. version </td></tr> <tr><td class="paramname">r1</td><td>1. release </td></tr> <tr><td class="paramname">e2</td><td>2. epoch </td></tr> <tr><td class="paramname">v2</td><td>2. version </td></tr> <tr><td class="paramname">r2</td><td>2. release </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 = same, 1 = first is newer, -1 = second is newer </dd></dl> </div> </div> <a class="anchor" id="ga02786083873436374e9aecaae9f2b426"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_cmp_version_str </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>str1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>str2</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Compare two version string. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">str1</td><td>first version string </td></tr> <tr><td class="paramname">str2</td><td>second version string </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 - versions are same, 1 - first string is bigger version, 2 - second string is bigger version </dd></dl> </div> </div> <a class="anchor" id="gaf7e340a6bf3594003753baba521bc2a1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_compress_file_with_stat </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>src</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__compression__wrapper.html#gac218acbb5e4b319304fc74e5448a2214">cr_CompressionType</a> </td> <td class="paramname"><em>comtype</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structcr___content_stat.html">cr_ContentStat</a> * </td> <td class="paramname"><em>stat</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Compress file. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>source filename </td></tr> <tr><td class="paramname">dst</td><td>destination (If dst is dir, filename of src + compression suffix is used. If dst is NULL, src + compression suffix is used) </td></tr> <tr><td class="paramname">comtype</td><td>type of compression </td></tr> <tr><td class="paramname">stat</td><td>pointer to <a class="el" href="structcr___content_stat.html">cr_ContentStat</a> or NULL </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> </div> </div> <a class="anchor" id="ga947f12fde3adf0525a722b90d419fd64"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_copy_file </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>src</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Copy file. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>source filename </td></tr> <tr><td class="paramname">dst</td><td>destination (if dst is dir, filename of src is used) </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> </div> </div> <a class="anchor" id="ga4f34f35b942c3446bb055a92e1740a6d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">gboolean cr_cp </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>src</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__misc.html#gabc8fad1d71801271ed3cd4ab6a18c98a">cr_CpFlags</a> </td> <td class="paramname"><em>flags</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>working_directory</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Recursive copy of directory (works on files as well) </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>Source (supports wildcards) </td></tr> <tr><td class="paramname">dst</td><td>Destination (supports wildcards) </td></tr> <tr><td class="paramname">flags</td><td>Flags </td></tr> <tr><td class="paramname">working_dir</td><td>Working directory </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gadf022bf5f2f45b28ed23e886e996c437"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_decompress_file_with_stat </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>src</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dst</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__compression__wrapper.html#gac218acbb5e4b319304fc74e5448a2214">cr_CompressionType</a> </td> <td class="paramname"><em>comtype</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structcr___content_stat.html">cr_ContentStat</a> * </td> <td class="paramname"><em>stat</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Decompress file. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">src</td><td>source filename </td></tr> <tr><td class="paramname">dst</td><td>destination (If dst is dir, filename of src without compression suffix (if present) is used. If dst is NULL, src without compression suffix is used) Otherwise ".decompressed" suffix is used </td></tr> <tr><td class="paramname">comtype</td><td>type of compression </td></tr> <tr><td class="paramname">stat</td><td>pointer to <a class="el" href="structcr___content_stat.html">cr_ContentStat</a> or NULL </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> </div> </div> <a class="anchor" id="ga70b9364515243f41a8c58426345d1a33"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_download </td> <td>(</td> <td class="paramtype">CURL * </td> <td class="paramname"><em>handle</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>url</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>destination</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Download a file from the URL into the in_dst via curl handle. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">handle</td><td>CURL handle </td></tr> <tr><td class="paramname">url</td><td>source url </td></tr> <tr><td class="paramname">destination</td><td>destination (if destination is dir, filename from the url is used) </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error </dd></dl> </div> </div> <a class="anchor" id="ga599747ba897352ea34e040c985411b63"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_evr_free </td> <td>(</td> <td class="paramtype"><a class="el" href="structcr___e_v_r.html">cr_EVR</a> * </td> <td class="paramname"><em>evr</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Free <a class="el" href="structcr___e_v_r.html">cr_EVR</a> Warning: Do not use this function when a string chunk was used in the cr_str_to_evr! In that case use only g_free on the <a class="el" href="structcr___e_v_r.html">cr_EVR</a> pointer. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">evr</td><td><a class="el" href="structcr___e_v_r.html">cr_EVR</a> structure </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gafd45498cded762b53ecbb3f6d628ca28"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const char* cr_flag_to_str </td> <td>(</td> <td class="paramtype">gint64 </td> <td class="paramname"><em>flags</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Convert flags from RPM header to a string representation. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">flags</td><td>flags </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>flags as constant string </dd></dl> </div> </div> <a class="anchor" id="ga535a6c25ef8e2501090d913b258f6858"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* cr_get_filename </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>filepath</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return pointer to the rest of string after last '/'. (e.g. for "/foo/bar" returns "bar") </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">filepath</td><td>path </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>pointer into the path </dd></dl> </div> </div> <a class="anchor" id="gae9f4093c18110c3bbbe725ea9b6b8d74"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structcr___header_range_struct.html">cr_HeaderRangeStruct</a> cr_get_header_byte_range </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>filename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Return header byte range. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">filename</td><td>filename </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>header range (start = end = 0 on error) </dd></dl> </div> </div> <a class="anchor" id="ga4f01d7dacd945188af5e8341b9f2b52a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_log_fn </td> <td>(</td> <td class="paramtype">const gchar * </td> <td class="paramname"><em>log_domain</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GLogLevelFlags </td> <td class="paramname"><em>log_level</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const gchar * </td> <td class="paramname"><em>message</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">gpointer </td> <td class="paramname"><em>user_data</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Createrepo_c library standard logging function. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">log_domain</td><td>logging domain </td></tr> <tr><td class="paramname">log_level</td><td>logging level </td></tr> <tr><td class="paramname">message</td><td>message </td></tr> <tr><td class="paramname">user_data</td><td>user data </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga784407acebacdc7e50b63b544108b6e1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_nevr_free </td> <td>(</td> <td class="paramtype"><a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a> * </td> <td class="paramname"><em>nevr</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Free <a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a> </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">nevr</td><td><a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a> structure </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga84b0a360c8af9d689d7a8753949edd08"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_nevra_free </td> <td>(</td> <td class="paramtype"><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> * </td> <td class="paramname"><em>nevra</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Free <a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">nevra</td><td><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> structure </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gaa43e80d5c40473c1e77c2ceba31b7c4f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* cr_normalize_dir_path </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>path</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Normalize path (Path with exactly one trailing '/'). </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">path</td><td>path </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>mallocated string with normalized path or NULL </dd></dl> </div> </div> <a class="anchor" id="gaaf59b6c058e4b7bfbf0c225ebc881179"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_null_log_fn </td> <td>(</td> <td class="paramtype">const gchar * </td> <td class="paramname"><em>log_domain</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GLogLevelFlags </td> <td class="paramname"><em>log_level</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const gchar * </td> <td class="paramname"><em>message</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">gpointer </td> <td class="paramname"><em>user_data</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Logging function with no output. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">log_domain</td><td>logging domain </td></tr> <tr><td class="paramname">log_level</td><td>logging level </td></tr> <tr><td class="paramname">message</td><td>message </td></tr> <tr><td class="paramname">user_data</td><td>user data </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga2dd7feb284e4f3ef184c18e6590044e6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_queue_free_full </td> <td>(</td> <td class="paramtype">GQueue * </td> <td class="paramname"><em>queue</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GDestroyNotify </td> <td class="paramname"><em>free_f</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Convenience method, which frees all the memory used by a GQueue, and calls the specified destroy function on every element's data. This is the same function as g_queue_free_full(). The original function is implemented in glib since 2.32 but we need to support the older glib too. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">queue</td><td>a pointer to a GQueue </td></tr> <tr><td class="paramname">the</td><td>function to be called to free each element's data </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gac6d9ba4aafa31e8e1607244b1374f6b4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_remove_dir </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>path</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Recursively remove directory. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">path</td><td>filepath </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>cr_Error return code </dd></dl> </div> </div> <a class="anchor" id="ga093855ffde803555b194f45709a33644"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">gboolean cr_rm </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>path</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__misc.html#ga97be19a3fa0d6a79bfb494cb2294423f">cr_RmFlags</a> </td> <td class="paramname"><em>flags</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>working_dir</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Wrapper over rm command </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">path</td><td>Path (supports wildcards) </td></tr> <tr><td class="paramname">flags</td><td>Flags </td></tr> <tr><td class="paramname">working_dir</td><td>Working directory </td></tr> <tr><td class="paramname">err</td><td>GError ** </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gac4e4c3de2a51323ea0f4348dc9a8cf92"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void cr_slist_free_full </td> <td>(</td> <td class="paramtype">GSList * </td> <td class="paramname"><em>list</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GDestroyNotify </td> <td class="paramname"><em>free_f</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Frees all the memory used by a GSList, and calls the specified destroy function on every element's data. This is the same function as g_slist_free_full(). The original function is implemented in glib since 2.28 but we need to support the older glib too. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">list</td><td>pointer to GSList </td></tr> <tr><td class="paramname">free_f</td><td>the function to be called to free each element's data </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="gad9fe83e08547ce55e600425a7565eb84"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">gboolean cr_spawn_check_exit_status </td> <td>(</td> <td class="paramtype">gint </td> <td class="paramname"><em>exit_status</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>error</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Createrepo_c's reimplementation of convinient g_spawn_check_exit_status() function which is available since glib 2.34 (createrepo_c is currently compatible with glib >= 2.28) </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">exit_status</td><td>An exit code as returned from g_spawn_sync() </td></tr> <tr><td class="paramname">error</td><td>GError ** </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TRUE if child exited successfully, FALSE otherwise (and error will be set) </dd></dl> </div> </div> <a class="anchor" id="ga01c5103de03cc934388441486323e05a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a>* cr_split_rpm_filename </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>filename</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Split filename into the NEVRA. Supported formats: [path/]N-V-R:E.A[.rpm] [path/]E:N-V-R.A[.rpm] [path/]N-E:V-R.A[.rpm] [path/]N-V-R.A[.rpm]:E </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">filename</td><td>filename </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> </dd></dl> </div> </div> <a class="anchor" id="ga5c5ffe0b753d00c501913a5331f2f307"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structcr___e_v_r.html">cr_EVR</a>* cr_str_to_evr </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>string</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GStringChunk * </td> <td class="paramname"><em>chunk</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Convert epoch-version-release string into <a class="el" href="structcr___e_v_r.html">cr_EVR</a> structure. If no GStringChunk passed, all non NULL items in returned structure are malloced and in that case, you have to free all non-NULL element yourself. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">string</td><td>NULL terminated n-v-r string </td></tr> <tr><td class="paramname">chunk</td><td>string chunk for strings (optional - could be NULL) </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>filled NVR </dd></dl> </div> </div> <a class="anchor" id="ga8605c6e2c7a498104fbb147f4e676222"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a>* cr_str_to_nevr </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>Parse E:N-V-R or N-V-R:E or N-E:V-R string </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">str</td><td>NEVR string </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>Malloced <a class="el" href="structcr___n_e_v_r.html">cr_NEVR</a> or NULL on error </dd></dl> </div> </div> <a class="anchor" id="gab96c9422119f8ab89db7218aa06aa56a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a>* cr_str_to_nevra </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>Parse E:N-V-R.A, N-V-R:E.A, N-E:V-R.A or N-V-R.A:E string. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">str</td><td>NEVRA string </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>Malloced <a class="el" href="structcr___n_e_v_r_a.html">cr_NEVRA</a> or NULL on error </dd></dl> </div> </div> <a class="anchor" id="ga729df7956d57c03b0cd0ae7f645a8798"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structcr___version.html">cr_Version</a> cr_str_to_version </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>Convert version string into <a class="el" href="structcr___version.html">cr_Version</a> struct. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">str</td><td>version string </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd><a class="el" href="structcr___version.html">cr_Version</a> </dd></dl> </div> </div> <a class="anchor" id="ga9e4360f3ba71bafc55813bc4b0bd1071"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int cr_warning_cb </td> <td>(</td> <td class="paramtype"><a class="el" href="group__xml__parser.html#ga534c9fafb0d8f643a8153b5edcc784b8">cr_XmlParserWarningType</a> </td> <td class="paramname"><em>type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"><em>msg</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>cbdata</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Warning callback for xml parser warnings. For use in xml parsers like primary, filelists, other or repomd parser. Name of the parser should be passed as a string via warning callback data (warningcb_data) argument of the parser. </p> </div> </div> <a class="anchor" id="ga28aa07722ada8e9316009fc197ddc171"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">gboolean cr_write_to_file </td> <td>(</td> <td class="paramtype">GError ** </td> <td class="paramname"><em>err</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">gchar * </td> <td class="paramname"><em>filename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>format</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname"><em>...</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Open file and write content. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">err</td><td>GError ** </td></tr> <tr><td class="paramname">filename</td><td>Filename </td></tr> <tr><td class="paramname">format</td><td>Format string </td></tr> <tr><td class="paramname">...</td><td>Arguments </td></tr> </table> </dd> </dl> </div> </div> </div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="footer">Generated on Tue Nov 11 2014 15:15:01 for createrepo_c library by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li> </ul> </div> </body> </html>