Code Search for Developers
 
 
  

auto__nlist_8c-source.html from net-snmp at Krugle


Show auto__nlist_8c-source.html syntax highlighted

<!--#set var="section" value="development" -->
<!--#include virtual="/page-top.html" -->
<!-- CONTENT START -->
  <!-- Generated by Doxygen 1.3.9.1 -->

  <div class="qindex">
    <a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class=
    "qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class=
    "qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <a class=
    "qindex" href="examples.html">Examples</a>
  </div>

  <div class="nav">
    <a class="el" href="dir_000003.html">agent</a>
  </div>

  <h1>auto_nlist.c</h1>

  <div class="fragment">
    <pre class="fragment">
00001 <span class="preprocessor">#include &lt;net-snmp/net-snmp-config.h&gt;</span>
00002 
00003 <span class="preprocessor">#ifdef CAN_USE_NLIST</span>
00004 <span class="preprocessor">#if HAVE_STRING_H</span>
00005 <span class="preprocessor">#include &lt;string.h&gt;</span>
00006 <span class="preprocessor">#else</span>
00007 <span class="preprocessor">#include &lt;strings.h&gt;</span>
00008 <span class="preprocessor">#endif</span>
00009 
00010 <span class="preprocessor">#if HAVE_STDLIB_H</span>
00011 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
00012 <span class="preprocessor">#endif</span>
00013 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
00014 <span class="preprocessor">#include &lt;errno.h&gt;</span>
00015 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
00016 <span class="preprocessor">#include &lt;netinet/in.h&gt;</span>
00017 <span class="preprocessor">#ifdef HAVE_NLIST_H</span>
00018 <span class="preprocessor">#include &lt;nlist.h&gt;</span>
00019 <span class="preprocessor">#endif</span>
00020 <span class="preprocessor">#if HAVE_KVM_H</span>
00021 <span class="preprocessor">#include &lt;kvm.h&gt;</span>
00022 <span class="preprocessor">#endif</span>
00023 
00024 <span class="preprocessor">#include &lt;net-snmp/agent/auto_nlist.h&gt;</span>
00025 <span class="preprocessor">#include "autonlist.h"</span>
00026 <span class="preprocessor">#include "kernel.h"</span>
00027 
00028 <span class="preprocessor">#include &lt;net-snmp/net-snmp-includes.h&gt;</span>
00029 <span class="preprocessor">#include &lt;net-snmp/agent/ds_agent.h&gt;</span>
00030 
00031 <span class="keyword">struct </span>autonlist *nlists = 0;
00032 <span class="keyword">static</span> <span class="keywordtype">void</span>     init_nlist(<span class=
"keyword">struct</span> nlist *);
00033 
00034 <span class="keywordtype">long</span>
00035 auto_nlist_value(<span class="keyword">const</span> <span class="keywordtype">char</span> *string)
00036 {
00037     <span class="keyword">struct </span>autonlist **ptr, *it = 0;
00038     <span class="keywordtype">int</span>             cmp;
00039 
00040     <span class="keywordflow">if</span> (string == 0)
00041         <span class="keywordflow">return</span> 0;
00042 
00043     ptr = &amp;nlists;
00044     <span class="keywordflow">while</span> (*ptr != 0 &amp;&amp; it == 0) {
00045         cmp = strcmp((*ptr)-&gt;symbol, string);
00046         <span class="keywordflow">if</span> (cmp == 0)
00047             it = *ptr;
00048         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cmp &lt; 0) {
00049             ptr = &amp;((*ptr)-&gt;left);
00050         } <span class="keywordflow">else</span> {
00051             ptr = &amp;((*ptr)-&gt;right);
00052         }
00053     }
00054     <span class="keywordflow">if</span> (*ptr == 0) {
00055         *ptr = (<span class="keyword">struct </span>autonlist *) malloc(<span class="keyword">sizeof</span>(<span class=
"keyword">struct</span> autonlist));
00056         it = *ptr;
00057         it-&gt;left = 0;
00058         it-&gt;right = 0;
00059         it-&gt;symbol = (<span class="keywordtype">char</span> *) malloc(strlen(string) + 1);
00060         strcpy(it-&gt;symbol, string);
00061         <span class="comment">/*</span>
00062 <span class="comment">         * allocate an extra byte for inclusion of a preceding '_' later </span>
00063 <span class="comment">         */</span>
00064         it-&gt;nl[0].n_name = (<span class="keywordtype">char</span> *) malloc(strlen(string) + 2);
00065 <span class="preprocessor">#ifdef aix4</span>
00066         strcpy(it-&gt;nl[0].n_name, string);
00067 <span class="preprocessor">#else</span>
00068         sprintf(it-&gt;nl[0].n_name, <span class="stringliteral">"_%s"</span>, string);
00069 <span class="preprocessor">#endif</span>
00070         it-&gt;nl[1].n_name = 0;
00071         init_nlist(it-&gt;nl);
00072 <span class="preprocessor">#ifndef aix4</span>
00073         <span class="keywordflow">if</span> (it-&gt;nl[0].n_type == 0) {
00074             strcpy(it-&gt;nl[0].n_name, string);
00075             init_nlist(it-&gt;nl);
00076         }
00077 <span class="preprocessor">#endif</span>
00078         <span class="keywordflow">if</span> (it-&gt;nl[0].n_type == 0) {
00079             <span class="keywordflow">if</span> (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, 
00080                                         NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
00081                 <a class="code" href="group__snmp__logging.html#ga41">snmp_log</a>(LOG_ERR, <span class=
"stringliteral">"nlist err: neither %s nor _%s found.\n"</span>,
00082                          string, string);
00083             }
00084             <span class="keywordflow">return</span> (-1);
00085         } <span class="keywordflow">else</span> {
00086             DEBUGMSGTL((<span class="stringliteral">"auto_nlist"</span>, <span class=
"stringliteral">"nlist:  found symbol %s at %x.\n"</span>,
00087                         it-&gt;symbol, it-&gt;nl[0].n_value));
00088             <span class="keywordflow">return</span> (it-&gt;nl[0].n_value);
00089         }
00090     } <span class="keywordflow">else</span>
00091         <span class="keywordflow">return</span> (it-&gt;nl[0].n_value);
00092 }
00093 
00094 <span class="keywordtype">int</span>
00095 auto_nlist(<span class="keyword">const</span> <span class="keywordtype">char</span> *string, <span class=
"keywordtype">char</span> *var, <span class="keywordtype">int</span> size)
00096 {
00097     <span class="keywordtype">long</span>            result;
00098     <span class="keywordtype">int</span>             ret;
00099     result = auto_nlist_value(string);
00100     <span class="keywordflow">if</span> (result != -1) {
00101         <span class="keywordflow">if</span> (var != NULL) {
00102             ret = klookup(result, var, size);
00103             <span class="keywordflow">if</span> (!ret)
00104                 <a class="code" href="group__snmp__logging.html#ga41">snmp_log</a>(LOG_ERR,
00105                          <span class="stringliteral">"auto_nlist failed on %s at location %lx\n"</span>,
00106                          string, result);
00107             <span class="keywordflow">return</span> ret;
00108         } <span class="keywordflow">else</span>
00109             <span class="keywordflow">return</span> 1;
00110     }
00111     <span class="keywordflow">return</span> 0;
00112 }
00113 
00114 <span class="keyword">static</span> <span class="keywordtype">void</span>
00115 init_nlist(<span class="keyword">struct</span> nlist nl[])
00116 {
00117 <span class="preprocessor">#ifdef CAN_USE_NLIST</span>
00118     <span class="keywordtype">int</span>             ret;
00119 <span class="preprocessor">#if HAVE_KVM_OPENFILES</span>
00120     kvm_t          *kernel;
00121     <span class="keywordtype">char</span>            kvm_errbuf[4096];
00122 
00123     <span class="keywordflow">if</span> ((kernel = kvm_openfiles(KERNEL_LOC, NULL, NULL, O_RDONLY, kvm_errbuf))
00124         == NULL) {
00125         <span class="keywordflow">if</span> (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, 
00126                                    NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
00127             <span class="keywordflow">return</span>;
00128         } <span class="keywordflow">else</span> {
00129             snmp_log_perror(<span class="stringliteral">"kvm_openfiles"</span>);
00130             <a class="code" href="group__snmp__logging.html#ga41">snmp_log</a>(LOG_ERR, <span class=
"stringliteral">"kvm_openfiles: %s\n"</span>, kvm_errbuf);
00131             exit(1);
00132         }
00133     }
00134     <span class="keywordflow">if</span> ((ret = kvm_nlist(kernel, nl)) == -1) {
00135         <span class="keywordflow">if</span> (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, 
00136                                    NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
00137             <span class="keywordflow">return</span>;
00138         } <span class="keywordflow">else</span> {
00139             snmp_log_perror(<span class="stringliteral">"kvm_nlist"</span>);
00140             exit(1);
00141         }
00142     }
00143     kvm_close(kernel);
00144 <span class="preprocessor">#else                           </span><span class="comment">/* ! HAVE_KVM_OPENFILES */</span>
00145 <span class="preprocessor">#if defined(aix4) &amp;&amp; defined(HAVE_KNLIST)</span>
00146     <span class="keywordflow">if</span> (knlist(nl, 1, <span class="keyword">sizeof</span>(<span class=
"keyword">struct</span> nlist)) == -1) {
00147         DEBUGMSGTL((<span class="stringliteral">"auto_nlist"</span>, <span class=
"stringliteral">"knlist failed on symbol:  %s\n"</span>,
00148                     nl[0].n_name));
00149         <span class="keywordflow">if</span> (errno == EFAULT) {
00150             nl[0].n_type = 0;
00151             nl[0].n_value = 0;
00152         } <span class="keywordflow">else</span> {
00153             snmp_log_perror(<span class="stringliteral">"knlist"</span>);
00154             <span class="keywordflow">if</span> (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, 
00155                                        NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
00156                 <span class="keywordflow">return</span>;
00157             } <span class="keywordflow">else</span> {
00158                 exit(1);
00159             }
00160         }
00161     }
00162 <span class="preprocessor">#else</span>
00163     <span class="keywordflow">if</span> ((ret = nlist(KERNEL_LOC, nl)) == -1) {
00164         <span class="keywordflow">if</span> (netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, 
00165                                    NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
00166             <span class="keywordflow">return</span>;
00167         } <span class="keywordflow">else</span> {
00168             snmp_log_perror(<span class="stringliteral">"nlist"</span>);
00169             exit(1);
00170         }
00171     }
00172 <span class="preprocessor">#endif                          </span><span class="comment">/*aix4 */</span>
00173 <span class="preprocessor">#endif                          </span><span class="comment">/* ! HAVE_KVM_OPENFILES */</span>
00174     <span class="keywordflow">for</span> (ret = 0; nl[ret].n_name != NULL; ret++) {
00175 <span class="preprocessor">#ifdef aix4</span>
00176         <span class="keywordflow">if</span> (nl[ret].n_type == 0 &amp;&amp; nl[ret].n_value != 0)
00177             nl[ret].n_type = 1;
00178 <span class="preprocessor">#endif</span>
00179         <span class="keywordflow">if</span> (nl[ret].n_type == 0) {
00180             <span class="keywordflow">if</span> (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID, 
00181                                         NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
00182                 DEBUGMSGTL((<span class="stringliteral">"auto_nlist"</span>, <span class=
"stringliteral">"nlist err:  %s not found\n"</span>,
00183                             nl[ret].n_name));
00184             }
00185         } <span class="keywordflow">else</span> {
00186             DEBUGMSGTL((<span class="stringliteral">"auto_nlist"</span>, <span class=
"stringliteral">"nlist: %s 0x%X\n"</span>, nl[ret].n_name,
00187                         (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) nl[ret].n_value));
00188         }
00189     }
00190 <span class="preprocessor">#endif                          </span><span class="comment">/* CAN_USE_NLIST */</span>
00191 }
00192 
00193 <span class="keywordtype">int</span>
00194 KNLookup(<span class="keyword">struct</span> nlist nl[], <span class="keywordtype">int</span> nl_which, <span class=
"keywordtype">char</span> *buf, <span class="keywordtype">int</span> s)
00195 {
00196     <span class="keyword">struct </span>nlist   *nlp = &amp;nl[nl_which];
00197 
00198     <span class="keywordflow">if</span> (nlp-&gt;n_value == 0) {
00199         <a class="code" href="group__snmp__logging.html#ga41">snmp_log</a>(LOG_ERR, <span class=
"stringliteral">"Accessing non-nlisted variable: %s\n"</span>,
00200                  nlp-&gt;n_name);
00201         nlp-&gt;n_value = -1;      <span class="comment">/* only one error message ... */</span>
00202         <span class="keywordflow">return</span> 0;
00203     }
00204     <span class="keywordflow">if</span> (nlp-&gt;n_value == -1)
00205         <span class="keywordflow">return</span> 0;
00206 
00207     <span class="keywordflow">return</span> klookup(nlp-&gt;n_value, buf, s);
00208 }
00209 
00210 <span class="preprocessor">#ifdef TESTING</span>
00211 <span class="keywordtype">void</span>
00212 auto_nlist_print_tree(<span class="keywordtype">int</span> indent, <span class="keyword">struct</span> autonlist *ptr)
00213 {
00214     <span class="keywordtype">char</span>            buf[1024];
00215     <span class="keywordflow">if</span> (indent == -2) {
00216         <a class="code" href="group__snmp__logging.html#ga41">snmp_log</a>(LOG_ERR, <span class=
"stringliteral">"nlist tree:\n"</span>);
00217         auto_nlist_print_tree(12, nlists);
00218     } <span class="keywordflow">else</span> {
00219         <span class="keywordflow">if</span> (ptr == 0)
00220             <span class="keywordflow">return</span>;
00221         sprintf(buf, <span class="stringliteral">"%%%ds\n"</span>, indent);
00222         <span class="comment">/*</span>
00223 <span class="comment">         * DEBUGMSGTL(("auto_nlist", "buf: %s\n",buf)); </span>
00224 <span class="comment">         */</span>
00225         DEBUGMSGTL((<span class="stringliteral">"auto_nlist"</span>, buf, ptr-&gt;symbol));
00226         auto_nlist_print_tree(indent + 2, ptr-&gt;left);
00227         auto_nlist_print_tree(indent + 2, ptr-&gt;right);
00228     }
00229 }
00230 <span class="preprocessor">#endif</span>
00231 <span class="preprocessor">#else                           </span><span class="comment">/* !CAN_USE_NLIST */</span>
00232 <span class="preprocessor">#include &lt;net-snmp/agent/auto_nlist.h&gt;</span>
00233 <span class="keywordtype">int</span>
00234 auto_nlist_noop(<span class="keywordtype">void</span>)
00235 {
00236     <span class="keywordflow">return</span> 0;
00237 }
00238 <span class="preprocessor">#endif                          </span><span class="comment">/* CAN_USE_NLIST */</span>
</pre>
  </div>
  <hr size="1" />

  <address style="align: right;">
    <small>Generated on Fri Dec 30 13:47:44 2005 for net-snmp by&nbsp; <a href="http://www.doxygen.org/index.html"><img src=
    "doxygen.png" alt="doxygen" align="middle" border="0" /></a> 1.3.9.1</small>
  </address>
