<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <title>Open SCAP Library: debug_priv.h File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">Open SCAP Library </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.1.1 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <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 id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_fdedb0aba14d44ce9d99bc100e026e6a.html">common</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#define-members">Macros</a> | <a href="#enum-members">Enumerations</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <div class="title">debug_priv.h File Reference</div> </div> </div><!--header--> <div class="contents"> <p>oscap debug helpers private header <a href="#details">More...</a></p> <div class="textblock"><code>#include "util.h"</code><br/> <code>#include <assert.h></code><br/> <code>#include <stdlib.h></code><br/> <code>#include <stddef.h></code><br/> <code>#include <stdarg.h></code><br/> </div> <p><a href="debug__priv_8h_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:a59d20b73b3f1e1b76129b97853e0dad3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59d20b73b3f1e1b76129b97853e0dad3"></a> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_DEBUG_PRIV_H_</b></td></tr> <tr class="memitem:af00d3dee02bec38d88b90114c440d7e2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#af00d3dee02bec38d88b90114c440d7e2">OSCAP_DEBUG_FILE</a>   "oscap_debug.log"</td></tr> <tr class="memdesc:af00d3dee02bec38d88b90114c440d7e2"><td class="mdescLeft"> </td><td class="mdescRight">Hardcodede output filename. <a href="#af00d3dee02bec38d88b90114c440d7e2"></a><br/></td></tr> <tr class="memitem:adac017b064344cfb872d2c585efeac56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adac017b064344cfb872d2c585efeac56"></a> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#adac017b064344cfb872d2c585efeac56">OSCAP_DEBUG_FILE_ENV</a>   "OSCAP_DEBUG_FILE"</td></tr> <tr class="memdesc:adac017b064344cfb872d2c585efeac56"><td class="mdescLeft"> </td><td class="mdescRight">Name of the environment variable that can be used to change the default output filename. <br/></td></tr> <tr class="memitem:ac0c33ea248158ac24ddda0a9abf42f8b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#ac0c33ea248158ac24ddda0a9abf42f8b">OSCAP_DEBUG_LEVEL_ENV</a>   "OSCAP_DEBUG_LEVEL"</td></tr> <tr class="memdesc:ac0c33ea248158ac24ddda0a9abf42f8b"><td class="mdescLeft"> </td><td class="mdescRight">Name of the environment variable that can be used to change the debug level, i.e. <a href="#ac0c33ea248158ac24ddda0a9abf42f8b"></a><br/></td></tr> <tr class="memitem:adf5618c604c8c636560b0e461781aa6d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#adf5618c604c8c636560b0e461781aa6d">OSCAP_DEBUG_PATHSTRIP_ENV</a>   "OSCAP_DEBUG_PSTRIP"</td></tr> <tr class="memdesc:adf5618c604c8c636560b0e461781aa6d"><td class="mdescLeft"> </td><td class="mdescRight">Name of the environment variable that can be used to enable striping of <b>FILE</b> paths. <a href="#adf5618c604c8c636560b0e461781aa6d"></a><br/></td></tr> <tr class="memitem:ac83bf7ba9afcd185e6e5f5501d11e195"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac83bf7ba9afcd185e6e5f5501d11e195"></a> #define </td><td class="memItemRight" valign="bottom"><b>OSCAP_DEBUGOBJ_SEXP</b>   1</td></tr> <tr class="memitem:a3a077e4dad29aa6fe34ded73ca109c28"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a077e4dad29aa6fe34ded73ca109c28"></a> #define </td><td class="memItemRight" valign="bottom"><b>_A</b>(x)   assert(x)</td></tr> <tr class="memitem:a30d93e88b92336db618c4e6e809459db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a30d93e88b92336db618c4e6e809459db"></a> #define </td><td class="memItemRight" valign="bottom"><b>__dlprintf_wrapper</b>(l,...)   <a class="el" href="debug__priv_8h.html#afbcabe787ac758d8265629b050dd2a75">__oscap_dlprintf</a> (l, __FILE__, __PRETTY_FUNCTION__, __LINE__, __VA_ARGS__)</td></tr> <tr class="memitem:a0b0b9c20bb1cdf1d6e1c1834a11c9b91"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#a0b0b9c20bb1cdf1d6e1c1834a11c9b91">debug</a>(l)   if ((__debuglog_level = (__debuglog_level == -1 ? atoi (getenv (<a class="el" href="debug__priv_8h.html#ac0c33ea248158ac24ddda0a9abf42f8b">OSCAP_DEBUG_LEVEL_ENV</a>) == NULL ? "0" : getenv (<a class="el" href="debug__priv_8h.html#ac0c33ea248158ac24ddda0a9abf42f8b">OSCAP_DEBUG_LEVEL_ENV</a>)) : __debuglog_level)) && __debuglog_level >= (l))</td></tr> <tr class="memdesc:a0b0b9c20bb1cdf1d6e1c1834a11c9b91"><td class="mdescLeft"> </td><td class="mdescRight">Using this macro you can create a "debug block" with a verbosity level `l'. <a href="#a0b0b9c20bb1cdf1d6e1c1834a11c9b91"></a><br/></td></tr> <tr class="memitem:aacac41505f6d533bfebe565389a4f56f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#aacac41505f6d533bfebe565389a4f56f">oscap_dlprintf</a>(l,...)   __dlprintf_wrapper (l, __VA_ARGS__)</td></tr> <tr class="memdesc:aacac41505f6d533bfebe565389a4f56f"><td class="mdescLeft"> </td><td class="mdescRight">Convenience macro for calling __oscap_dlprintf. <a href="#aacac41505f6d533bfebe565389a4f56f"></a><br/></td></tr> <tr class="memitem:a6c9808badb4a822307121db6d9130c09"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6c9808badb4a822307121db6d9130c09"></a> #define </td><td class="memItemRight" valign="bottom"><b>dO</b>(type, obj)   __oscap_debuglog_object(__FILE__, __PRETTY_FUNCTION__, __LINE__, type, obj)</td></tr> <tr class="memitem:a52e0f14e4d17694d445e11aff5ba1a1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a52e0f14e4d17694d445e11aff5ba1a1f"></a> #define </td><td class="memItemRight" valign="bottom"><b>dI</b>(...)   <a class="el" href="debug__priv_8h.html#aacac41505f6d533bfebe565389a4f56f">oscap_dlprintf</a>(DBG_I, __VA_ARGS__)</td></tr> <tr class="memitem:a4f6ffd65bd106086bcf1c967bd32ee0d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f6ffd65bd106086bcf1c967bd32ee0d"></a> #define </td><td class="memItemRight" valign="bottom"><b>dW</b>(...)   <a class="el" href="debug__priv_8h.html#aacac41505f6d533bfebe565389a4f56f">oscap_dlprintf</a>(DBG_W, __VA_ARGS__)</td></tr> <tr class="memitem:ae3b61ff7f108896c8eefe88d2344d6b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae3b61ff7f108896c8eefe88d2344d6b9"></a> #define </td><td class="memItemRight" valign="bottom"><b>dE</b>(...)   <a class="el" href="debug__priv_8h.html#aacac41505f6d533bfebe565389a4f56f">oscap_dlprintf</a>(DBG_E, __VA_ARGS__)</td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="enum-members"></a> Enumerations</h2></td></tr> <tr class="memitem:a06fc87d81c62e9abb8790b6e5713c55b"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom">{ <b>DBG_E</b> = 1, <b>DBG_W</b>, <b>DBG_I</b> }</td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:afbcabe787ac758d8265629b050dd2a75"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="debug__priv_8h.html#afbcabe787ac758d8265629b050dd2a75">__oscap_dlprintf</a> (int level, const char *file, const char *fn, size_t line, const char *fmt,...)</td></tr> <tr class="memdesc:afbcabe787ac758d8265629b050dd2a75"><td class="mdescLeft"> </td><td class="mdescRight">Version of the oscap_dprintf function with support for debug level. <a href="#afbcabe787ac758d8265629b050dd2a75"></a><br/></td></tr> <tr class="memitem:a57e3b438e5a08d40c5e5b61182ba50d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a57e3b438e5a08d40c5e5b61182ba50d6"></a> void </td><td class="memItemRight" valign="bottom"><b>__oscap_debuglog_object</b> (const char *file, const char *fn, size_t line, int objtype, void *obj)</td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="var-members"></a> Variables</h2></td></tr> <tr class="memitem:ae208f15900608db65543579be1e91506"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae208f15900608db65543579be1e91506"></a> int </td><td class="memItemRight" valign="bottom"><b>__debuglog_level</b></td></tr> </table> <hr/><a name="details" id="details"></a><h2>Detailed Description</h2> <div class="textblock"><p>oscap debug helpers private header </p> </div><hr/><h2>Macro Definition Documentation</h2> <a class="anchor" id="a0b0b9c20bb1cdf1d6e1c1834a11c9b91"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define debug</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">l</td><td>)</td> <td>   if ((__debuglog_level = (__debuglog_level == -1 ? atoi (getenv (<a class="el" href="debug__priv_8h.html#ac0c33ea248158ac24ddda0a9abf42f8b">OSCAP_DEBUG_LEVEL_ENV</a>) == NULL ? "0" : getenv (<a class="el" href="debug__priv_8h.html#ac0c33ea248158ac24ddda0a9abf42f8b">OSCAP_DEBUG_LEVEL_ENV</a>)) : __debuglog_level)) && __debuglog_level >= (l))</td> </tr> </table> </div><div class="memdoc"> <p>Using this macro you can create a "debug block" with a verbosity level `l'. </p> <p>Example: The following code inside the debug block will be executed only if the debug level is larger that or equal to 3.</p> <p><a class="el" href="debug__priv_8h.html#a0b0b9c20bb1cdf1d6e1c1834a11c9b91" title="Using this macro you can create a "debug block" with a verbosity level `l'.">debug(3)</a> { int foo; foo = do_something_only_in_debug_mode(); ... } </p> </div> </div> <a class="anchor" id="af00d3dee02bec38d88b90114c440d7e2"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_DEBUG_FILE   "oscap_debug.log"</td> </tr> </table> </div><div class="memdoc"> <p>Hardcodede output filename. </p> <p>This is used as the default filename if the variable specified by OSCAP_DEBUG_FILE_ENV isn't defined. </p> </div> </div> <a class="anchor" id="ac0c33ea248158ac24ddda0a9abf42f8b"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_DEBUG_LEVEL_ENV   "OSCAP_DEBUG_LEVEL"</td> </tr> </table> </div><div class="memdoc"> <p>Name of the environment variable that can be used to change the debug level, i.e. </p> <p>the number and verbosity of the debug messages. XXX: not implemented yet </p> </div> </div> <a class="anchor" id="adf5618c604c8c636560b0e461781aa6d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define OSCAP_DEBUG_PATHSTRIP_ENV   "OSCAP_DEBUG_PSTRIP"</td> </tr> </table> </div><div class="memdoc"> <p>Name of the environment variable that can be used to enable striping of <b>FILE</b> paths. </p> <p>It's numeric value specifies how many path tokens from the end should remain after striping. Value 1 is equal to basename(<b>FILE</b>) If this environment variable isn't defined or is set to 0 then no striping is done. </p> </div> </div> <a class="anchor" id="aacac41505f6d533bfebe565389a4f56f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define oscap_dlprintf</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">l, </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>   __dlprintf_wrapper (l, __VA_ARGS__)</td> </tr> </table> </div><div class="memdoc"> <p>Convenience macro for calling __oscap_dlprintf. </p> <p>Only the fmt & it's arguments need to be specified. The <b>FILE</b>, <b>PRETTY_FUNCTION</b> and <b>LINE</b> macros are used for the first three arguments. </p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="afbcabe787ac758d8265629b050dd2a75"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void __oscap_dlprintf </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>level</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>file</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>fn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>line</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>fmt</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>Version of the oscap_dprintf function with support for debug level. </p> <p>Uses logic similar to the <a class="el" href="debug__priv_8h.html#a0b0b9c20bb1cdf1d6e1c1834a11c9b91" title="Using this macro you can create a "debug block" with a verbosity level `l'.">debug()</a> macro described above. </p> <dl class="params"><dt>Parameters:</dt><dd> <table class="params"> <tr><td class="paramname">level</td><td>debug level </td></tr> <tr><td class="paramname">file</td><td>name of the source file </td></tr> <tr><td class="paramname">fn</td><td>name of the function </td></tr> <tr><td class="paramname">line</td><td>current line </td></tr> <tr><td class="paramname">fmt</td><td>printf-line format string </td></tr> <tr><td class="paramname">...</td><td>__oscap_dlprintf parameters </td></tr> </table> </dd> </dl> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.1.1 </small></address> </body> </html>