Sophie

Sophie

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

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>lib/problems.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>lib/problems.c</h1><a href="problems_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 
00005 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span>
00006 
00007 <span class="preprocessor">#include &lt;<a class="code" href="rpmlib_8h.html">rpmlib.h</a>&gt;</span>
00008 
00009 <span class="preprocessor">#include "<a class="code" href="depends_8h.html">depends.h</a>"</span>
00010 <span class="preprocessor">#include "<a class="code" href="misc_8h.html">misc.h</a>"</span>
00011 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span>
00012 
00013 <span class="comment">/*@access rpmProblemSet@*/</span>
00014 <span class="comment">/*@access rpmProblem@*/</span>
00015 <span class="comment">/*@access rpmDependencyConflict@*/</span>
00016 
00017 <span class="comment">/* XXX FIXME: merge into problems */</span>
00018 <span class="comment">/* XXX used in verify.c rpmlibprov.c */</span>
<a name="l00019"></a><a class="code" href="problems_8c.html#a0">00019</a> <span class="keywordtype">void</span> <a class="code" href="problems_8c.html#a0">printDepFlags</a>(FILE * fp, <span class="keyword">const</span> <span class="keywordtype">char</span> * version, <span class="keywordtype">int</span> flags)
00020 {
00021     <span class="keywordflow">if</span> (flags)
00022         fprintf(fp, <span class="stringliteral">" "</span>);
00023 
00024     <span class="keywordflow">if</span> (flags &amp; <a class="code" href="rpmlib_8h.html#a497a255">RPMSENSE_LESS</a>) 
00025         fprintf(fp, <span class="stringliteral">"&lt;"</span>);
00026     <span class="keywordflow">if</span> (flags &amp; <a class="code" href="rpmlib_8h.html#a497a256">RPMSENSE_GREATER</a>)
00027         fprintf(fp, <span class="stringliteral">"&gt;"</span>);
00028     <span class="keywordflow">if</span> (flags &amp; <a class="code" href="rpmlib_8h.html#a497a257">RPMSENSE_EQUAL</a>)
00029         fprintf(fp, <span class="stringliteral">"="</span>);
00030 
00031     <span class="keywordflow">if</span> (flags)
00032         fprintf(fp, <span class="stringliteral">" %s"</span>, version);
00033 }
00034 
<a name="l00035"></a><a class="code" href="problems_8c.html#a1">00035</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="problems_8c.html#a1">sameProblem</a>(<span class="keyword">const</span> <a class="code" href="structrpmDependencyConflict__s.html">rpmDependencyConflict</a> ap,
00036                 <span class="keyword">const</span> <a class="code" href="structrpmDependencyConflict__s.html">rpmDependencyConflict</a> bp)
00037         <span class="comment">/*@*/</span>
00038 {
00039 
00040     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m8">sense</a> != bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m8">sense</a>)
00041         <span class="keywordflow">return</span> 1;
00042 
00043     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a> &amp;&amp; bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a> &amp;&amp; strcmp(ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a>, bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a>))
00044         <span class="keywordflow">return</span> 1;
00045     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a> &amp;&amp; bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a> &amp;&amp; strcmp(ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a>, bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a>))
00046         <span class="keywordflow">return</span> 1;
00047     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a> &amp;&amp; bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a> &amp;&amp; strcmp(ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a>, bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a>))
00048         <span class="keywordflow">return</span> 1;
00049 
00050     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a> &amp;&amp; bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a> &amp;&amp; strcmp(ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a>, bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a>))
00051         <span class="keywordflow">return</span> 1;
00052     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a> &amp;&amp; bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a> &amp;&amp; strcmp(ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a>, bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a>))
00053         <span class="keywordflow">return</span> 1;
00054     <span class="keywordflow">if</span> (ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a> &amp;&amp; bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a> &amp;&amp; ap-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a> != bp-&gt;<a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a>)
00055         <span class="keywordflow">return</span> 1;
00056 
00057     <span class="keywordflow">return</span> 0;
00058 }
00059 
00060 <span class="comment">/* XXX FIXME: merge into problems */</span>
<a name="l00061"></a><a class="code" href="problems_8c.html#a2">00061</a> <span class="keywordtype">void</span> <a class="code" href="problems_8c.html#a2">printDepProblems</a>(FILE * fp,
00062                 <span class="keyword">const</span> <a class="code" href="structrpmDependencyConflict__s.html">rpmDependencyConflict</a> conflicts, <span class="keywordtype">int</span> numConflicts)
00063 {
00064     <span class="keywordtype">int</span> i;
00065 
00066     <span class="keywordflow">for</span> (i = 0; i &lt; numConflicts; i++) {
00067         <span class="keywordtype">int</span> j;
00068 
00069         <span class="comment">/* Filter already displayed problems. */</span>
00070         <span class="keywordflow">for</span> (j = 0; j &lt; i; j++) {
00071             <span class="keywordflow">if</span> (!<a class="code" href="problems_8c.html#a1">sameProblem</a>(conflicts + i, conflicts + j))
00072                 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
00073         }
00074         <span class="keywordflow">if</span> (j &lt; i)
00075             <span class="keywordflow">continue</span>;
00076 
00077         fprintf(fp, <span class="stringliteral">"\t%s"</span>, conflicts[i].needsName);
00078         <span class="keywordflow">if</span> (conflicts[i].<a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a>)
00079             <a class="code" href="problems_8c.html#a0">printDepFlags</a>(fp, conflicts[i].needsVersion, 
00080                           conflicts[i].needsFlags);
00081 
00082         <span class="keywordflow">if</span> (conflicts[i].<a class="code" href="structrpmDependencyConflict__s.html#m8">sense</a> == RPMDEP_SENSE_REQUIRES) 
00083             fprintf(fp, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">" is needed by %s-%s-%s\n"</span>), conflicts[i].byName, 
00084                     conflicts[i].byVersion, conflicts[i].byRelease);
00085         <span class="keywordflow">else</span>
00086             fprintf(fp, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">" conflicts with %s-%s-%s\n"</span>), conflicts[i].byName, 
00087                     conflicts[i].byVersion, conflicts[i].byRelease);
00088     }
00089 }
00090 
00091 <span class="preprocessor">#if !defined(HAVE_VSNPRINTF)</span>
00092 <span class="preprocessor"></span><span class="comment">/*@-shadow -bufferoverflowhigh @*/</span>
<a name="l00093"></a><a class="code" href="problems_8c.html#a3">00093</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="rpmlog_8c.html#a16">vsnprintf</a>(<span class="keywordtype">char</span> * buf, <span class="comment">/*@unused@*/</span> <span class="keywordtype">int</span> nb,
00094         <span class="keyword">const</span> <span class="keywordtype">char</span> * fmt, va_list ap)
00095 {
00096     <span class="keywordflow">return</span> vsprintf(buf, fmt, ap);
00097 }
00098 <span class="comment">/*@=shadow =bufferoverflowhigh @*/</span>
00099 <span class="preprocessor">#endif</span>
00100 <span class="preprocessor"></span><span class="preprocessor">#if !defined(HAVE_SNPRINTF)</span>
<a name="l00101"></a><a class="code" href="problems_8c.html#a4">00101</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="problems_8c.html#a4">snprintf</a>(<span class="keywordtype">char</span> * buf, <span class="keywordtype">int</span> nb, <span class="keyword">const</span> <span class="keywordtype">char</span> * fmt, ...)
00102 {
00103     va_list ap;
00104     <span class="keywordtype">int</span> rc;
00105     va_start(ap, fmt);
00106     <span class="comment">/*@-modunconnomods@*/</span>
00107     rc = <a class="code" href="rpmlog_8c.html#a16">vsnprintf</a>(buf, nb, fmt, ap);
00108     <span class="comment">/*@=modunconnomods@*/</span>
00109     va_end(ap);
00110     <span class="keywordflow">return</span> rc;
00111 }
00112 <span class="preprocessor">#endif</span>
00113 <span class="preprocessor"></span>
<a name="l00114"></a><a class="code" href="problems_8c.html#a5">00114</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="problems_8c.html#a5">rpmProblemString</a>(<span class="keyword">const</span> <a class="code" href="structrpmProblem__s.html">rpmProblem</a> prob)
00115 {
00116 <span class="comment">/*@observer@*/</span>
00117     <span class="keyword">const</span> <span class="keywordtype">char</span> * pkgNEVR = (prob-&gt;<a class="code" href="structrpmProblem__s.html#m0">pkgNEVR</a> ? prob-&gt;<a class="code" href="structrpmProblem__s.html#m0">pkgNEVR</a> : <span class="stringliteral">""</span>);
00118 <span class="comment">/*@observer@*/</span>
00119     <span class="keyword">const</span> <span class="keywordtype">char</span> * altNEVR = (prob-&gt;<a class="code" href="structrpmProblem__s.html#m1">altNEVR</a> ? prob-&gt;<a class="code" href="structrpmProblem__s.html#m1">altNEVR</a> : <span class="stringliteral">""</span>);
00120 <span class="comment">/*@observer@*/</span>
00121     <span class="keyword">const</span> <span class="keywordtype">char</span> * str1 = (prob-&gt;<a class="code" href="structrpmProblem__s.html#m6">str1</a> ? prob-&gt;<a class="code" href="structrpmProblem__s.html#m6">str1</a> : <span class="stringliteral">""</span>);
00122     <span class="keywordtype">int</span> nb =    strlen(pkgNEVR) + strlen(str1) + strlen(altNEVR) + 100;
00123     <span class="keywordtype">char</span> * buf = <a class="code" href="rpmmalloc_8c.html#a1">xmalloc</a>(nb+1);
00124     <span class="keywordtype">int</span> rc;
00125 
00126     *buf = <span class="charliteral">'\0'</span>;
00127     <span class="keywordflow">switch</span> (prob-&gt;<a class="code" href="structrpmProblem__s.html#m4">type</a>) {
00128     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a289">RPMPROB_BADARCH</a>:
00129         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00130                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s is for a different architecture"</span>),
00131                 pkgNEVR);
00132         <span class="keywordflow">break</span>;
00133     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a290">RPMPROB_BADOS</a>:
00134         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00135                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s is for a different operating system"</span>),
00136                 pkgNEVR);
00137         <span class="keywordflow">break</span>;
00138     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a291">RPMPROB_PKG_INSTALLED</a>:
00139         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00140                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s is already installed"</span>),
00141                 pkgNEVR);
00142         <span class="keywordflow">break</span>;
00143     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a292">RPMPROB_BADRELOCATE</a>:
00144         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00145                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"path %s in package %s is not relocateable"</span>),
00146                 str1, pkgNEVR);
00147         <span class="keywordflow">break</span>;
00148     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a295">RPMPROB_NEW_FILE_CONFLICT</a>:
00149         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00150                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"file %s conflicts between attempted installs of %s and %s"</span>),
00151                 str1, pkgNEVR, altNEVR);
00152         <span class="keywordflow">break</span>;
00153     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a296">RPMPROB_FILE_CONFLICT</a>:
00154         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00155             <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"file %s from install of %s conflicts with file from package %s"</span>),
00156                 str1, pkgNEVR, altNEVR);
00157         <span class="keywordflow">break</span>;
00158     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a297">RPMPROB_OLDPACKAGE</a>:
00159         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00160                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s (which is newer than %s) is already installed"</span>),
00161                 altNEVR, pkgNEVR);
00162         <span class="keywordflow">break</span>;
00163     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a298">RPMPROB_DISKSPACE</a>:
00164         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00165             <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"installing package %s needs %ld%cb on the %s filesystem"</span>),
00166                 pkgNEVR,
00167                 prob-&gt;<a class="code" href="structrpmProblem__s.html#m7">ulong1</a> &gt; (1024*1024)
00168                     ? (prob-&gt;<a class="code" href="structrpmProblem__s.html#m7">ulong1</a> + 1024 * 1024 - 1) / (1024 * 1024)
00169                     : (prob-&gt;<a class="code" href="structrpmProblem__s.html#m7">ulong1</a> + 1023) / 1024,
00170                 prob-&gt;<a class="code" href="structrpmProblem__s.html#m7">ulong1</a> &gt; (1024*1024) ? <span class="charliteral">'M'</span> : <span class="charliteral">'K'</span>,
00171                 str1);
00172         <span class="keywordflow">break</span>;
00173     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a299">RPMPROB_DISKNODES</a>:
00174         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00175             <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"installing package %s needs %ld inodes on the %s filesystem"</span>),
00176                 pkgNEVR, (<span class="keywordtype">long</span>)prob-&gt;<a class="code" href="structrpmProblem__s.html#m7">ulong1</a>, str1);
00177         <span class="keywordflow">break</span>;
00178     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a300">RPMPROB_BADPRETRANS</a>:
00179         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00180                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s pre-transaction syscall(s): %s failed: %s"</span>),
00181                 pkgNEVR, str1, <a class="code" href="popt_8c.html#a1">strerror</a>(prob-&gt;<a class="code" href="structrpmProblem__s.html#m7">ulong1</a>));
00182         <span class="keywordflow">break</span>;
00183      <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a293">RPMPROB_REQUIRES</a>:
00184         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s has unsatisfied Requires: %s\n"</span>),
00185                 pkgNEVR, altNEVR+2);
00186         <span class="keywordflow">break</span>;
00187      <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a500a294">RPMPROB_CONFLICT</a>:
00188         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"package %s has unsatisfied Conflicts: %s\n"</span>),
00189                 pkgNEVR, altNEVR+2);
00190         <span class="keywordflow">break</span>;
00191     <span class="keywordflow">default</span>:
00192         rc = <a class="code" href="problems_8c.html#a4">snprintf</a>(buf, nb,
00193                 <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"unknown error %d encountered while manipulating package %s"</span>),
00194                 prob-&gt;<a class="code" href="structrpmProblem__s.html#m4">type</a>, pkgNEVR);
00195         <span class="keywordflow">break</span>;
00196     }
00197 
00198     buf[nb] = <span class="charliteral">'\0'</span>;
00199     <span class="keywordflow">return</span> buf;
00200 }
00201 
<a name="l00202"></a><a class="code" href="problems_8c.html#a6">00202</a> <span class="keywordtype">void</span> <a class="code" href="problems_8c.html#a6">rpmProblemPrint</a>(FILE *fp, <a class="code" href="structrpmProblem__s.html">rpmProblem</a> prob)
00203 {
00204     <span class="keyword">const</span> <span class="keywordtype">char</span> * msg = <a class="code" href="problems_8c.html#a5">rpmProblemString</a>(prob);
00205     fprintf(fp, <span class="stringliteral">"%s\n"</span>, msg);
00206     msg = <a class="code" href="poptint_8h.html#a14">_free</a>(msg);
00207 }
00208 
<a name="l00209"></a><a class="code" href="problems_8c.html#a7">00209</a> <span class="keywordtype">void</span> <a class="code" href="problems_8c.html#a7">rpmProblemSetPrint</a>(FILE *fp, <a class="code" href="structrpmProblemSet__s.html">rpmProblemSet</a> probs)
00210 {
00211     <span class="keywordtype">int</span> i;
00212 
00213     <span class="keywordflow">if</span> (probs == NULL)
00214         <span class="keywordflow">return</span>;
00215 
00216     <span class="keywordflow">if</span> (fp == NULL)
00217         fp = stderr;
00218 
00219     <span class="keywordflow">for</span> (i = 0; i &lt; probs-&gt;<a class="code" href="structrpmProblemSet__s.html#m0">numProblems</a>; i++) {
00220         <a class="code" href="structrpmProblem__s.html">rpmProblem</a> myprob = probs-&gt;<a class="code" href="structrpmProblemSet__s.html#m2">probs</a> + i;
00221         <span class="keywordflow">if</span> (!myprob-&gt;<a class="code" href="structrpmProblem__s.html#m5">ignoreProblem</a>)
00222             <a class="code" href="problems_8c.html#a6">rpmProblemPrint</a>(fp, myprob);
00223     }
00224 }
</pre></div><hr><address style="align: right;"><small>Generated on Thu Sep 12 22:14:57 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>