<!-- CONTENT END -->
<!--#include virtual="/page-bottom.html" -->





See more files for this project here

net-snmp

net-snmp provides tools and libraries relating to the Simple Network\r\nManagement Protocol including: An extensible agent, An SNMP library,\r\ntools to request or set information from SNMP agents, tools to\r\ngenerate and handle SNMP traps, etc.\r\n

Project homepage: http://sourceforge.net/projects/net-snmp
Programming language(s): C,Perl,Shell Script
License: other

  mfd/
  acconfig_8h-source.html
  acconfig_8h.html
  agent_2snmp__perl_8c-source.html
  agent__callbacks_8h-source.html
  agent__callbacks_8h.html
  agent__handler_8c-source.html
  agent__handler_8c.html
  agent__handler_8h-source.html
  agent__handler_8h.html
  agent__index_8c-source.html
  agent__index_8c.html
  agent__index_8h-source.html
  agent__index_8h.html
  agent__module__config_8h-source.html
  agent__read__config_8c-source.html
  agent__read__config_8c.html
  agent__read__config_8h-source.html
  agent__read__config_8h.html
  agent__registry_8c-source.html
  agent__registry_8c.html
  agent__registry_8h-source.html
  agent__registry_8h.html
  agent__trap_8c-source.html
  agent__trap_8c.html
  agent__trap_8h-source.html
  agent__trap_8h.html
  all__helpers_8c-source.html
  all__helpers_8h-source.html
  annotated.html
  asn1_8c-source.html
  asn1_8h-source.html
  auto__nlist_8c-source.html
  auto__nlist_8c.html
  auto__nlist_8h-source.html
  auto__nlist_8h.html
  autonlist_8h-source.html
  autonlist_8h.html
  baby__steps_8c-source.html
  baby__steps_8h-source.html
  blah.html
  bulk__to__next_8c-source.html
  bulk__to__next_8h-source.html
  cache__handler_8c-source.html
  cache__handler_8h-source.html
  callback_8c-source.html
  callback_8h-source.html
  check__varbind_8c-source.html
  check__varbind_8h-source.html
  cmu__compat_8c-source.html
  cmu__compat_8h-source.html
  config_8h-source.html
  config_8h.html
  config__api_8h-source.html
  container_8c-source.html
  container_8h-source.html
  container__binary__array_8c-source.html
  container__binary__array_8h-source.html
  container__iterator_8c-source.html
  container__iterator_8h-source.html
  container__list__ssll_8c-source.html
  container__list__ssll_8h-source.html
  container__null_8c-source.html
  container__null_8h-source.html
  data__list_8c-source.html
  data__list_8h-source.html
  data__set_8c-example.html
  data__set_8c-source.html
  data__set_8h-source.html
  debug__handler_8c-source.html
  debug__handler_8h-source.html
  default__store_8c-source.html
  default__store_8h-source.html
  default_store.html
  definitions_8h-source.html
  delayed__instance_8c-example.html
  delayed__instance_8c-source.html
  delayed__instance_8h-source.html
  deprecated.html
  dir_000000.html
  dir_000001.html
  dir_000002.html
  dir_000003.html
  dir_000004.html
  dir_000005.html
  dir_000006.html
  dir_000007.html
  dir_000008.html
  doxygen.css
  doxygen.gif
  doxygen.png
  ds__agent_8h-source.html
  ds__agent_8h.html
  example_8c-source.html
  example_8h-source.html
  examples.html
  factory_8h-source.html
  fd__event__manager_8c-source.html
  fd__event__manager_8h-source.html
  file__utils_8c-source.html
  file__utils_8h-source.html
  files.html