<!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> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> <a class="qindex" href="pages.html">Related Pages</a> </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 <<a class="code" href="rpmlib_8h.html">rpmlib.h</a>></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 & <a class="code" href="rpmlib_8h.html#a497a255">RPMSENSE_LESS</a>) 00025 fprintf(fp, <span class="stringliteral">"<"</span>); 00026 <span class="keywordflow">if</span> (flags & <a class="code" href="rpmlib_8h.html#a497a256">RPMSENSE_GREATER</a>) 00027 fprintf(fp, <span class="stringliteral">">"</span>); 00028 <span class="keywordflow">if</span> (flags & <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-><a class="code" href="structrpmDependencyConflict__s.html#m8">sense</a> != bp-><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-><a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a> && bp-><a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a> && strcmp(ap-><a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a>, bp-><a class="code" href="structrpmDependencyConflict__s.html#m0">byName</a>)) 00044 <span class="keywordflow">return</span> 1; 00045 <span class="keywordflow">if</span> (ap-><a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a> && bp-><a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a> && strcmp(ap-><a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a>, bp-><a class="code" href="structrpmDependencyConflict__s.html#m1">byVersion</a>)) 00046 <span class="keywordflow">return</span> 1; 00047 <span class="keywordflow">if</span> (ap-><a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a> && bp-><a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a> && strcmp(ap-><a class="code" href="structrpmDependencyConflict__s.html#m2">byRelease</a>, bp-><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-><a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a> && bp-><a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a> && strcmp(ap-><a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a>, bp-><a class="code" href="structrpmDependencyConflict__s.html#m4">needsName</a>)) 00051 <span class="keywordflow">return</span> 1; 00052 <span class="keywordflow">if</span> (ap-><a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a> && bp-><a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a> && strcmp(ap-><a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a>, bp-><a class="code" href="structrpmDependencyConflict__s.html#m5">needsVersion</a>)) 00053 <span class="keywordflow">return</span> 1; 00054 <span class="keywordflow">if</span> (ap-><a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a> && bp-><a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a> && ap-><a class="code" href="structrpmDependencyConflict__s.html#m6">needsFlags</a> != bp-><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 < 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 < 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 < 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-><a class="code" href="structrpmProblem__s.html#m0">pkgNEVR</a> ? prob-><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-><a class="code" href="structrpmProblem__s.html#m1">altNEVR</a> ? prob-><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-><a class="code" href="structrpmProblem__s.html#m6">str1</a> ? prob-><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-><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-><a class="code" href="structrpmProblem__s.html#m7">ulong1</a> > (1024*1024) 00168 ? (prob-><a class="code" href="structrpmProblem__s.html#m7">ulong1</a> + 1024 * 1024 - 1) / (1024 * 1024) 00169 : (prob-><a class="code" href="structrpmProblem__s.html#m7">ulong1</a> + 1023) / 1024, 00170 prob-><a class="code" href="structrpmProblem__s.html#m7">ulong1</a> > (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-><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-><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-><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 < probs-><a class="code" href="structrpmProblemSet__s.html#m0">numProblems</a>; i++) { 00220 <a class="code" href="structrpmProblem__s.html">rpmProblem</a> myprob = probs-><a class="code" href="structrpmProblemSet__s.html#m2">probs</a> + i; 00221 <span class="keywordflow">if</span> (!myprob-><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>