Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 2269bb274471fd2722517c2c0b740d7f > files > 65

rpm-devel-4.0.4-19mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>rpmdb/db3.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.17 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>rpmdb/db3.c</h1><a href="db3_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*@-type@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00006 <span class="comment">/*@unchecked@*/</span>
<a name="l00007"></a><a class="code" href="db3_8c.html#a0">00007</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a0">_debug</a> = 1;  <span class="comment">/* XXX if &lt; 0 debugging, &gt; 0 unusual error returns */</span>
00008 
00009 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span>
00010 
00011 <span class="preprocessor">#if defined(HAVE_FTOK) &amp;&amp; defined(HAVE_SYS_IPC_H)</span>
00012 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/ipc.h&gt;</span>
00013 <span class="preprocessor">#endif</span>
00014 <span class="preprocessor"></span>
00015 <span class="preprocessor">#if defined(__LCLINT__)</span>
00016 <span class="preprocessor"></span><span class="comment">/*@-redef@*/</span> <span class="comment">/* FIX: rpmio/rpmio.c also declares */</span>
00017 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> u_int32_t;
00018 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> u_int16_t;
00019 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> u_int8_t;
00020 <span class="comment">/*@-incondefs@*/</span>        <span class="comment">/* LCLint 3.0.0.15 */</span>
00021 <span class="keyword">typedef</span> <span class="keywordtype">int</span> int32_t;
00022 <span class="comment">/*@=incondefs@*/</span>
00023 <span class="comment">/*@=redef@*/</span>
00024 <span class="preprocessor">#endif</span>
00025 <span class="preprocessor"></span>
00026 <span class="preprocessor">#include &lt;db3/db.h&gt;</span>
00027 
00028 <span class="preprocessor">#include &lt;<a class="code" href="rpmlib_8h.html">rpmlib.h</a>&gt;</span>
00029 <span class="preprocessor">#include &lt;<a class="code" href="rpmmacro_8h.html">rpmmacro.h</a>&gt;</span>
00030 <span class="preprocessor">#include &lt;<a class="code" href="rpmurl_8h.html">rpmurl.h</a>&gt;</span>     <span class="comment">/* XXX urlPath proto */</span>
00031 
00032 <span class="preprocessor">#include "<a class="code" href="rpmdb_8h.html">rpmdb.h</a>"</span>
00033 
00034 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span>
00035 
00036 <span class="comment">/*@access rpmdb@*/</span>
00037 <span class="comment">/*@access dbiIndex@*/</span>
00038 <span class="comment">/*@access dbiIndexSet@*/</span>
00039 
00043 <span class="comment">/*@-fielduse@*/</span>
<a name="l00044"></a><a class="code" href="structdbiHStats__s.html">00044</a> <span class="keyword">struct </span><a class="code" href="structdbiHStats__s.html">dbiHStats_s</a> {
<a name="l00045"></a><a class="code" href="structdbiHStats__s.html#m0">00045</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m0">hash_magic</a>;    
<a name="l00046"></a><a class="code" href="structdbiHStats__s.html#m1">00046</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m1">hash_version</a>;  
<a name="l00047"></a><a class="code" href="structdbiHStats__s.html#m2">00047</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m2">hash_nkeys</a>;    
<a name="l00048"></a><a class="code" href="structdbiHStats__s.html#m3">00048</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m3">hash_ndata</a>;    
<a name="l00049"></a><a class="code" href="structdbiHStats__s.html#m4">00049</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m4">hash_pagesize</a>; 
<a name="l00050"></a><a class="code" href="structdbiHStats__s.html#m5">00050</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m5">hash_nelem</a>;    
<a name="l00051"></a><a class="code" href="structdbiHStats__s.html#m6">00051</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m6">hash_ffactor</a>;  
<a name="l00052"></a><a class="code" href="structdbiHStats__s.html#m7">00052</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m7">hash_buckets</a>;  
<a name="l00053"></a><a class="code" href="structdbiHStats__s.html#m8">00053</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m8">hash_free</a>;     
<a name="l00054"></a><a class="code" href="structdbiHStats__s.html#m9">00054</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m9">hash_bfree</a>;    
<a name="l00055"></a><a class="code" href="structdbiHStats__s.html#m10">00055</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m10">hash_bigpages</a>; 
<a name="l00056"></a><a class="code" href="structdbiHStats__s.html#m11">00056</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m11">hash_big_bfree</a>;
<a name="l00057"></a><a class="code" href="structdbiHStats__s.html#m12">00057</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m12">hash_overflows</a>;
<a name="l00058"></a><a class="code" href="structdbiHStats__s.html#m13">00058</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m13">hash_ovfl_free</a>;
<a name="l00059"></a><a class="code" href="structdbiHStats__s.html#m14">00059</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m14">hash_dup</a>;      
<a name="l00060"></a><a class="code" href="structdbiHStats__s.html#m15">00060</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiHStats__s.html#m15">hash_dup_free</a>; 
00061 };
00062 
<a name="l00066"></a><a class="code" href="structdbiBStats__s.html">00066</a> <span class="keyword">struct </span><a class="code" href="structdbiBStats__s.html">dbiBStats_s</a> {
<a name="l00067"></a><a class="code" href="structdbiBStats__s.html#m0">00067</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m0">bt_magic</a>;      
<a name="l00068"></a><a class="code" href="structdbiBStats__s.html#m1">00068</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m1">bt_version</a>;    
<a name="l00069"></a><a class="code" href="structdbiBStats__s.html#m2">00069</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m2">bt_nkeys</a>;      
<a name="l00070"></a><a class="code" href="structdbiBStats__s.html#m3">00070</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m3">bt_ndata</a>;      
<a name="l00071"></a><a class="code" href="structdbiBStats__s.html#m4">00071</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m4">bt_pagesize</a>;   
<a name="l00072"></a><a class="code" href="structdbiBStats__s.html#m5">00072</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m5">bt_minkey</a>;     
<a name="l00073"></a><a class="code" href="structdbiBStats__s.html#m6">00073</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m6">bt_re_len</a>;     
<a name="l00074"></a><a class="code" href="structdbiBStats__s.html#m7">00074</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m7">bt_re_pad</a>;     
<a name="l00075"></a><a class="code" href="structdbiBStats__s.html#m8">00075</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m8">bt_levels</a>;     
<a name="l00076"></a><a class="code" href="structdbiBStats__s.html#m9">00076</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m9">bt_int_pg</a>;     
<a name="l00077"></a><a class="code" href="structdbiBStats__s.html#m10">00077</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m10">bt_leaf_pg</a>;    
<a name="l00078"></a><a class="code" href="structdbiBStats__s.html#m11">00078</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m11">bt_dup_pg</a>;     
<a name="l00079"></a><a class="code" href="structdbiBStats__s.html#m12">00079</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m12">bt_over_pg</a>;    
<a name="l00080"></a><a class="code" href="structdbiBStats__s.html#m13">00080</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m13">bt_free</a>;       
<a name="l00081"></a><a class="code" href="structdbiBStats__s.html#m14">00081</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m14">bt_int_pgfree</a>; 
<a name="l00082"></a><a class="code" href="structdbiBStats__s.html#m15">00082</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m15">bt_leaf_pgfree</a>;
<a name="l00083"></a><a class="code" href="structdbiBStats__s.html#m16">00083</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m16">bt_dup_pgfree</a>; 
<a name="l00084"></a><a class="code" href="structdbiBStats__s.html#m17">00084</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structdbiBStats__s.html#m17">bt_over_pgfree</a>;
00085 };
00086 <span class="comment">/*@=fielduse@*/</span>
00087 
00088 <span class="comment">/*@-globuse -mustmod @*/</span>        <span class="comment">/* FIX: rpmError not annotated yet. */</span>
<a name="l00089"></a><a class="code" href="db3_8c.html#a2">00089</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a2">cvtdberr</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="keyword">const</span> <span class="keywordtype">char</span> * msg, <span class="keywordtype">int</span> error, <span class="keywordtype">int</span> printit)
00090         <span class="comment">/*@globals fileSystem @*/</span>
00091         <span class="comment">/*@modifies fileSystem @*/</span>
00092 {
00093     <span class="keywordtype">int</span> rc = 0;
00094 
00095     rc = error;
00096 
00097     <span class="keywordflow">if</span> (printit &amp;&amp; rc) {
00098         <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00099         <span class="keywordflow">if</span> (msg)
00100             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a69">RPMERR_DBERR</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"db%d error(%d) from %s: %s\n"</span>),
00101                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m15">dbi_api</a>, rc, msg, db_strerror(error));
00102         <span class="keywordflow">else</span>
00103             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a69">RPMERR_DBERR</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"db%d error(%d): %s\n"</span>),
00104                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m15">dbi_api</a>, rc, db_strerror(error));
00105         <span class="comment">/*@=moduncon@*/</span>
00106     }
00107 
00108     <span class="keywordflow">return</span> rc;
00109 }
00110 <span class="comment">/*@=globuse =mustmod @*/</span>
00111 
<a name="l00112"></a><a class="code" href="db3_8c.html#a3">00112</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a3">db_fini</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="keyword">const</span> <span class="keywordtype">char</span> * dbhome,
00113                 <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * dbfile,
00114                 <span class="comment">/*@unused@*/</span> <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * dbsubfile)
00115         <span class="comment">/*@globals fileSystem @*/</span>
00116         <span class="comment">/*@modifies fileSystem @*/</span>
00117 {
00118     <a class="code" href="structrpmdb__s.html">rpmdb</a> <a class="code" href="structrpmdb__s.html">rpmdb</a> = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m66">dbi_rpmdb</a>;
00119     <a class="code" href="rpmdb_8h.html#a1">DB_ENV</a> * dbenv = rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m16">db_dbenv</a>;
00120     <span class="keywordtype">int</span> rc;
00121 
00122     <span class="keywordflow">if</span> (dbenv == NULL)
00123         <span class="keywordflow">return</span> 0;
00124 
00125     rc = dbenv-&gt;close(dbenv, 0);
00126     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;close"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00127 
00128     <span class="keywordflow">if</span> (dbfile)
00129         <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"closed   db environment %s/%s\n"</span>),
00130                         dbhome, dbfile);
00131 
00132     <span class="keywordflow">if</span> (rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m7">db_remove_env</a> || dbi-&gt;<a class="code" href="struct__dbiIndex.html#m17">dbi_tear_down</a>) {
00133         <span class="keywordtype">int</span> xx;
00134 
00135         <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00136         xx = db_env_create(&amp;dbenv, 0);
00137         <span class="comment">/*@=moduncon@*/</span>
00138         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db_env_create"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00139 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4)</span>
00140 <span class="preprocessor"></span>        xx = dbenv-&gt;remove(dbenv, dbhome, 0);
00141 <span class="preprocessor">#else</span>
00142 <span class="preprocessor"></span>        xx = dbenv-&gt;remove(dbenv, dbhome, NULL, 0);
00143 <span class="preprocessor">#endif</span>
00144 <span class="preprocessor"></span>        xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;remove"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00145 
00146         <span class="keywordflow">if</span> (dbfile)
00147             <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"removed  db environment %s/%s\n"</span>),
00148                         dbhome, dbfile);
00149 
00150     }
00151     <span class="keywordflow">return</span> rc;
00152 }
00153 
<a name="l00154"></a><a class="code" href="db3_8c.html#a4">00154</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a4">db3_fsync_disable</a>(<span class="comment">/*@unused@*/</span> <span class="keywordtype">int</span> fd)
00155         <span class="comment">/*@*/</span>
00156 {
00157     <span class="keywordflow">return</span> 0;
00158 }
00159 
00160 <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
<a name="l00161"></a><a class="code" href="db3_8c.html#a5">00161</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a5">db_init</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="keyword">const</span> <span class="keywordtype">char</span> * dbhome,
00162                 <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * dbfile,
00163                 <span class="comment">/*@unused@*/</span> <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * dbsubfile,
00164                 <span class="comment">/*@out@*/</span> <a class="code" href="rpmdb_8h.html#a1">DB_ENV</a> ** dbenvp)
00165         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00166 <span class="comment">                fileSystem @*/</span>
00167         <span class="comment">/*@modifies dbi, *dbenvp, fileSystem @*/</span>
00168 {
00169     <a class="code" href="structrpmdb__s.html">rpmdb</a> <a class="code" href="structrpmdb__s.html">rpmdb</a> = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m66">dbi_rpmdb</a>;
00170     <a class="code" href="rpmdb_8h.html#a1">DB_ENV</a> *dbenv = NULL;
00171     <span class="keywordtype">int</span> eflags;
00172     <span class="keywordtype">int</span> rc;
00173 
00174     <span class="keywordflow">if</span> (dbenvp == NULL)
00175         <span class="keywordflow">return</span> 1;
00176 
00177     <span class="comment">/* XXX HACK */</span>
00178     <span class="comment">/*@-assignexpose@*/</span>
00179     <span class="keywordflow">if</span> (rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m11">db_errfile</a> == NULL)
00180         rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m11">db_errfile</a> = stderr;
00181     <span class="comment">/*@=assignexpose@*/</span>
00182 
00183     eflags = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> | dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a>);
00184     <span class="keywordflow">if</span> (eflags &amp; DB_JOINENV) eflags &amp;= DB_JOINENV;
00185 
00186     <span class="keywordflow">if</span> (dbfile)
00187         <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"opening  db environment %s/%s %s\n"</span>),
00188                 dbhome, dbfile, <a class="code" href="group__db3.html#a4">prDbiOpenFlags</a>(eflags, 1));
00189 
00190     <span class="comment">/* XXX Can't do RPC w/o host. */</span>
00191     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m28">dbi_host</a> == NULL)
00192         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m5">dbi_ecflags</a> &amp;= ~DB_CLIENT;
00193 
00194     <span class="comment">/* XXX Set a default shm_key. */</span>
00195     <span class="keywordflow">if</span> ((dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_SYSTEM_MEM) &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m14">dbi_shmkey</a> == 0) {
00196 <span class="preprocessor">#if defined(HAVE_FTOK)</span>
00197 <span class="preprocessor"></span>        dbi-&gt;<a class="code" href="struct__dbiIndex.html#m14">dbi_shmkey</a> = ftok(dbhome, 0);
00198 <span class="preprocessor">#else</span>
00199 <span class="preprocessor"></span>        dbi-&gt;<a class="code" href="struct__dbiIndex.html#m14">dbi_shmkey</a> = 0x44631380;
00200 <span class="preprocessor">#endif</span>
00201 <span class="preprocessor"></span>    }
00202 
00203     rc = db_env_create(&amp;dbenv, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m5">dbi_ecflags</a>);
00204     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db_env_create"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00205     <span class="keywordflow">if</span> (rc)
00206         <span class="keywordflow">goto</span> errxit;
00207 
00208     <span class="keywordflow">if</span> (dbenv == NULL)
00209         <span class="keywordflow">return</span> 1;
00210 
00211   { <span class="keywordtype">int</span> xx;
00212     <span class="comment">/*@-noeffectuncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00213     dbenv-&gt;set_errcall(dbenv, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m10">db_errcall</a>);
00214     dbenv-&gt;set_errfile(dbenv, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m11">db_errfile</a>);
00215     dbenv-&gt;set_errpfx(dbenv, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m6">db_errpfx</a>);
00216  <span class="comment">/* dbenv-&gt;set_paniccall(???) */</span>
00217     <span class="comment">/*@=noeffectuncon@*/</span>
00218     xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_CHKPOINT,
00219                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_CHKPOINT));
00220     xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_DEADLOCK,
00221                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_DEADLOCK));
00222     xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_RECOVERY,
00223                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_RECOVERY));
00224     xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_WAITSFOR,
00225                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_WAITSFOR));
00226  <span class="comment">/* dbenv-&gt;set_lg_max(???) */</span>
00227  <span class="comment">/* dbenv-&gt;set_lk_conflicts(???) */</span>
00228  <span class="comment">/* dbenv-&gt;set_lk_detect(???) */</span>
00229  <span class="comment">/* dbenv-&gt;set_lk_max(???) */</span>
00230     xx = dbenv-&gt;set_mp_mmapsize(dbenv, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m38">dbi_mp_mmapsize</a>);
00231     xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_mp_mmapsize"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00232     xx = dbenv-&gt;set_cachesize(dbenv, 0, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m39">dbi_mp_size</a>, 0);
00233     xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_cachesize"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00234  <span class="comment">/* dbenv-&gt;set_tx_max(???) */</span>
00235  <span class="comment">/* dbenv-&gt;set_tx_recover(???) */</span>
00236     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m22">dbi_no_fsync</a>) {
00237 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4)</span>
00238 <span class="preprocessor"></span>        xx = db_env_set_func_fsync(<a class="code" href="db3_8c.html#a4">db3_fsync_disable</a>);
00239 <span class="preprocessor">#else</span>
00240 <span class="preprocessor"></span>        xx = dbenv-&gt;set_func_fsync(dbenv, <a class="code" href="db3_8c.html#a4">db3_fsync_disable</a>);
00241 <span class="preprocessor">#endif</span>
00242 <span class="preprocessor"></span>        xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db_env_set_func_fsync"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00243     }
00244 
00245 <span class="comment">/* XXX 3.3.4 change. */</span>
00246 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR == 3) || (DB_VERSION_MAJOR == 4)</span>
00247 <span class="preprocessor"></span>    <span class="keywordflow">if</span> ((dbi-&gt;<a class="code" href="struct__dbiIndex.html#m5">dbi_ecflags</a> &amp; DB_CLIENT) &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m28">dbi_host</a>) {
00248         xx = dbenv-&gt;set_rpc_server(dbenv, NULL, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m28">dbi_host</a>,
00249                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m29">dbi_cl_timeout</a>, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m30">dbi_sv_timeout</a>, 0);
00250         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_server"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00251     }
00252 <span class="preprocessor">#else</span>
00253 <span class="preprocessor"></span>    <span class="keywordflow">if</span> ((dbi-&gt;<a class="code" href="struct__dbiIndex.html#m5">dbi_ecflags</a> &amp; DB_CLIENT) &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m28">dbi_host</a>) {
00254         xx = dbenv-&gt;set_server(dbenv, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m28">dbi_host</a>,
00255                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m29">dbi_cl_timeout</a>, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m30">dbi_sv_timeout</a>, 0);
00256         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_server"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00257     }
00258 <span class="preprocessor">#endif</span>
00259 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m14">dbi_shmkey</a>) {
00260         xx = dbenv-&gt;set_shm_key(dbenv, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m14">dbi_shmkey</a>);
00261         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_shm_key"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00262     }
00263     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m4">dbi_tmpdir</a>) {
00264         <span class="keyword">const</span> <span class="keywordtype">char</span> * root;
00265         <span class="keyword">const</span> <span class="keywordtype">char</span> * tmpdir;
00266 
00267         root = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m0">dbi_root</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m0">dbi_root</a> : rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m0">db_root</a>);
00268         <span class="keywordflow">if</span> ((root[0] == <span class="charliteral">'/'</span> &amp;&amp; root[1] == <span class="charliteral">'\0'</span>) || rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m9">db_chrootDone</a>)
00269             root = NULL;
00270         <span class="comment">/*@-mods@*/</span>
00271         tmpdir = <a class="code" href="macro_8c.html#a54">rpmGenPath</a>(root, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m4">dbi_tmpdir</a>, NULL);
00272         <span class="comment">/*@=mods@*/</span>
00273         xx = dbenv-&gt;set_tmp_dir(dbenv, tmpdir);
00274         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_tmp_dir"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00275         tmpdir = <a class="code" href="poptint_8h.html#a14">_free</a>(tmpdir);
00276     }
00277   }
00278 
00279 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR != 0) || (DB_VERSION_MAJOR == 4)</span>
00280 <span class="preprocessor"></span>    rc = dbenv-&gt;open(dbenv, dbhome, eflags, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m13">dbi_perms</a>);
00281 <span class="preprocessor">#else</span>
00282 <span class="preprocessor"></span>    rc = dbenv-&gt;open(dbenv, dbhome, NULL, eflags, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m13">dbi_perms</a>);
00283 <span class="preprocessor">#endif</span>
00284 <span class="preprocessor"></span>    rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;open"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00285     <span class="keywordflow">if</span> (rc)
00286         <span class="keywordflow">goto</span> errxit;
00287 
00288     *dbenvp = dbenv;
00289 
00290     <span class="keywordflow">return</span> 0;
00291 
00292 errxit:
00293     <span class="keywordflow">if</span> (dbenv) {
00294         <span class="keywordtype">int</span> xx;
00295         xx = dbenv-&gt;close(dbenv, 0);
00296         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;close"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00297     }
00298     <span class="keywordflow">return</span> rc;
00299 }
00300 <span class="comment">/*@=moduncon@*/</span>
00301 
<a name="l00302"></a><a class="code" href="db3_8c.html#a6">00302</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a6">db3sync</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00303         <span class="comment">/*@globals fileSystem @*/</span>
00304         <span class="comment">/*@modifies fileSystem @*/</span>
00305 {
00306     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00307     <span class="keywordtype">int</span> rc = 0;
00308     <span class="keywordtype">int</span> _printit;
00309 
00310     <span class="keywordflow">if</span> (db != NULL)
00311         rc = db-&gt;sync(db, flags);
00312     <span class="comment">/* XXX DB_INCOMPLETE is returned occaisionally with multiple access. */</span>
00313     _printit = (rc == DB_INCOMPLETE ? 0 : <a class="code" href="db3_8c.html#a0">_debug</a>);
00314     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;sync"</span>, rc, _printit);
00315     <span class="keywordflow">return</span> rc;
00316 }
00317 
<a name="l00318"></a><a class="code" href="db3_8c.html#a7">00318</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a7">db3c_del</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor, u_int32_t flags)
00319         <span class="comment">/*@globals fileSystem @*/</span>
00320         <span class="comment">/*@modifies fileSystem @*/</span>
00321 {
00322     <span class="keywordtype">int</span> rc;
00323 
00324     rc = dbcursor-&gt;c_del(dbcursor, flags);
00325     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbcursor-&gt;c_del"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00326     <span class="keywordflow">return</span> rc;
00327 }
00328 
<a name="l00329"></a><a class="code" href="db3_8c.html#a8">00329</a> <span class="comment">/*@unused@*/</span> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a8">db3c_dup</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor, <a class="code" href="rpmdb_8h.html#a2">DBC</a> ** dbcp,
00330                 u_int32_t flags)
00331         <span class="comment">/*@globals fileSystem @*/</span>
00332         <span class="comment">/*@modifies *dbcp, fileSystem @*/</span>
00333 {
00334     <span class="keywordtype">int</span> rc;
00335 
00336     <span class="keywordflow">if</span> (dbcp) *dbcp = NULL;
00337     rc = dbcursor-&gt;c_dup(dbcursor, dbcp, flags);
00338     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbcursor-&gt;c_dup"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00339     <span class="comment">/*@-nullstate @*/</span> <span class="comment">/* FIX: *dbcp can be NULL */</span>
00340     <span class="keywordflow">return</span> rc;
00341     <span class="comment">/*@=nullstate @*/</span>
00342 }
00343 
<a name="l00344"></a><a class="code" href="db3_8c.html#a9">00344</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a9">db3c_get</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00345                 DBT * key, DBT * data, u_int32_t flags)
00346         <span class="comment">/*@globals fileSystem @*/</span>
00347         <span class="comment">/*@modifies fileSystem @*/</span>
00348 {
00349     <span class="keywordtype">int</span> _printit;
00350     <span class="keywordtype">int</span> rc;
00351     <span class="keywordtype">int</span> rmw;
00352 
00353 <span class="preprocessor">#ifdef  NOTYET</span>
00354 <span class="preprocessor"></span>    <span class="keywordflow">if</span> ((dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_INIT_CDB) &amp;&amp; !(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> &amp; DB_RDONLY))
00355         rmw = DB_RMW;
00356     <span class="keywordflow">else</span>
00357 <span class="preprocessor">#endif</span>
00358 <span class="preprocessor"></span>        rmw = 0;
00359 
00360     rc = dbcursor-&gt;c_get(dbcursor, key, data, rmw | flags);
00361 
00362     <span class="comment">/* XXX DB_NOTFOUND can be returned */</span>
00363     _printit = (rc == DB_NOTFOUND ? 0 : <a class="code" href="db3_8c.html#a0">_debug</a>);
00364     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbcursor-&gt;c_get"</span>, rc, _printit);
00365     <span class="keywordflow">return</span> rc;
00366 }
00367 
<a name="l00368"></a><a class="code" href="db3_8c.html#a10">00368</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a10">db3c_put</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00369                 DBT * key, DBT * data, u_int32_t flags)
00370         <span class="comment">/*@globals fileSystem @*/</span>
00371         <span class="comment">/*@modifies fileSystem @*/</span>
00372 {
00373     <span class="keywordtype">int</span> rc;
00374 
00375     rc = dbcursor-&gt;c_put(dbcursor, key, data, flags);
00376 
00377     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbcursor-&gt;c_put"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00378     <span class="keywordflow">return</span> rc;
00379 }
00380 
<a name="l00381"></a><a class="code" href="db3_8c.html#a11">00381</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a11">db3c_close</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span> <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor)
00382         <span class="comment">/*@globals fileSystem @*/</span>
00383         <span class="comment">/*@modifies fileSystem @*/</span>
00384 {
00385     <span class="keywordtype">int</span> rc;
00386 
00387     <span class="keywordflow">if</span> (dbcursor == NULL) <span class="keywordflow">return</span> -2;
00388 
00389     rc = dbcursor-&gt;c_close(dbcursor);
00390     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbcursor-&gt;c_close"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00391     <span class="keywordflow">return</span> rc;
00392 }
00393 
<a name="l00394"></a><a class="code" href="db3_8c.html#a12">00394</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a12">db3c_open</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="comment">/*@null@*/</span> <span class="comment">/*@out@*/</span> <a class="code" href="rpmdb_8h.html#a2">DBC</a> ** dbcp,
00395                 <span class="keywordtype">int</span> dbiflags)
00396         <span class="comment">/*@globals fileSystem @*/</span>
00397         <span class="comment">/*@modifies *dbcp, fileSystem @*/</span>
00398 {
00399     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00400     DB_TXN * txnid = NULL;
00401     <span class="keywordtype">int</span> flags;
00402     <span class="keywordtype">int</span> rc;
00403 
00404     <span class="keywordflow">if</span> (db == NULL) <span class="keywordflow">return</span> -2;
00405     <span class="keywordflow">if</span> ((dbiflags &amp; <a class="code" href="rpmdb_8h.html#a5">DBI_WRITECURSOR</a>) &amp;&amp;
00406         (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_INIT_CDB) &amp;&amp; !(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> &amp; DB_RDONLY))
00407     {
00408         flags = DB_WRITECURSOR;
00409     } <span class="keywordflow">else</span>
00410         flags = 0;
00411     <span class="keywordflow">if</span> (dbcp) *dbcp = NULL;
00412     rc = db-&gt;cursor(db, txnid, dbcp, flags);
00413     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db3c_open"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00414 
00415     <span class="keywordflow">return</span> rc;
00416 }
00417 
<a name="l00418"></a><a class="code" href="db3_8c.html#a13">00418</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a13">db3cclose</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span> <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00419                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00420         <span class="comment">/*@globals fileSystem @*/</span>
00421         <span class="comment">/*@modifies dbi, fileSystem @*/</span>
00422 {
00423     <span class="keywordtype">int</span> rc = 0;
00424 
00425     <span class="comment">/* XXX per-iterator cursors */</span>
00426     <span class="keywordflow">if</span> (flags &amp; <a class="code" href="rpmdb_8h.html#a6">DBI_ITERATOR</a>)
00427         <span class="keywordflow">return</span> <a class="code" href="db3_8c.html#a11">db3c_close</a>(dbi, dbcursor);
00428 
00429     <span class="keywordflow">if</span> (!dbi-&gt;<a class="code" href="struct__dbiIndex.html#m18">dbi_use_cursors</a>)
00430         <span class="keywordflow">return</span> 0;
00431 
00432     <span class="comment">/*@-branchstate@*/</span>
00433     <span class="keywordflow">if</span> (dbcursor == NULL)
00434         dbcursor = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a>;
00435     <span class="comment">/*@=branchstate@*/</span>
00436     <span class="keywordflow">if</span> (dbcursor) {
00437         <span class="comment">/*@-branchstate@*/</span>
00438         <span class="keywordflow">if</span> (dbcursor == dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a>)
00439             dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a> = NULL;
00440         <span class="comment">/*@=branchstate@*/</span>
00441         rc = <a class="code" href="db3_8c.html#a11">db3c_close</a>(dbi, dbcursor);
00442     }
00443     <span class="comment">/*@-usereleased -compdef@*/</span> <span class="keywordflow">return</span> rc; <span class="comment">/*@=usereleased =compdef@*/</span>
00444 }
00445 
<a name="l00446"></a><a class="code" href="db3_8c.html#a14">00446</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a14">db3copen</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi,
00447                 <span class="comment">/*@null@*/</span> <span class="comment">/*@out@*/</span> <a class="code" href="rpmdb_8h.html#a2">DBC</a> ** dbcp, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00448         <span class="comment">/*@globals fileSystem @*/</span>
00449         <span class="comment">/*@modifies dbi, *dbcp, fileSystem @*/</span>
00450 {
00451     <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor;
00452     <span class="keywordtype">int</span> rc = 0;
00453 
00454     <span class="comment">/* XXX per-iterator cursors */</span>
00455     <span class="keywordflow">if</span> (flags &amp; <a class="code" href="rpmdb_8h.html#a6">DBI_ITERATOR</a>)
00456         <span class="keywordflow">return</span> <a class="code" href="db3_8c.html#a12">db3c_open</a>(dbi, dbcp, flags);
00457 
00458     <span class="keywordflow">if</span> (!dbi-&gt;<a class="code" href="struct__dbiIndex.html#m18">dbi_use_cursors</a>) {
00459         <span class="keywordflow">if</span> (dbcp) *dbcp = NULL;
00460         <span class="keywordflow">return</span> 0;
00461     }
00462 
00463     <span class="keywordflow">if</span> ((dbcursor = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a>) == NULL) {
00464         <span class="keywordflow">if</span> ((rc = <a class="code" href="db3_8c.html#a12">db3c_open</a>(dbi, &amp;dbcursor, flags)) == 0)
00465             dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a> = dbcursor;
00466     }
00467 
00468     <span class="keywordflow">if</span> (dbcp)
00469         <span class="comment">/*@-onlytrans@*/</span> *dbcp = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a>; <span class="comment">/*@=onlytrans@*/</span>
00470 
00471     <span class="keywordflow">return</span> rc;
00472 }
00473 
<a name="l00474"></a><a class="code" href="db3_8c.html#a15">00474</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a15">db3cput</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00475                 <span class="keyword">const</span> <span class="keywordtype">void</span> * keyp, size_t keylen,
00476                 <span class="keyword">const</span> <span class="keywordtype">void</span> * datap, size_t datalen,
00477                 <span class="comment">/*@unused@*/</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00478         <span class="comment">/*@globals fileSystem @*/</span>
00479         <span class="comment">/*@modifies fileSystem @*/</span>
00480 {
00481     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00482     DB_TXN * txnid = NULL;
00483     DBT key, data;
00484     <span class="keywordtype">int</span> rc;
00485 
00486     memset(&amp;key, 0, <span class="keyword">sizeof</span>(key));
00487     memset(&amp;data, 0, <span class="keyword">sizeof</span>(data));
00488     key.data = (<span class="keywordtype">void</span> *)keyp;
00489     key.size = keylen;
00490     data.data = (<span class="keywordtype">void</span> *)datap;
00491     data.size = datalen;
00492 
00493     <span class="keywordflow">if</span> (dbcursor == NULL) {
00494         <span class="keywordflow">if</span> (db == NULL) <span class="keywordflow">return</span> -2;
00495         rc = db-&gt;put(db, txnid, &amp;key, &amp;data, 0);
00496         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;put"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00497     } <span class="keywordflow">else</span> {
00498 
00499         rc = <a class="code" href="db3_8c.html#a10">db3c_put</a>(dbi, dbcursor, &amp;key, &amp;data, DB_KEYLAST);
00500 
00501     }
00502 
00503     <span class="keywordflow">return</span> rc;
00504 }
00505 
<a name="l00506"></a><a class="code" href="db3_8c.html#a16">00506</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a16">db3cdel</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00507                 <span class="keyword">const</span> <span class="keywordtype">void</span> * keyp, size_t keylen,
00508                 <span class="comment">/*@unused@*/</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00509         <span class="comment">/*@globals fileSystem @*/</span>
00510         <span class="comment">/*@modifies fileSystem @*/</span>
00511 {
00512     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00513     DB_TXN * txnid = NULL;
00514     DBT key, data;
00515     <span class="keywordtype">int</span> rc;
00516 
00517     memset(&amp;key, 0, <span class="keyword">sizeof</span>(key));
00518     memset(&amp;data, 0, <span class="keyword">sizeof</span>(data));
00519 
00520     key.data = (<span class="keywordtype">void</span> *)keyp;
00521     key.size = keylen;
00522 
00523     <span class="keywordflow">if</span> (dbcursor == NULL) {
00524         <span class="keywordflow">if</span> (db == NULL) <span class="keywordflow">return</span> -2;
00525         rc = db-&gt;del(db, txnid, &amp;key, 0);
00526         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;del"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00527     } <span class="keywordflow">else</span> {
00528 
00529         rc = <a class="code" href="db3_8c.html#a9">db3c_get</a>(dbi, dbcursor, &amp;key, &amp;data, DB_SET);
00530 
00531         <span class="keywordflow">if</span> (rc == 0) {
00532             <span class="comment">/* XXX TODO: loop over duplicates */</span>
00533             rc = <a class="code" href="db3_8c.html#a7">db3c_del</a>(dbi, dbcursor, 0);
00534         }
00535 
00536     }
00537 
00538     <span class="keywordflow">return</span> rc;
00539 }
00540 
<a name="l00541"></a><a class="code" href="db3_8c.html#a17">00541</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a17">db3cget</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00542                 <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> ** keyp, <span class="comment">/*@null@*/</span> size_t * keylen,
00543                 <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> ** datap, <span class="comment">/*@null@*/</span> size_t * datalen,
00544                 <span class="comment">/*@unused@*/</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00545         <span class="comment">/*@globals fileSystem @*/</span>
00546         <span class="comment">/*@modifies *keyp, *keylen, *datap, *datalen, fileSystem @*/</span>
00547 {
00548     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00549     DB_TXN * txnid = NULL;
00550     DBT key, data;
00551     <span class="keywordtype">int</span> rc;
00552 
00553     memset(&amp;key, 0, <span class="keyword">sizeof</span>(key));
00554     memset(&amp;data, 0, <span class="keyword">sizeof</span>(data));
00555     <span class="comment">/*@-unqualifiedtrans@*/</span>
00556     <span class="keywordflow">if</span> (keyp)           key.data = *keyp;
00557     <span class="keywordflow">if</span> (keylen)         key.size = *keylen;
00558     <span class="keywordflow">if</span> (datap)          data.data = *datap;
00559     <span class="keywordflow">if</span> (datalen)        data.size = *datalen;
00560     <span class="comment">/*@=unqualifiedtrans@*/</span>
00561 
00562     <span class="keywordflow">if</span> (dbcursor == NULL) {
00563         <span class="keywordtype">int</span> _printit;
00564         <span class="comment">/*@-compmempass@*/</span>
00565         <span class="keywordflow">if</span> (db == NULL) <span class="keywordflow">return</span> -2;
00566         <span class="comment">/*@=compmempass@*/</span>
00567         rc = db-&gt;get(db, txnid, &amp;key, &amp;data, 0);
00568         <span class="comment">/* XXX DB_NOTFOUND can be returned */</span>
00569         _printit = (rc == DB_NOTFOUND ? 0 : <a class="code" href="db3_8c.html#a0">_debug</a>);
00570         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;get"</span>, rc, _printit);
00571     } <span class="keywordflow">else</span> {
00572 
00573         <span class="comment">/* XXX db3 does DB_FIRST on uninitialized cursor */</span>
00574         rc = <a class="code" href="db3_8c.html#a9">db3c_get</a>(dbi, dbcursor, &amp;key, &amp;data,
00575                 key.data == NULL ? DB_NEXT : DB_SET);
00576 
00577     }
00578 
00579     <span class="keywordflow">if</span> (rc == 0) {
00580         <span class="comment">/*@-onlytrans@*/</span>
00581         <span class="keywordflow">if</span> (keyp)       *keyp = key.data;
00582         <span class="keywordflow">if</span> (keylen)     *keylen = key.size;
00583         <span class="keywordflow">if</span> (datap)      *datap = data.data;
00584         <span class="keywordflow">if</span> (datalen)    *datalen = data.size;
00585         <span class="comment">/*@=onlytrans@*/</span>
00586     }
00587 
00588     <span class="comment">/*@-compmempass -nullstate@*/</span>
00589     <span class="keywordflow">return</span> rc;
00590     <span class="comment">/*@=compmempass =nullstate@*/</span>
00591 }
00592 
<a name="l00593"></a><a class="code" href="db3_8c.html#a18">00593</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a18">db3ccount</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor,
00594                 <span class="comment">/*@null@*/</span> <span class="comment">/*@out@*/</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * countp,
00595                 <span class="comment">/*@unused@*/</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00596         <span class="comment">/*@globals fileSystem @*/</span>
00597         <span class="comment">/*@modifies *countp, fileSystem @*/</span>
00598 {
00599     db_recno_t count = 0;
00600     <span class="keywordtype">int</span> rc = 0;
00601 
00602     flags = 0;
00603     rc = dbcursor-&gt;c_count(dbcursor, &amp;count, flags);
00604     rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbcursor-&gt;c_count"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00605     <span class="keywordflow">if</span> (rc) <span class="keywordflow">return</span> rc;
00606     <span class="keywordflow">if</span> (countp) *countp = count;
00607 
00608     <span class="keywordflow">return</span> rc;
00609 }
00610 
<a name="l00611"></a><a class="code" href="db3_8c.html#a19">00611</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a19">db3byteswapped</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi) <span class="comment">/*@*/</span>
00612 {
00613     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00614     <span class="keywordtype">int</span> rc = 0;
00615 
00616     <span class="keywordflow">if</span> (db != NULL) {
00617 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR == 3 &amp;&amp; DB_VERSION_PATCH == 11) \</span>
00618 <span class="preprocessor"> || (DB_VERSION_MAJOR == 4)</span>
00619 <span class="preprocessor"></span>        <span class="keywordtype">int</span> isswapped = 0;
00620         rc = db-&gt;get_byteswapped(db, &amp;isswapped);
00621         <span class="keywordflow">if</span> (rc == 0)
00622             rc = isswapped;
00623 <span class="preprocessor">#else</span>
00624 <span class="preprocessor"></span>        rc = db-&gt;get_byteswapped(db);
00625 <span class="preprocessor">#endif</span>
00626 <span class="preprocessor"></span>    }
00627 
00628     <span class="keywordflow">return</span> rc;
00629 }
00630 
<a name="l00631"></a><a class="code" href="db3_8c.html#a20">00631</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a20">db3stat</a>(<a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00632         <span class="comment">/*@globals fileSystem @*/</span>
00633         <span class="comment">/*@modifies dbi, fileSystem @*/</span>
00634 {
00635     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00636     <span class="keywordtype">int</span> rc = 0;
00637 
00638     <span class="keywordflow">if</span> (db == NULL) <span class="keywordflow">return</span> -2;
00639 <span class="preprocessor">#if defined(DB_FAST_STAT)</span>
00640 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (flags)
00641         flags = DB_FAST_STAT;
00642     <span class="keywordflow">else</span>
00643 <span class="preprocessor">#endif</span>
00644 <span class="preprocessor"></span>        flags = 0;
00645     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m72">dbi_stats</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m72">dbi_stats</a>);
00646 <span class="comment">/* XXX 3.3.4 change. */</span>
00647 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR == 3) || (DB_VERSION_MAJOR == 4)</span>
00648 <span class="preprocessor"></span>    rc = db-&gt;stat(db, &amp;dbi-&gt;<a class="code" href="struct__dbiIndex.html#m72">dbi_stats</a>, flags);
00649 <span class="preprocessor">#else</span>
00650 <span class="preprocessor"></span>    rc = db-&gt;stat(db, &amp;dbi-&gt;<a class="code" href="struct__dbiIndex.html#m72">dbi_stats</a>, NULL, flags);
00651 <span class="preprocessor">#endif</span>
00652 <span class="preprocessor"></span>    rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;stat"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00653     <span class="keywordflow">return</span> rc;
00654 }
00655 
00656 <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
<a name="l00657"></a><a class="code" href="db3_8c.html#a21">00657</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a21">db3close</a>(<span class="comment">/*@only@*/</span> <a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi, <span class="comment">/*@unused@*/</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags)
00658         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00659 <span class="comment">                fileSystem @*/</span>
00660         <span class="comment">/*@modifies dbi, fileSystem @*/</span>
00661 {
00662     <a class="code" href="structrpmdb__s.html">rpmdb</a> <a class="code" href="structrpmdb__s.html">rpmdb</a> = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m66">dbi_rpmdb</a>;
00663     <span class="keyword">const</span> <span class="keywordtype">char</span> * urlfn = NULL;
00664     <span class="keyword">const</span> <span class="keywordtype">char</span> * root;
00665     <span class="keyword">const</span> <span class="keywordtype">char</span> * home;
00666     <span class="keyword">const</span> <span class="keywordtype">char</span> * dbhome;
00667     <span class="keyword">const</span> <span class="keywordtype">char</span> * dbfile;
00668     <span class="keyword">const</span> <span class="keywordtype">char</span> * dbsubfile;
00669     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a>;
00670     <span class="keywordtype">int</span> rc = 0, xx;
00671 
00672     flags = 0;  <span class="comment">/* XXX unused */</span>
00673 
00674     <span class="comment">/*</span>
00675 <span class="comment">     * Get the prefix/root component and directory path.</span>
00676 <span class="comment">     */</span>
00677     root = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m0">dbi_root</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m0">dbi_root</a> : rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m0">db_root</a>);
00678     <span class="keywordflow">if</span> ((root[0] == <span class="charliteral">'/'</span> &amp;&amp; root[1] == <span class="charliteral">'\0'</span>) || rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m9">db_chrootDone</a>)
00679         root = NULL;
00680     home = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m1">dbi_home</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m1">dbi_home</a> : rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m1">db_home</a>);
00681 
00682     <span class="comment">/*</span>
00683 <span class="comment">     * Either the root or directory components may be a URL. Concatenate,</span>
00684 <span class="comment">     * convert the URL to a path, and add the name of the file.</span>
00685 <span class="comment">     */</span>
00686     <span class="comment">/*@-mods@*/</span>
00687     urlfn = <a class="code" href="macro_8c.html#a54">rpmGenPath</a>(root, home, NULL);
00688     <span class="comment">/*@=mods@*/</span>
00689     (void) <a class="code" href="url_8c.html#a18">urlPath</a>(urlfn, &amp;dbhome);
00690     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>) {
00691         dbfile = NULL;
00692         dbsubfile = NULL;
00693     } <span class="keywordflow">else</span> {
00694 <span class="preprocessor">#ifdef  HACK    </span><span class="comment">/* XXX necessary to support dbsubfile */</span>
00695         dbfile = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> : db3basename);
00696         dbsubfile = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m3">dbi_subfile</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m3">dbi_subfile</a> : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>));
00697 <span class="preprocessor">#else</span>
00698 <span class="preprocessor"></span>        dbfile = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>));
00699         dbsubfile = NULL;
00700 <span class="preprocessor">#endif</span>
00701 <span class="preprocessor"></span>    }
00702 
00703     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a>)
00704         rc = <a class="code" href="db3_8c.html#a13">db3cclose</a>(dbi, NULL, 0);
00705 
00706     <span class="keywordflow">if</span> (db) {
00707         rc = db-&gt;close(db, 0);
00708         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;close"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00709         db = dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a> = NULL;
00710 
00711         <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"closed   db index       %s/%s\n"</span>),
00712                 dbhome, (dbfile ? dbfile : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>)));
00713 
00714     }
00715 
00716     <span class="keywordflow">if</span> (rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m16">db_dbenv</a> != NULL &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a>) {
00717         <span class="keywordflow">if</span> (rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m15">db_opens</a> == 1) {
00718             <span class="comment">/*@-nullstate@*/</span>
00719             xx = <a class="code" href="db3_8c.html#a3">db_fini</a>(dbi, (dbhome ? dbhome : <span class="stringliteral">""</span>), dbfile, dbsubfile);
00720             <span class="comment">/*@=nullstate@*/</span>
00721             rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m16">db_dbenv</a> = NULL;
00722         }
00723         rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m15">db_opens</a>--;
00724     }
00725 
00726     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m16">dbi_verify_on_close</a> &amp;&amp; !dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>) {
00727         <a class="code" href="rpmdb_8h.html#a1">DB_ENV</a> * dbenv = NULL;
00728 
00729         <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00730         rc = db_env_create(&amp;dbenv, 0);
00731         <span class="comment">/*@=moduncon@*/</span>
00732         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db_env_create"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00733         <span class="keywordflow">if</span> (rc || dbenv == NULL) <span class="keywordflow">goto</span> exit;
00734 
00735         <span class="comment">/*@-noeffectuncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00736         dbenv-&gt;set_errcall(dbenv, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m10">db_errcall</a>);
00737         dbenv-&gt;set_errfile(dbenv, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m11">db_errfile</a>);
00738         dbenv-&gt;set_errpfx(dbenv, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m6">db_errpfx</a>);
00739  <span class="comment">/*     dbenv-&gt;set_paniccall(???) */</span>
00740         <span class="comment">/*@=noeffectuncon@*/</span>
00741         xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_CHKPOINT,
00742                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_CHKPOINT));
00743         xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_DEADLOCK,
00744                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_DEADLOCK));
00745         xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_RECOVERY,
00746                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_RECOVERY));
00747         xx = dbenv-&gt;set_verbose(dbenv, DB_VERB_WAITSFOR,
00748                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a> &amp; DB_VERB_WAITSFOR));
00749 
00750         <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m4">dbi_tmpdir</a>) {
00751             <span class="comment">/*@-mods@*/</span>
00752             <span class="keyword">const</span> <span class="keywordtype">char</span> * tmpdir = <a class="code" href="macro_8c.html#a54">rpmGenPath</a>(root, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m4">dbi_tmpdir</a>, NULL);
00753             <span class="comment">/*@=mods@*/</span>
00754             rc = dbenv-&gt;set_tmp_dir(dbenv, tmpdir);
00755             rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;set_tmp_dir"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00756             tmpdir = <a class="code" href="poptint_8h.html#a14">_free</a>(tmpdir);
00757             <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
00758         }
00759             
00760         rc = dbenv-&gt;open(dbenv, dbhome,
00761             DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0);
00762         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;open"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00763         <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
00764 
00765         <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
00766         rc = db_create(&amp;db, dbenv, 0);
00767         <span class="comment">/*@=moduncon@*/</span>
00768         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db_create"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00769 
00770         <span class="keywordflow">if</span> (db != NULL) {
00771                 <span class="comment">/*@-mods@*/</span>
00772                 <span class="keyword">const</span> <span class="keywordtype">char</span> * dbf = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(dbhome, <span class="stringliteral">"/"</span>, dbfile, NULL);
00773                 <span class="comment">/*@=mods@*/</span>
00774 
00775                 rc = db-&gt;verify(db, dbf, NULL, NULL, flags);
00776                 rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;verify"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
00777 
00778                 <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"verified db index       %s/%s\n"</span>),
00779                         (dbhome ? dbhome : <span class="stringliteral">""</span>),
00780                         (dbfile ? dbfile : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>)));
00781 
00782                 xx = db-&gt;close(db, 0);
00783                 xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;close"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00784                 db = NULL;
00785                 <span class="keywordflow">if</span> (rc == 0 &amp;&amp; xx) rc = xx;
00786 
00787                 dbf = <a class="code" href="poptint_8h.html#a14">_free</a>(dbf);
00788         }
00789         xx = dbenv-&gt;close(dbenv, 0);
00790         xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"dbenv-&gt;close"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
00791         <span class="keywordflow">if</span> (rc == 0 &amp;&amp; xx) rc = xx;
00792     }
00793 
00794 exit:
00795     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a> = NULL;
00796 
00797     urlfn = <a class="code" href="poptint_8h.html#a14">_free</a>(urlfn);
00798 
00799     dbi = <a class="code" href="group__db3.html#a3">db3Free</a>(dbi);
00800 
00801     <span class="keywordflow">return</span> rc;
00802 }
00803 <span class="comment">/*@=moduncon@*/</span>
00804 
<a name="l00805"></a><a class="code" href="db3_8c.html#a22">00805</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="db3_8c.html#a22">db3open</a>(<span class="comment">/*@keep@*/</span> <a class="code" href="structrpmdb__s.html">rpmdb</a> <a class="code" href="structrpmdb__s.html">rpmdb</a>, <span class="keywordtype">int</span> rpmtag, <a class="code" href="struct__dbiIndex.html">dbiIndex</a> * dbip)
00806         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00807 <span class="comment">                fileSystem @*/</span>
00808         <span class="comment">/*@modifies *dbip, fileSystem @*/</span>
00809 {
00810     <span class="comment">/*@-nestedextern@*/</span>
00811     <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="struct__dbiVec.html">_dbiVec</a> db3vec;
00812     <span class="comment">/*@=nestedextern@*/</span>
00813     <span class="keyword">const</span> <span class="keywordtype">char</span> * urlfn = NULL;
00814     <span class="keyword">const</span> <span class="keywordtype">char</span> * root;
00815     <span class="keyword">const</span> <span class="keywordtype">char</span> * home;
00816     <span class="keyword">const</span> <span class="keywordtype">char</span> * dbhome;
00817     <span class="keyword">const</span> <span class="keywordtype">char</span> * dbfile;
00818     <span class="keyword">const</span> <span class="keywordtype">char</span> * dbsubfile;
00819     <a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi = NULL;
00820     <span class="keywordtype">int</span> rc = 0;
00821     <span class="keywordtype">int</span> xx;
00822 
00823     <a class="code" href="rpmdb_8h.html#a0">DB</a> * db = NULL;
00824     <a class="code" href="rpmdb_8h.html#a1">DB_ENV</a> * dbenv = NULL;
00825     DB_TXN * txnid = NULL;
00826     u_int32_t oflags;
00827     <span class="keywordtype">int</span> _printit;
00828 
00829     <span class="keywordflow">if</span> (dbip)
00830         *dbip = NULL;
00831 
00832     <span class="comment">/*</span>
00833 <span class="comment">     * Parse db configuration parameters.</span>
00834 <span class="comment">     */</span>
00835     <span class="comment">/*@-mods@*/</span>
00836     <span class="keywordflow">if</span> ((dbi = <a class="code" href="group__db3.html#a2">db3New</a>(rpmdb, rpmtag)) == NULL)
00837         <span class="comment">/*@-nullstate@*/</span>
00838         <span class="keywordflow">return</span> 1;
00839         <span class="comment">/*@=nullstate@*/</span>
00840     <span class="comment">/*@=mods@*/</span>
00841     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m15">dbi_api</a> = <a class="code" href="db1_8c.html#a1">DB_VERSION_MAJOR</a>;
00842 
00843     <span class="comment">/*</span>
00844 <span class="comment">     * Get the prefix/root component and directory path.</span>
00845 <span class="comment">     */</span>
00846     root = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m0">dbi_root</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m0">dbi_root</a> : rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m0">db_root</a>);
00847     <span class="keywordflow">if</span> ((root[0] == <span class="charliteral">'/'</span> &amp;&amp; root[1] == <span class="charliteral">'\0'</span>) || rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m9">db_chrootDone</a>)
00848         root = NULL;
00849     home = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m1">dbi_home</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m1">dbi_home</a> : rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m1">db_home</a>);
00850 
00851     <span class="comment">/*</span>
00852 <span class="comment">     * Either the root or directory components may be a URL. Concatenate,</span>
00853 <span class="comment">     * convert the URL to a path, and add the name of the file.</span>
00854 <span class="comment">     */</span>
00855     <span class="comment">/*@-mods@*/</span>
00856     urlfn = <a class="code" href="macro_8c.html#a54">rpmGenPath</a>(root, home, NULL);
00857     <span class="comment">/*@=mods@*/</span>
00858     (void) <a class="code" href="url_8c.html#a18">urlPath</a>(urlfn, &amp;dbhome);
00859     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>) {
00860         dbfile = NULL;
00861         dbsubfile = NULL;
00862     } <span class="keywordflow">else</span> {
00863 <span class="preprocessor">#ifdef  HACK    </span><span class="comment">/* XXX necessary to support dbsubfile */</span>
00864         dbfile = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> : db3basename);
00865         dbsubfile = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m3">dbi_subfile</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m3">dbi_subfile</a> : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>));
00866 <span class="preprocessor">#else</span>
00867 <span class="preprocessor"></span>        dbfile = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> ? dbi-&gt;<a class="code" href="struct__dbiIndex.html#m2">dbi_file</a> : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>));
00868         dbsubfile = NULL;
00869 <span class="preprocessor">#endif</span>
00870 <span class="preprocessor"></span>    }
00871 
00872     oflags = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> | dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a>);
00873     oflags &amp;= ~DB_TRUNCATE;     <span class="comment">/* XXX this is dangerous */</span>
00874 
00875 <span class="preprocessor">#if 0   </span><span class="comment">/* XXX rpmdb: illegal flag combination specified to DB-&gt;open */</span>
00876     <span class="keywordflow">if</span> ( dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; O_EXCL) oflags |= DB_EXCL;
00877 <span class="preprocessor">#endif</span>
00878 <span class="preprocessor"></span>
00879     <span class="comment">/*</span>
00880 <span class="comment">     * Map open mode flags onto configured database/environment flags.</span>
00881 <span class="comment">     */</span>
00882     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>) {
00883         oflags |= DB_CREATE;
00884         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> |= DB_CREATE;
00885         oflags &amp;= ~DB_RDONLY;
00886         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> &amp;= ~DB_RDONLY;
00887     } <span class="keywordflow">else</span> {
00888         <span class="keywordflow">if</span> (!(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; (O_RDWR|O_WRONLY))) oflags |= DB_RDONLY;
00889         <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; O_CREAT) {
00890             oflags |= DB_CREATE;
00891             dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> |= DB_CREATE;
00892         }
00893 <span class="preprocessor">#ifdef  DANGEROUS</span>
00894 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; O_TRUNC) oflags |= DB_TRUNCATE;
00895 <span class="preprocessor">#endif</span>
00896 <span class="preprocessor"></span>    }
00897 
00898     <span class="comment">/*</span>
00899 <span class="comment">     * Avoid incompatible DB_CREATE/DB_RDONLY flags on DBENV-&gt;open.</span>
00900 <span class="comment">     */</span>
00901     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a>) {
00902         <span class="keywordflow">if</span> (access(dbhome, <a class="code" href="system_8h.html#a9">W_OK</a>) == -1) {
00903 
00904             <span class="comment">/* dbhome is unwritable, don't attempt DB_CREATE on DB-&gt;open ... */</span>
00905             oflags &amp;= ~DB_CREATE;
00906 
00907             <span class="comment">/* ... but DBENV-&gt;open might still need DB_CREATE ... */</span>
00908             <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_PRIVATE) {
00909                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp;= ~DB_JOINENV;
00910             } <span class="keywordflow">else</span> {
00911                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> |= DB_JOINENV;
00912                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> &amp;= ~DB_CREATE;
00913                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> &amp;= ~DB_THREAD;
00914                 <span class="comment">/* ... but, unless DB_PRIVATE is used, skip DBENV. */</span>
00915                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a> = 0;
00916             }
00917 
00918             <span class="comment">/* ... DB_RDONLY maps dbhome perms across files ...  */</span>
00919             <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>) {
00920                 oflags |= DB_CREATE;
00921                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> |= DB_CREATE;
00922                 oflags &amp;= ~DB_RDONLY;
00923                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> &amp;= ~DB_RDONLY;
00924             } <span class="keywordflow">else</span> {
00925                 oflags |= DB_RDONLY;
00926                 <span class="comment">/* ... and DB_WRITECURSOR won't be needed ...  */</span>
00927                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> |= DB_RDONLY;
00928             }
00929 
00930         } <span class="keywordflow">else</span> {        <span class="comment">/* dbhome is writable, check for persistent dbenv. */</span>
00931             <span class="comment">/*@-mods@*/</span>
00932             <span class="keyword">const</span> <span class="keywordtype">char</span> * dbf = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(dbhome, <span class="stringliteral">"/__db.001"</span>, NULL);
00933             <span class="comment">/*@=mods@*/</span>
00934 
00935             <span class="keywordflow">if</span> (access(dbf, <a class="code" href="system_8h.html#a7">F_OK</a>) == -1) {
00936                 <span class="comment">/* ... non-existent (or unwritable) DBENV, will create ... */</span>
00937                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> |= DB_CREATE;
00938                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp;= ~DB_JOINENV;
00939             } <span class="keywordflow">else</span> {
00940                 <span class="comment">/* ... pre-existent (or bogus) DBENV, will join ... */</span>
00941                 <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_PRIVATE) {
00942                     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp;= ~DB_JOINENV;
00943                 } <span class="keywordflow">else</span> {
00944                     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> |= DB_JOINENV;
00945                     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> &amp;= ~DB_CREATE;
00946                     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m7">dbi_oeflags</a> &amp;= ~DB_THREAD;
00947                 }
00948             }
00949             dbf = <a class="code" href="poptint_8h.html#a14">_free</a>(dbf);
00950         }
00951     }
00952 
00953     <span class="comment">/*</span>
00954 <span class="comment">     * Avoid incompatible DB_CREATE/DB_RDONLY flags on DB-&gt;open.</span>
00955 <span class="comment">     */</span>
00956     <span class="keywordflow">if</span> ((oflags &amp; DB_CREATE) &amp;&amp; (oflags &amp; DB_RDONLY)) {
00957         <span class="comment">/* dbhome is writable, and DB-&gt;open flags may conflict. */</span>
00958         <span class="keyword">const</span> <span class="keywordtype">char</span> * dbfn = (dbfile ? dbfile : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>));
00959         <span class="comment">/*@-mods@*/</span>
00960         <span class="keyword">const</span> <span class="keywordtype">char</span> * dbf = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(dbhome, <span class="stringliteral">"/"</span>, dbfn, NULL);
00961         <span class="comment">/*@=mods@*/</span>
00962 
00963         <span class="keywordflow">if</span> (access(dbf, <a class="code" href="system_8h.html#a7">F_OK</a>) == -1) {
00964             <span class="comment">/* File does not exist, DB-&gt;open might create ... */</span>
00965             oflags &amp;= ~DB_RDONLY;
00966         } <span class="keywordflow">else</span> {
00967             <span class="comment">/* File exists, DB-&gt;open need not create ... */</span>
00968             oflags &amp;= ~DB_CREATE;
00969         }
00970 
00971         <span class="comment">/* Only writers need DB_WRITECURSOR ... */</span>
00972         <span class="keywordflow">if</span> (!(oflags &amp; DB_RDONLY) &amp;&amp; access(dbf, <a class="code" href="system_8h.html#a9">W_OK</a>) == 0) {
00973             dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> &amp;= ~DB_RDONLY;
00974         } <span class="keywordflow">else</span> {
00975             dbi-&gt;<a class="code" href="struct__dbiIndex.html#m9">dbi_oflags</a> |= DB_RDONLY;
00976         }
00977         dbf = <a class="code" href="poptint_8h.html#a14">_free</a>(dbf);
00978     }
00979 
00980     <span class="comment">/*</span>
00981 <span class="comment">     * Turn off verify-on-close if opening read-only.</span>
00982 <span class="comment">     */</span>
00983     <span class="keywordflow">if</span> (oflags &amp; DB_RDONLY)
00984         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m16">dbi_verify_on_close</a> = 0;
00985 
00986     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a>) {
00987         <span class="comment">/*@-mods@*/</span>
00988         <span class="keywordflow">if</span> (rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m16">db_dbenv</a> == NULL) {
00989             rc = <a class="code" href="db3_8c.html#a5">db_init</a>(dbi, dbhome, dbfile, dbsubfile, &amp;dbenv);
00990             <span class="keywordflow">if</span> (rc == 0) {
00991                 rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m16">db_dbenv</a> = dbenv;
00992                 rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m15">db_opens</a> = 1;
00993             }
00994         } <span class="keywordflow">else</span> {
00995             dbenv = rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m16">db_dbenv</a>;
00996             rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m15">db_opens</a>++;
00997         }
00998         <span class="comment">/*@=mods@*/</span>
00999     }
01000 
01001     <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"opening  db index       %s/%s %s mode=0x%x\n"</span>),
01002                 dbhome, (dbfile ? dbfile : <a class="code" href="tagName_8c.html#a0">tagName</a>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m67">dbi_rpmtag</a>)),
01003                 prDbiOpenFlags(oflags, 0), dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a>);
01004 
01005     <span class="keywordflow">if</span> (rc == 0) {
01006         <span class="keyword">static</span> <span class="keywordtype">int</span> _lockdbfd = 0;
01007 
01008         <span class="comment">/*@-moduncon@*/</span> <span class="comment">/* FIX: annotate db3 methods */</span>
01009         rc = db_create(&amp;db, dbenv, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m6">dbi_cflags</a>);
01010         <span class="comment">/*@=moduncon@*/</span>
01011         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db_create"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01012         <span class="keywordflow">if</span> (rc == 0 &amp;&amp; db != NULL) {
01013             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m31">dbi_lorder</a>) {
01014                 rc = db-&gt;set_lorder(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m31">dbi_lorder</a>);
01015                 rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_lorder"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01016             }
01017             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m47">dbi_cachesize</a>) {
01018                 rc = db-&gt;set_cachesize(db, 0, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m47">dbi_cachesize</a>, 0);
01019                 rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_cachesize"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01020             }
01021             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m48">dbi_pagesize</a>) {
01022                 rc = db-&gt;set_pagesize(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m48">dbi_pagesize</a>);
01023                 rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_pagesize"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01024             }
01025 <span class="comment">/* XXX 3.3.4 change. */</span>
01026 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR == 3) || (DB_VERSION_MAJOR == 4)</span>
01027 <span class="preprocessor"></span>            <span class="keywordflow">if</span> (rc == 0 &amp;&amp;
01028                         rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m12">db_malloc</a> &amp;&amp; rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m13">db_realloc</a> &amp;&amp; rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m14">db_free</a>)
01029             {
01030                 rc = db-&gt;set_alloc(db,
01031                         rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m12">db_malloc</a>, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m13">db_realloc</a>, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m14">db_free</a>);
01032                 rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_alloc"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01033             }
01034 <span class="preprocessor">#else</span>
01035 <span class="preprocessor"></span>            <span class="keywordflow">if</span> (rc == 0 &amp;&amp; rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m12">db_malloc</a>) {
01036                 rc = db-&gt;set_malloc(db, rpmdb-&gt;<a class="code" href="structrpmdb__s.html#m12">db_malloc</a>);
01037                 rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_malloc"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01038             }
01039 <span class="preprocessor">#endif</span>
01040 <span class="preprocessor"></span>            <span class="keywordflow">if</span> (rc == 0 &amp;&amp; oflags &amp; DB_CREATE) {
01041                 <span class="keywordflow">switch</span>(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m11">dbi_type</a>) {
01042                 <span class="keywordflow">default</span>:
01043                 <span class="keywordflow">case</span> DB_HASH:
01044                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m50">dbi_h_ffactor</a>) {
01045                         rc = db-&gt;set_h_ffactor(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m50">dbi_h_ffactor</a>);
01046                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_h_ffactor"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01047                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01048                     }
01049                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m52">dbi_h_nelem</a>) {
01050                         rc = db-&gt;set_h_nelem(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m52">dbi_h_nelem</a>);
01051                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_h_nelem"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01052                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01053                     }
01054                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m53">dbi_h_flags</a>) {
01055                         rc = db-&gt;set_flags(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m53">dbi_h_flags</a>);
01056                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_h_flags"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01057                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01058                     }
01059 <span class="comment">/* XXX db-3.2.9 has added a DB arg to the call. */</span>
01060 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR &gt; 2) || (DB_VERSION_MAJOR == 4)</span>
01061 <span class="preprocessor"></span>                    <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m51">dbi_h_hash_fcn</a>) {
01062                         rc = db-&gt;set_h_hash(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m51">dbi_h_hash_fcn</a>);
01063                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_h_hash"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01064                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01065                     }
01066                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m54">dbi_h_dup_compare_fcn</a>) {
01067                         rc = db-&gt;set_dup_compare(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m54">dbi_h_dup_compare_fcn</a>);
01068                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_dup_compare"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01069                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01070                     }
01071 <span class="preprocessor">#endif</span>
01072 <span class="preprocessor"></span>                    <span class="keywordflow">break</span>;
01073                 <span class="keywordflow">case</span> DB_BTREE:
01074                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m55">dbi_bt_flags</a>) {
01075                         rc = db-&gt;set_flags(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m55">dbi_bt_flags</a>);
01076                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_bt_flags"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01077                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01078                     }
01079                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m56">dbi_bt_minkey</a>) {
01080                         rc = db-&gt;set_bt_minkey(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m56">dbi_bt_minkey</a>);
01081                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_bt_minkey"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01082                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01083                     }
01084 <span class="comment">/* XXX db-3.2.9 has added a DB arg to the call. */</span>
01085 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR &gt; 2) || (DB_VERSION_MAJOR == 4)</span>
01086 <span class="preprocessor"></span>                    <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m57">dbi_bt_compare_fcn</a>) {
01087                         rc = db-&gt;set_bt_compare(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m57">dbi_bt_compare_fcn</a>);
01088                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_bt_compare"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01089                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01090                     }
01091                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m58">dbi_bt_dup_compare_fcn</a>) {
01092                         rc = db-&gt;set_dup_compare(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m58">dbi_bt_dup_compare_fcn</a>);
01093                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_dup_compare"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01094                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01095                     }
01096                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m59">dbi_bt_prefix_fcn</a>) {
01097                         rc = db-&gt;set_bt_prefix(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m59">dbi_bt_prefix_fcn</a>);
01098                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_bt_prefix"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01099                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01100                     }
01101 <span class="preprocessor">#endif</span>
01102 <span class="preprocessor"></span>                    <span class="keywordflow">break</span>;
01103                 <span class="keywordflow">case</span> DB_RECNO:
01104                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m61">dbi_re_delim</a>) {
01105                         rc = db-&gt;set_re_delim(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m61">dbi_re_delim</a>);
01106                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_re_selim"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01107                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01108                     }
01109                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m62">dbi_re_len</a>) {
01110                         rc = db-&gt;set_re_len(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m62">dbi_re_len</a>);
01111                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_re_len"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01112                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01113                     }
01114                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m63">dbi_re_pad</a>) {
01115                         rc = db-&gt;set_re_pad(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m63">dbi_re_pad</a>);
01116                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_re_pad"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01117                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01118                     }
01119                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m64">dbi_re_source</a>) {
01120                         rc = db-&gt;set_re_source(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m64">dbi_re_source</a>);
01121                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_re_source"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01122                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01123                     }
01124                     <span class="keywordflow">break</span>;
01125                 <span class="keywordflow">case</span> DB_QUEUE:
01126                     <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m65">dbi_q_extentsize</a>) {
01127                         rc = db-&gt;set_q_extentsize(db, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m65">dbi_q_extentsize</a>);
01128                         rc = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;set_q_extentsize"</span>, rc, <a class="code" href="db3_8c.html#a0">_debug</a>);
01129                         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
01130                     }
01131                     <span class="keywordflow">break</span>;
01132                 }
01133             }
01134 
01135             <span class="keywordflow">if</span> (rc == 0) {
01136                 <span class="keyword">const</span> <span class="keywordtype">char</span> * dbfullpath;
01137                 <span class="keyword">const</span> <span class="keywordtype">char</span> * dbpath;
01138                 <span class="keywordtype">char</span> * t;
01139                 <span class="keywordtype">int</span> nb;
01140 
01141                 nb = strlen(dbhome);
01142                 <span class="keywordflow">if</span> (dbfile)     nb += 1 + strlen(dbfile);
01143                 dbfullpath = t = <a class="code" href="system_8h.html#a36">alloca</a>(nb + 1);
01144 
01145                 t = <a class="code" href="system_8h.html#a32">stpcpy</a>(t, dbhome);
01146                 <span class="keywordflow">if</span> (dbfile)
01147                     t = <a class="code" href="system_8h.html#a32">stpcpy</a>( <a class="code" href="system_8h.html#a32">stpcpy</a>( t, <span class="stringliteral">"/"</span>), dbfile);
01148 <span class="preprocessor">#ifdef  HACK    </span><span class="comment">/* XXX necessary to support dbsubfile */</span>
01149                 dbpath = (!dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a> &amp;&amp; !dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>)
01150                         ? dbfullpath : dbfile;
01151 <span class="preprocessor">#else</span>
01152 <span class="preprocessor"></span>                dbpath = (!dbi-&gt;<a class="code" href="struct__dbiIndex.html#m25">dbi_temporary</a>)
01153                         ? dbfullpath : dbfile;
01154 <span class="preprocessor">#endif</span>
01155 <span class="preprocessor"></span>
01156                 rc = db-&gt;open(db, dbpath, dbsubfile,
01157                     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m11">dbi_type</a>, oflags, dbi-&gt;<a class="code" href="struct__dbiIndex.html#m13">dbi_perms</a>);
01158 
01159                 <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m11">dbi_type</a> == DB_UNKNOWN) {
01160 <span class="preprocessor">#if (DB_VERSION_MAJOR == 3 &amp;&amp; DB_VERSION_MINOR == 3 &amp;&amp; DB_VERSION_PATCH == 11) \</span>
01161 <span class="preprocessor"> || (DB_VERSION_MAJOR == 4)</span>
01162 <span class="preprocessor"></span>                    DBTYPE dbi_type = DB_UNKNOWN;
01163                     xx = db-&gt;get_type(db, &amp;dbi_type);
01164                     <span class="keywordflow">if</span> (xx == 0)
01165                         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m11">dbi_type</a> = dbi_type;
01166 <span class="preprocessor">#else</span>
01167 <span class="preprocessor"></span>                    dbi-&gt;<a class="code" href="struct__dbiIndex.html#m11">dbi_type</a> = db-&gt;get_type(db);
01168 <span class="preprocessor">#endif</span>
01169 <span class="preprocessor"></span>                }
01170             }
01171 
01172             <span class="comment">/* XXX return rc == errno without printing */</span>
01173             _printit = (rc &gt; 0 ? 0 : <a class="code" href="db3_8c.html#a0">_debug</a>);
01174             xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;open"</span>, rc, _printit);
01175 
01176             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a>
01177             &amp;&amp; (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_INIT_CDB) &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m21">dbi_get_rmw_cursor</a>)
01178             {
01179                 <a class="code" href="rpmdb_8h.html#a2">DBC</a> * dbcursor = NULL;
01180                 xx = db-&gt;cursor(db, txnid, &amp;dbcursor,
01181                         ((oflags &amp; DB_RDONLY) ? 0 : DB_WRITECURSOR));
01182                 xx = <a class="code" href="db3_8c.html#a2">cvtdberr</a>(dbi, <span class="stringliteral">"db-&gt;cursor"</span>, xx, <a class="code" href="db3_8c.html#a0">_debug</a>);
01183                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a> = dbcursor;
01184             } <span class="keywordflow">else</span>
01185                 dbi-&gt;<a class="code" href="struct__dbiIndex.html#m71">dbi_rmw</a> = NULL;
01186 
01187             <span class="comment">/*</span>
01188 <span class="comment">             * Lock a file using fcntl(2). Traditionally this is Packages,</span>
01189 <span class="comment">             * the file used * to store metadata of installed header(s),</span>
01190 <span class="comment">             * as Packages is always opened, and should be opened first,</span>
01191 <span class="comment">             * for any rpmdb access.</span>
01192 <span class="comment">             *</span>
01193 <span class="comment">             * If no DBENV is used, then access is protected with a</span>
01194 <span class="comment">             * shared/exclusive locking scheme, as always.</span>
01195 <span class="comment">             *</span>
01196 <span class="comment">             * With a DBENV, the fcntl(2) lock is necessary only to keep</span>
01197 <span class="comment">             * the riff-raff from playing where they don't belong, as</span>
01198 <span class="comment">             * the DBENV should provide it's own locking scheme. So try to</span>
01199 <span class="comment">             * acquire a lock, but permit failures, as some other</span>
01200 <span class="comment">             * DBENV player may already have acquired the lock.</span>
01201 <span class="comment">             */</span>
01202             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m24">dbi_lockdbfd</a>)
01203             {
01204                 <span class="keywordtype">int</span> fdno = -1;
01205 
01206                 <span class="keywordflow">if</span> (!(db-&gt;fd(db, &amp;fdno) == 0 &amp;&amp; fdno &gt;= 0)) {
01207                     rc = 1;
01208                 } <span class="keywordflow">else</span> {
01209                     <span class="keyword">struct </span>flock l;
01210                     memset(&amp;l, 0, <span class="keyword">sizeof</span>(l));
01211                     l.l_whence = 0;
01212                     l.l_start = 0;
01213                     l.l_len = 0;
01214                     l.l_type = (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; (O_RDWR|O_WRONLY))
01215                                 ? F_WRLCK : F_RDLCK;
01216                     l.l_pid = 0;
01217 
01218                     <span class="keywordflow">while</span> (1) {
01219                     rc = fcntl(fdno, F_SETLK, (<span class="keywordtype">void</span> *) &amp;l);
01220                     <span class="keywordflow">if</span> (rc) {
01221                         <span class="comment">/* Warning only if using CDB locking. */</span>
01222                         rc = ((dbi-&gt;<a class="code" href="struct__dbiIndex.html#m19">dbi_use_dbenv</a> &amp;&amp;
01223                                 (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m8">dbi_eflags</a> &amp; DB_INIT_CDB))
01224                             ? 0 : 1);
01225                         <span class="keywordflow">if</span> (dbi-&gt;<a class="code" href="struct__dbiIndex.html#m35">dbi_verbose</a>)
01226                         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>( (rc ? <a class="code" href="rpmerr_8h.html#a91a36">RPMERR_FLOCK</a> : <a class="code" href="rpmerr_8h.html#a91a90">RPMWARN_FLOCK</a>),
01227                                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"cannot get %s lock on %s/%s\n"</span>),
01228                                 ((dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; (O_RDWR|O_WRONLY))
01229                                         ? _(<span class="stringliteral">"exclusive"</span>) : <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"shared"</span>)),
01230                                 dbhome, (dbfile ? dbfile : <span class="stringliteral">""</span>));
01231                     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dbfile) {
01232                         <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a0">RPMMESS_DEBUG</a>,
01233                                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"locked   db index       %s/%s\n"</span>),
01234                                 dbhome, dbfile);
01235                         <span class="keywordflow">break</span>;
01236                     }
01237                     <span class="keywordflow">if</span> (!geteuid() || !(dbi-&gt;<a class="code" href="struct__dbiIndex.html#m12">dbi_mode</a> &amp; (O_RDWR|O_WRONLY)) ) {
01238                       sleep(5);
01239                     } <span class="keywordflow">else</span> {
01240                       <span class="keywordflow">break</span>;
01241                     }
01242                     }
01243                 }
01244             }
01245         }
01246     }
01247 
01248     dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a> = db;
01249 
01250     <span class="keywordflow">if</span> (rc == 0 &amp;&amp; dbi-&gt;<a class="code" href="struct__dbiIndex.html#m70">dbi_db</a> != NULL &amp;&amp; dbip != NULL) {
01251         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m73">dbi_vec</a> = &amp;db3vec;
01252         *dbip = dbi;
01253     } <span class="keywordflow">else</span> {
01254         dbi-&gt;<a class="code" href="struct__dbiIndex.html#m16">dbi_verify_on_close</a> = 0;
01255         (void) <a class="code" href="db3_8c.html#a21">db3close</a>(dbi, 0);
01256     }
01257 
01258     urlfn = <a class="code" href="poptint_8h.html#a14">_free</a>(urlfn);
01259 
01260     <span class="comment">/*@-nullstate -compmempass@*/</span>
01261     <span class="keywordflow">return</span> rc;
01262     <span class="comment">/*@=nullstate =compmempass@*/</span>
01263 }
01264 
01267 <span class="comment">/*@-exportheadervar@*/</span>
01268 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span>
<a name="l01269"></a><a class="code" href="group__db3.html#a0">01269</a> <span class="keyword">struct </span><a class="code" href="struct__dbiVec.html">_dbiVec</a> db3vec = {
01270     <a class="code" href="db1_8c.html#a1">DB_VERSION_MAJOR</a>, <a class="code" href="db1_8c.html#a2">DB_VERSION_MINOR</a>, <a class="code" href="db1_8c.html#a3">DB_VERSION_PATCH</a>,
01271     <a class="code" href="db3_8c.html#a22">db3open</a>, <a class="code" href="db3_8c.html#a21">db3close</a>, <a class="code" href="db3_8c.html#a6">db3sync</a>, <a class="code" href="db3_8c.html#a14">db3copen</a>, <a class="code" href="db3_8c.html#a13">db3cclose</a>, <a class="code" href="db3_8c.html#a16">db3cdel</a>, <a class="code" href="db3_8c.html#a17">db3cget</a>, <a class="code" href="db3_8c.html#a15">db3cput</a>,
01272     <a class="code" href="db3_8c.html#a18">db3ccount</a>, <a class="code" href="db3_8c.html#a19">db3byteswapped</a>, <a class="code" href="db3_8c.html#a20">db3stat</a>
01273 };
01274 <span class="comment">/*@=exportheadervar@*/</span>
01275 <span class="comment">/*@=type@*/</span>
</pre></div><hr><address style="align: right;"><small>Generated on Thu Sep 12 22:15:00 2002 for rpm by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.17 </small></address>
</body>
</html>