<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>rpm: lib/psm.c Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.4.7 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul></div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul></div> <h1>lib/psm.c</h1><a href="psm_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <a name="l00006"></a>00006 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span> <a name="l00007"></a>00007 <a name="l00008"></a>00008 <span class="preprocessor">#include <<a class="code" href="rpmio__internal_8h.html">rpmio_internal.h</a>></span> <a name="l00009"></a>00009 <span class="preprocessor">#include <<a class="code" href="rpmlib_8h.html">rpmlib.h</a>></span> <a name="l00010"></a>00010 <span class="preprocessor">#include <<a class="code" href="rpmmacro_8h.html">rpmmacro.h</a>></span> <a name="l00011"></a>00011 <span class="preprocessor">#include <<a class="code" href="rpmurl_8h.html">rpmurl.h</a>></span> <a name="l00012"></a>00012 <span class="preprocessor">#include <rpmlua.h></span> <a name="l00013"></a>00013 <a name="l00014"></a>00014 <span class="preprocessor">#include "<a class="code" href="cpio_8h.html">cpio.h</a>"</span> <a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="fsm_8h.html">fsm.h</a>"</span> <span class="comment">/* XXX CPIO_FOO/FSM_FOO constants */</span> <a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="psm_8h.html">psm.h</a>"</span> <a name="l00017"></a>00017 <a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="rpmds_8h.html">rpmds.h</a>"</span> <a name="l00019"></a>00019 <a name="l00020"></a><a class="code" href="psm_8c.html#82b275be9a2fad806a974a3ff209339c">00020</a> <span class="preprocessor">#define _RPMFI_INTERNAL</span> <a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="rpmfi_8h.html">rpmfi.h</a>"</span> <a name="l00022"></a>00022 <a name="l00023"></a><a class="code" href="psm_8c.html#8b9ec4a59b7fb926b37e29f380b24412">00023</a> <span class="preprocessor">#define _RPMTE_INTERNAL</span> <a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="rpmte_8h.html">rpmte.h</a>"</span> <a name="l00025"></a>00025 <a name="l00026"></a><a class="code" href="psm_8c.html#30f880cec629d8da451b1ba5e0f194cb">00026</a> <span class="preprocessor">#define _RPMTS_INTERNAL </span><span class="comment">/* XXX ts->notify */</span> <a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="rpmts_8h.html">rpmts.h</a>"</span> <a name="l00028"></a>00028 <a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="rpmlead_8h.html">rpmlead.h</a>"</span> <span class="comment">/* writeLead proto */</span> <a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="signature_8h.html">signature.h</a>"</span> <span class="comment">/* signature constants */</span> <a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="legacy_8h.html">legacy.h</a>"</span> <span class="comment">/* XXX rpmfiBuildFNames() */</span> <a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="misc_8h.html">misc.h</a>"</span> <span class="comment">/* XXX stripTrailingChar() */</span> <a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="rpmdb_8h.html">rpmdb.h</a>"</span> <span class="comment">/* XXX for db_chrootDone */</span> <a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span> <a name="l00035"></a>00035 <a name="l00036"></a><a class="code" href="psm_8c.html#dc1aa6cca49eda124090d56bdfc855fb">00036</a> <span class="preprocessor">#define _PSM_DEBUG 0</span> <a name="l00037"></a>00037 <span class="preprocessor"></span><span class="comment">/*@unchecked@*/</span> <a name="l00038"></a><a class="code" href="psm_8h.html#c1738d4bbd625c7bdd68a5721abce244">00038</a> <span class="keywordtype">int</span> <a class="code" href="poptALL_8c.html#c1738d4bbd625c7bdd68a5721abce244">_psm_debug</a> = <a class="code" href="psm_8c.html#dc1aa6cca49eda124090d56bdfc855fb">_PSM_DEBUG</a>; <a name="l00039"></a>00039 <span class="comment">/*@unchecked@*/</span> <a name="l00040"></a><a class="code" href="psm_8c.html#f1cd49d46dc236eb1faa6446bd86cf31">00040</a> <span class="keywordtype">int</span> <a class="code" href="poptALL_8c.html#f1cd49d46dc236eb1faa6446bd86cf31">_psm_threads</a> = 0; <a name="l00041"></a>00041 <a name="l00042"></a>00042 <span class="comment">/* Give access to the rpmte global tracking the last instance added</span> <a name="l00043"></a>00043 <span class="comment"> * to the database.</span> <a name="l00044"></a>00044 <span class="comment"> */</span> <a name="l00045"></a>00045 <span class="comment">/*@-exportheadervar@*/</span> <a name="l00046"></a>00046 <span class="comment">/*@unchecked@*/</span> <a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="psm_8c.html#eee80dc922ecd4ac747fb5144e7ab638">myinstall_instance</a>; <a name="l00048"></a>00048 <span class="comment">/*@=exportheadervar@*/</span> <a name="l00049"></a>00049 <a name="l00050"></a>00050 <span class="comment">/*@access FD_t @*/</span> <span class="comment">/* XXX void ptr args */</span> <a name="l00051"></a>00051 <span class="comment">/*@access rpmpsm @*/</span> <a name="l00052"></a>00052 <a name="l00053"></a>00053 <span class="comment">/*@access rpmfi @*/</span> <a name="l00054"></a>00054 <span class="comment">/*@access rpmte @*/</span> <span class="comment">/* XXX rpmInstallSourcePackage */</span> <a name="l00055"></a>00055 <span class="comment">/*@access rpmts @*/</span> <span class="comment">/* XXX ts->notify */</span> <a name="l00056"></a>00056 <a name="l00057"></a>00057 <span class="comment">/*@access rpmluav @*/</span> <a name="l00058"></a>00058 <span class="comment">/*@access rpmtsScore @*/</span> <a name="l00059"></a>00059 <span class="comment">/*@access rpmtsScoreEntry @*/</span> <a name="l00060"></a>00060 <a name="l00061"></a><a class="code" href="rpmlib_8h.html#850ba9d15266e2d82cd092b8d6117f50">00061</a> <span class="keywordtype">int</span> <a class="code" href="psm_8c.html#850ba9d15266e2d82cd092b8d6117f50">rpmVersionCompare</a>(<a class="code" href="structheaderToken__s.html">Header</a> first, <a class="code" href="structheaderToken__s.html">Header</a> second) <a name="l00062"></a>00062 { <a name="l00063"></a>00063 <span class="keyword">const</span> <span class="keywordtype">char</span> * one, * two; <a name="l00064"></a>00064 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> * epochOne, * epochTwo; <a name="l00065"></a>00065 <span class="keyword">static</span> <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> zero = 0; <a name="l00066"></a>00066 <span class="keywordtype">int</span> rc; <a name="l00067"></a>00067 <a name="l00068"></a>00068 <span class="keywordflow">if</span> (!<a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(first, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b77097f97d901ca74c7d0c7c4fe0cbaf0">RPMTAG_EPOCH</a>, NULL, (<span class="keywordtype">void</span> **) &epochOne, NULL)) <a name="l00069"></a>00069 epochOne = &zero; <a name="l00070"></a>00070 <span class="keywordflow">if</span> (!<a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(second, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b77097f97d901ca74c7d0c7c4fe0cbaf0">RPMTAG_EPOCH</a>, NULL, (<span class="keywordtype">void</span> **) &epochTwo, NULL)) <a name="l00071"></a>00071 epochTwo = &zero; <a name="l00072"></a>00072 <a name="l00073"></a>00073 <span class="comment">/*@-boundsread@*/</span> <a name="l00074"></a>00074 <span class="keywordflow">if</span> (*epochOne < *epochTwo) <a name="l00075"></a>00075 <span class="keywordflow">return</span> -1; <a name="l00076"></a>00076 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*epochOne > *epochTwo) <a name="l00077"></a>00077 <span class="keywordflow">return</span> 1; <a name="l00078"></a>00078 <span class="comment">/*@=boundsread@*/</span> <a name="l00079"></a>00079 <a name="l00080"></a>00080 rc = <a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(first, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b8aad6ff91681431f181573816de989d6">RPMTAG_VERSION</a>, NULL, (<span class="keywordtype">void</span> **) &one, NULL); <a name="l00081"></a>00081 rc = <a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(second, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b8aad6ff91681431f181573816de989d6">RPMTAG_VERSION</a>, NULL, (<span class="keywordtype">void</span> **) &two, NULL); <a name="l00082"></a>00082 <a name="l00083"></a>00083 rc = <a class="code" href="rpmlib_8h.html#83273f9ece6bf5608622e495dc15ee1b">rpmvercmp</a>(one, two); <a name="l00084"></a>00084 <span class="keywordflow">if</span> (rc) <a name="l00085"></a>00085 <span class="keywordflow">return</span> rc; <a name="l00086"></a>00086 <a name="l00087"></a>00087 rc = <a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(first, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bf73871610422923250e7d11409770662">RPMTAG_RELEASE</a>, NULL, (<span class="keywordtype">void</span> **) &one, NULL); <a name="l00088"></a>00088 rc = <a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(second, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bf73871610422923250e7d11409770662">RPMTAG_RELEASE</a>, NULL, (<span class="keywordtype">void</span> **) &two, NULL); <a name="l00089"></a>00089 <a name="l00090"></a>00090 <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#83273f9ece6bf5608622e495dc15ee1b">rpmvercmp</a>(one, two); <a name="l00091"></a>00091 } <a name="l00092"></a>00092 <a name="l00097"></a>00097 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00098"></a><a class="code" href="structtagMacro.html">00098</a> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structtagMacro.html">tagMacro</a> { <a name="l00099"></a><a class="code" href="structtagMacro.html#3eab10c4f4108b2876421332d947558e">00099</a> <span class="comment">/*@observer@*/</span> <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="structtagMacro.html#3eab10c4f4108b2876421332d947558e">macroname</a>; <a name="l00100"></a><a class="code" href="structtagMacro.html#30cb671c7625a0cdf531108eb0b7e844">00100</a> <a class="code" href="rpmlib_8h.html#d0da081a8aa5491edae4ad732d03c2f3">rpmTag</a> <a class="code" href="structtagMacro.html#30cb671c7625a0cdf531108eb0b7e844">tag</a>; <a name="l00101"></a>00101 } <a class="code" href="psm_8c.html#0459bbb3a48de6cb8e1e006b0e968139">tagMacros</a>[] = { <a name="l00102"></a>00102 { <span class="stringliteral">"name"</span>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b5a4bfcac106d028f0908b8991e2c5b87">RPMTAG_NAME</a> }, <a name="l00103"></a>00103 { <span class="stringliteral">"version"</span>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b8aad6ff91681431f181573816de989d6">RPMTAG_VERSION</a> }, <a name="l00104"></a>00104 { <span class="stringliteral">"release"</span>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bf73871610422923250e7d11409770662">RPMTAG_RELEASE</a> }, <a name="l00105"></a>00105 { <span class="stringliteral">"epoch"</span>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b77097f97d901ca74c7d0c7c4fe0cbaf0">RPMTAG_EPOCH</a> }, <a name="l00106"></a>00106 { NULL, 0 } <a name="l00107"></a>00107 }; <a name="l00108"></a>00108 <a name="l00115"></a><a class="code" href="psm_8c.html#46c66506d732254def54cede18dabe6b">00115</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="psm_8c.html#46c66506d732254def54cede18dabe6b">rpmInstallLoadMacros</a>(<a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi, <a class="code" href="structheaderToken__s.html">Header</a> h) <a name="l00116"></a>00116 <span class="comment">/*@globals rpmGlobalMacroContext @*/</span> <a name="l00117"></a>00117 <span class="comment">/*@modifies rpmGlobalMacroContext @*/</span> <a name="l00118"></a>00118 { <a name="l00119"></a>00119 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = (<a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a>) fi->hge; <a name="l00120"></a>00120 <span class="keyword">struct</span> <a class="code" href="structtagMacro.html">tagMacro</a> * tagm; <a name="l00121"></a>00121 <span class="keyword">union</span> { <a name="l00122"></a>00122 <span class="comment">/*@unused@*/</span> <span class="keywordtype">void</span> * ptr; <a name="l00123"></a>00123 <span class="comment">/*@unused@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> ** <a class="code" href="compress_8c.html#b233d58a2d9af13ae09ea8fd82556856">argv</a>; <a name="l00124"></a>00124 <span class="keyword">const</span> <span class="keywordtype">char</span> * str; <a name="l00125"></a>00125 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> * i32p; <a name="l00126"></a>00126 } <a class="code" href="lparser_8c.html#d3d32c5366d3b1577b7eefe5e843dd5d">body</a>; <a name="l00127"></a>00127 <span class="keywordtype">char</span> numbuf[32]; <a name="l00128"></a>00128 <a class="code" href="group__header.html#ge3bf8d35e51bc1fbaa1a2a5acdceb79e">rpmTagType</a> type; <a name="l00129"></a>00129 <a name="l00130"></a>00130 <span class="keywordflow">for</span> (tagm = <a class="code" href="psm_8c.html#0459bbb3a48de6cb8e1e006b0e968139">tagMacros</a>; tagm-><a class="code" href="structtagMacro.html#3eab10c4f4108b2876421332d947558e">macroname</a> != NULL; tagm++) { <a name="l00131"></a>00131 <span class="keywordflow">if</span> (!hge(h, tagm->tag, &type, (<span class="keywordtype">void</span> **) &<a class="code" href="lparser_8c.html#d3d32c5366d3b1577b7eefe5e843dd5d">body</a>, NULL)) <a name="l00132"></a>00132 <span class="keywordflow">continue</span>; <a name="l00133"></a>00133 switch (type) { <a name="l00134"></a>00134 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed033cf2f10106384143d802ede9274dcc">RPM_INT32_TYPE</a>: <a name="l00135"></a>00135 <span class="comment">/*@-boundsread@*/</span> <a name="l00136"></a>00136 sprintf(numbuf, <span class="stringliteral">"%d"</span>, *body.i32p); <a name="l00137"></a>00137 <span class="comment">/*@=boundsread@*/</span> <a name="l00138"></a>00138 <a class="code" href="macro_8c.html#f38cc0557a9d3def58f6d31db62c4859">addMacro</a>(NULL, tagm->macroname, NULL, numbuf, -1); <a name="l00139"></a>00139 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; <a name="l00140"></a>00140 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed34cdc667815b86f8741fbf06ce4725eb">RPM_STRING_TYPE</a>: <a name="l00141"></a>00141 <a class="code" href="macro_8c.html#f38cc0557a9d3def58f6d31db62c4859">addMacro</a>(NULL, tagm->macroname, NULL, body.str, -1); <a name="l00142"></a>00142 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; <a name="l00143"></a>00143 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fedab678f136ed90646ef740a68d94dbcd9">RPM_NULL_TYPE</a>: <a name="l00144"></a>00144 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fedef0515c385f44f8679ddce3dfd12900e">RPM_CHAR_TYPE</a>: <a name="l00145"></a>00145 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed0701f2c2ebe1f04b84487dc749ed350f">RPM_INT8_TYPE</a>: <a name="l00146"></a>00146 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed725a353577bf2dce87138837ebf3ad66">RPM_INT16_TYPE</a>: <a name="l00147"></a>00147 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed96437c1222f63450e6ab8d693447d1bd">RPM_BIN_TYPE</a>: <a name="l00148"></a>00148 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed6ae076d0ee687ce337e98f86a1aee307">RPM_STRING_ARRAY_TYPE</a>: <a name="l00149"></a>00149 <span class="keywordflow">case</span> <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed7a7bbe524996280711a7970977ada120">RPM_I18NSTRING_TYPE</a>: <a name="l00150"></a>00150 <span class="keywordflow">default</span>: <a name="l00151"></a>00151 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; <a name="l00152"></a>00152 } <a name="l00153"></a>00153 } <a name="l00154"></a>00154 <span class="keywordflow">return</span> 0; <a name="l00155"></a>00155 } <a name="l00156"></a>00156 <a name="l00162"></a>00162 <span class="comment">/*@-bounds@*/</span> <a name="l00163"></a><a class="code" href="psm_8c.html#a9aad7982964c0d14f59be018f1809e9">00163</a> <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#a9aad7982964c0d14f59be018f1809e9">markReplacedFiles</a>(<span class="keyword">const</span> <a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm) <a name="l00164"></a>00164 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/</span> <a name="l00165"></a>00165 <span class="comment">/*@modifies psm, rpmGlobalMacroContext, fileSystem, internalState @*/</span> <a name="l00166"></a>00166 { <a name="l00167"></a>00167 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l00168"></a>00168 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l00169"></a>00169 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = (<a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a>)fi->hge; <a name="l00170"></a>00170 sharedFileInfo replaced = fi->replaced; <a name="l00171"></a>00171 sharedFileInfo sfi; <a name="l00172"></a>00172 <a class="code" href="struct__rpmdbMatchIterator.html">rpmdbMatchIterator</a> mi; <a name="l00173"></a>00173 <a class="code" href="structheaderToken__s.html">Header</a> h; <a name="l00174"></a>00174 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * offsets; <a name="l00175"></a>00175 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> prev; <a name="l00176"></a>00176 <span class="keywordtype">int</span> num, xx; <a name="l00177"></a>00177 <a name="l00178"></a>00178 if (!(<a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi) > 0 && fi->replaced)) <a name="l00179"></a>00179 <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l00180"></a>00180 <a name="l00181"></a>00181 num = prev = 0; <a name="l00182"></a>00182 <span class="keywordflow">for</span> (sfi = replaced; sfi->otherPkg; sfi++) { <a name="l00183"></a>00183 <span class="keywordflow">if</span> (prev && prev == sfi->otherPkg) <a name="l00184"></a>00184 <span class="keywordflow">continue</span>; <a name="l00185"></a>00185 prev = sfi->otherPkg; <a name="l00186"></a>00186 num++; <a name="l00187"></a>00187 } <a name="l00188"></a>00188 <span class="keywordflow">if</span> (num == 0) <a name="l00189"></a>00189 <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l00190"></a>00190 <a name="l00191"></a>00191 offsets = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(num * <span class="keyword">sizeof</span>(*offsets)); <a name="l00192"></a>00192 offsets[0] = 0; <a name="l00193"></a>00193 num = prev = 0; <a name="l00194"></a>00194 <span class="keywordflow">for</span> (sfi = replaced; sfi->otherPkg; sfi++) { <a name="l00195"></a>00195 <span class="keywordflow">if</span> (prev && prev == sfi->otherPkg) <a name="l00196"></a>00196 <span class="keywordflow">continue</span>; <a name="l00197"></a>00197 prev = sfi->otherPkg; <a name="l00198"></a>00198 offsets[num++] = sfi->otherPkg; <a name="l00199"></a>00199 } <a name="l00200"></a>00200 <a name="l00201"></a>00201 mi = <a class="code" href="group__rpmts.html#g16ebec8beff205af120f86b2b6c7e25d">rpmtsInitIterator</a>(ts, <a class="code" href="rpmlib_8h.html#39fcc4d1b52ef92e63e74b0f13ded353">RPMDBI_PACKAGES</a>, NULL, 0); <a name="l00202"></a>00202 xx = <a class="code" href="group__rpmdb.html#g41cfde52641abf73ba0f8684fe287ff1">rpmdbAppendIterator</a>(mi, offsets, num); <a name="l00203"></a>00203 xx = <a class="code" href="group__rpmdb.html#gcb4ad7f6238ce9caaa37b7c7dc6cec69">rpmdbSetIteratorRewrite</a>(mi, 1); <a name="l00204"></a>00204 <a name="l00205"></a>00205 sfi = replaced; <a name="l00206"></a>00206 <span class="keywordflow">while</span> ((h = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(mi)) != NULL) { <a name="l00207"></a>00207 <span class="keywordtype">char</span> * secStates; <a name="l00208"></a>00208 <span class="keywordtype">int</span> modified; <a name="l00209"></a>00209 <span class="keywordtype">int</span> count; <a name="l00210"></a>00210 <a name="l00211"></a>00211 modified = 0; <a name="l00212"></a>00212 <a name="l00213"></a>00213 <span class="keywordflow">if</span> (!hge(h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b68cb1055c204dc409ac7b32090f5eba6">RPMTAG_FILESTATES</a>, NULL, (<span class="keywordtype">void</span> **)&secStates, &count)) <a name="l00214"></a>00214 <span class="keywordflow">continue</span>; <a name="l00215"></a>00215 <a name="l00216"></a>00216 prev = <a class="code" href="group__rpmdb.html#g4fefb65ede996aa0edcc80286ca640d1">rpmdbGetIteratorOffset</a>(mi); <a name="l00217"></a>00217 num = 0; <a name="l00218"></a>00218 <span class="keywordflow">while</span> (sfi->otherPkg && sfi->otherPkg == prev) { <a name="l00219"></a>00219 assert(sfi->otherFileNum < count); <a name="l00220"></a>00220 <span class="keywordflow">if</span> (secStates[sfi->otherFileNum] != <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9fa28e91fc9058fd09126436afcedd8596f">RPMFILE_STATE_REPLACED</a>) { <a name="l00221"></a>00221 secStates[sfi->otherFileNum] = <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9fa28e91fc9058fd09126436afcedd8596f">RPMFILE_STATE_REPLACED</a>; <a name="l00222"></a>00222 <span class="keywordflow">if</span> (modified == 0) { <a name="l00223"></a>00223 <span class="comment">/* Modified header will be rewritten. */</span> <a name="l00224"></a>00224 modified = 1; <a name="l00225"></a>00225 xx = <a class="code" href="group__rpmdb.html#ga21b317118dfc602bbe4636222842e39">rpmdbSetIteratorModified</a>(mi, modified); <a name="l00226"></a>00226 } <a name="l00227"></a>00227 num++; <a name="l00228"></a>00228 } <a name="l00229"></a>00229 sfi++; <a name="l00230"></a>00230 } <a name="l00231"></a>00231 } <a name="l00232"></a>00232 mi = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(mi); <a name="l00233"></a>00233 <a name="l00234"></a>00234 <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l00235"></a>00235 } <a name="l00236"></a>00236 <span class="comment">/*@=bounds@*/</span> <a name="l00237"></a>00237 <a name="l00238"></a><a class="code" href="rpmlib_8h.html#137c7a5b17e7836dd7e271ca8be15b74">00238</a> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#137c7a5b17e7836dd7e271ca8be15b74">rpmInstallSourcePackage</a>(<a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts, <a class="code" href="struct__FD__s.html">FD_t</a> fd, <a name="l00239"></a>00239 <span class="keyword">const</span> <span class="keywordtype">char</span> ** specFilePtr, <span class="keyword">const</span> <span class="keywordtype">char</span> ** cookie) <a name="l00240"></a>00240 { <a name="l00241"></a>00241 <span class="keywordtype">int</span> scareMem = 1; <a name="l00242"></a>00242 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = NULL; <a name="l00243"></a>00243 <span class="keyword">const</span> <span class="keywordtype">char</span> * _sourcedir = NULL; <a name="l00244"></a>00244 <span class="keyword">const</span> <span class="keywordtype">char</span> * _specdir = NULL; <a name="l00245"></a>00245 <span class="keyword">const</span> <span class="keywordtype">char</span> * specFile = NULL; <a name="l00246"></a>00246 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge; <a name="l00247"></a>00247 <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd; <a name="l00248"></a>00248 <a class="code" href="structheaderToken__s.html">Header</a> h = NULL; <a name="l00249"></a>00249 <span class="keyword">struct </span><a class="code" href="structrpmpsm__s.html">rpmpsm_s</a> psmbuf; <a name="l00250"></a>00250 <a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm = &psmbuf; <a name="l00251"></a>00251 <span class="keywordtype">int</span> isSource; <a name="l00252"></a>00252 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rpmrc; <a name="l00253"></a>00253 <span class="keywordtype">int</span> i; <a name="l00254"></a>00254 <a name="l00255"></a>00255 memset(psm, 0, <span class="keyword">sizeof</span>(*psm)); <a name="l00256"></a>00256 psm->ts = <a class="code" href="rpmts_8h.html#ff6f4de19581560802e96cdfc0d3d5fd">rpmtsLink</a>(ts, <span class="stringliteral">"InstallSourcePackage"</span>); <a name="l00257"></a>00257 <a name="l00258"></a>00258 rpmrc = <a class="code" href="package_8c.html#e10b6de3f6b14ba9bf473e782c6ed65c">rpmReadPackageFile</a>(ts, <a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, <span class="stringliteral">"InstallSourcePackage"</span>, &h); <a name="l00259"></a>00259 <span class="keywordflow">switch</span> (rpmrc) { <a name="l00260"></a>00260 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e80157ae69ad74eaa789264ec507d0f9e2c6">RPMRC_NOTTRUSTED</a>: <a name="l00261"></a>00261 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801bb7bafd0fb0f5b69af85b79008fcd5da">RPMRC_NOKEY</a>: <a name="l00262"></a>00262 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>: <a name="l00263"></a>00263 <span class="keywordflow">break</span>; <a name="l00264"></a>00264 <span class="keywordflow">default</span>: <a name="l00265"></a>00265 <span class="keywordflow">goto</span> exit; <a name="l00266"></a>00266 <span class="comment">/*@notreached@*/</span> <span class="keywordflow">break</span>; <a name="l00267"></a>00267 } <a name="l00268"></a>00268 <span class="keywordflow">if</span> (h == NULL) <a name="l00269"></a>00269 <span class="keywordflow">goto</span> exit; <a name="l00270"></a>00270 <a name="l00271"></a>00271 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l00272"></a>00272 <a name="l00273"></a>00273 isSource = <a class="code" href="group__header.html#g0f25e23afbd3fb4799d579080fbb0942">headerIsEntry</a>(h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bc1e19b757399d5ac0b3ac8ffcbeb76aa">RPMTAG_SOURCEPACKAGE</a>); <a name="l00274"></a>00274 <a name="l00275"></a>00275 <span class="keywordflow">if</span> (!isSource) { <a name="l00276"></a>00276 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b6cc8250231ec2bdfe25d11ad672a728d">RPMERR_NOTSRPM</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"source package expected, binary found\n"</span>)); <a name="l00277"></a>00277 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00278"></a>00278 <span class="keywordflow">goto</span> exit; <a name="l00279"></a>00279 } <a name="l00280"></a>00280 <a name="l00281"></a>00281 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g14f855b79d0aff83c084e254e2442006">rpmtsAddInstallElement</a>(ts, h, NULL, 0, NULL)) { <a name="l00282"></a>00282 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00283"></a>00283 <span class="keywordflow">goto</span> exit; <a name="l00284"></a>00284 } <a name="l00285"></a>00285 <a name="l00286"></a>00286 fi = <a class="code" href="rpmfi_8c.html#7f49d98c8d9a3203607cdf6c3f24ba4a">rpmfiNew</a>(ts, h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bea94338039b3e67d9ece3f8c8875c7fc">RPMTAG_BASENAMES</a>, scareMem); <a name="l00287"></a>00287 h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(h); <a name="l00288"></a>00288 <a name="l00289"></a>00289 <span class="keywordflow">if</span> (fi == NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l00290"></a>00290 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00291"></a>00291 <span class="keywordflow">goto</span> exit; <a name="l00292"></a>00292 } <a name="l00293"></a>00293 <a name="l00294"></a>00294 <span class="comment">/*@-onlytrans@*/</span> <span class="comment">/* FIX: te reference */</span> <a name="l00295"></a>00295 fi->te = <a class="code" href="rpmts_8c.html#2b820716263e8abe8c4138e1e30da2c1">rpmtsElement</a>(ts, 0); <a name="l00296"></a>00296 <span class="comment">/*@=onlytrans@*/</span> <a name="l00297"></a>00297 <span class="keywordflow">if</span> (fi->te == NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l00298"></a>00298 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00299"></a>00299 <span class="keywordflow">goto</span> exit; <a name="l00300"></a>00300 } <a name="l00301"></a>00301 <a name="l00302"></a>00302 <span class="comment">/*@-nullpass@*/</span> <span class="comment">/* FIX fi->h may be null */</span> <a name="l00303"></a>00303 fi->te->h = <a class="code" href="group__header.html#g4f07e8040ed3195e374a44919ffe97c2">headerLink</a>(fi->h); <a name="l00304"></a>00304 <span class="comment">/*@=nullpass@*/</span> <a name="l00305"></a>00305 fi->te->fd = <a class="code" href="rpmio_8h.html#3b340d609e3e1e97820090866983ab03">fdLink</a>(<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, <span class="stringliteral">"installSourcePackage"</span>); <a name="l00306"></a>00306 hge = fi->hge; <a name="l00307"></a>00307 hfd = fi->hfd; <a name="l00308"></a>00308 <a name="l00309"></a>00309 <span class="comment">/*@i@*/</span> (void) <a class="code" href="psm_8c.html#46c66506d732254def54cede18dabe6b">rpmInstallLoadMacros</a>(fi, fi->h); <a name="l00310"></a>00310 <a name="l00311"></a>00311 psm->fi = <a class="code" href="rpmfi_8h.html#efe18edd3c3508fb257dfcf4db2776e5">rpmfiLink</a>(fi, NULL); <a name="l00312"></a>00312 <span class="comment">/*@-assignexpose -usereleased @*/</span> <a name="l00313"></a>00313 psm->te = fi->te; <a name="l00314"></a>00314 <span class="comment">/*@=assignexpose =usereleased @*/</span> <a name="l00315"></a>00315 <a name="l00316"></a>00316 <span class="keywordflow">if</span> (cookie) { <a name="l00317"></a>00317 *cookie = NULL; <a name="l00318"></a>00318 <span class="keywordflow">if</span> (hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507ba1dbb68c610b969dbb5598bdf44a12c7">RPMTAG_COOKIE</a>, NULL, (<span class="keywordtype">void</span> **) cookie, NULL)) <a name="l00319"></a>00319 *cookie = <a class="code" href="system_8h.html#d6142d091f00b2d4543ce7a43e5d0eba">xstrdup</a>(*cookie); <a name="l00320"></a>00320 } <a name="l00321"></a>00321 <a name="l00322"></a>00322 <span class="comment">/* XXX FIXME: can't do endian neutral MD5 verification yet. */</span> <a name="l00323"></a>00323 <span class="comment">/*@i@*/</span> fi->fmd5s = hfd(fi->fmd5s, -1); <a name="l00324"></a>00324 <a name="l00325"></a>00325 <span class="comment">/* XXX FIXME: don't do per-file mapping, force global flags. */</span> <a name="l00326"></a>00326 fi->fmapflags = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fi->fmapflags); <a name="l00327"></a>00327 fi->mapflags = <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd18471069c02aa3087b79a4d8b08e785d">CPIO_MAP_PATH</a> | <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddef02065506b7158e59001c2404d06628">CPIO_MAP_MODE</a> | <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddc943ea0fc6cf3a1ba2f0f01d57f22970">CPIO_MAP_UID</a> | <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd5e58caae4ba0cdfbef976abd18035efd">CPIO_MAP_GID</a>; <a name="l00328"></a>00328 <a name="l00329"></a>00329 fi->uid = getuid(); <a name="l00330"></a>00330 fi->gid = getgid(); <a name="l00331"></a>00331 fi->astriplen = 0; <a name="l00332"></a>00332 fi->striplen = 0; <a name="l00333"></a>00333 <a name="l00334"></a>00334 <span class="keywordflow">for</span> (i = 0; i < fi->fc; i++) <a name="l00335"></a>00335 fi->actions[i] = <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc053f832bbad26488d6441a3d0589da2784">FA_CREATE</a>; <a name="l00336"></a>00336 <a name="l00337"></a>00337 i = fi->fc; <a name="l00338"></a>00338 <a name="l00339"></a>00339 if (fi->h != NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l00340"></a>00340 <a class="code" href="legacy_8c.html#b251121a92ea7400af24baf1dbfdb79a">rpmfiBuildFNames</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bea94338039b3e67d9ece3f8c8875c7fc">RPMTAG_BASENAMES</a>, &fi->apath, NULL); <a name="l00341"></a>00341 <a name="l00342"></a>00342 if (<a class="code" href="group__header.html#g0f25e23afbd3fb4799d579080fbb0942">headerIsEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507ba1dbb68c610b969dbb5598bdf44a12c7">RPMTAG_COOKIE</a>)) <a name="l00343"></a>00343 for (i = 0; i < fi->fc; i++) <a name="l00344"></a>00344 <span class="keywordflow">if</span> (fi->fflags[i] & <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f6fe0c37dac8a16f2756ec2775cafc6e1">RPMFILE_SPECFILE</a>) <span class="keywordflow">break</span>; <a name="l00345"></a>00345 } <a name="l00346"></a>00346 <a name="l00347"></a>00347 <span class="keywordflow">if</span> (i == <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->fc) { <a name="l00348"></a>00348 <span class="comment">/* Find the spec file by name. */</span> <a name="l00349"></a>00349 for (i = 0; i < <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->fc; i++) { <a name="l00350"></a>00350 <span class="keyword">const</span> <span class="keywordtype">char</span> * t = <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->apath[i]; <a name="l00351"></a>00351 t += strlen(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->apath[i]) - 5; <a name="l00352"></a>00352 if (!strcmp(t, <span class="stringliteral">".spec"</span>)) <span class="keywordflow">break</span>; <a name="l00353"></a>00353 } <a name="l00354"></a>00354 } <a name="l00355"></a>00355 <a name="l00356"></a>00356 _sourcedir = <a class="code" href="macro_8c.html#a00f38e60e61a7984bf1b08b7c440343">rpmGenPath</a>(<a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(<a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>), <span class="stringliteral">"%{_sourcedir}"</span>, <span class="stringliteral">""</span>); <a name="l00357"></a>00357 rpmrc = <a class="code" href="lib_2misc_8c.html#17b2947a71022080b4db276792d90317">rpmMkdirPath</a>(_sourcedir, <span class="stringliteral">"sourcedir"</span>); <a name="l00358"></a>00358 <span class="keywordflow">if</span> (rpmrc) { <a name="l00359"></a>00359 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00360"></a>00360 <span class="keywordflow">goto</span> exit; <a name="l00361"></a>00361 } <a name="l00362"></a>00362 <a name="l00363"></a>00363 _specdir = <a class="code" href="macro_8c.html#a00f38e60e61a7984bf1b08b7c440343">rpmGenPath</a>(<a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(<a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>), <span class="stringliteral">"%{_specdir}"</span>, <span class="stringliteral">""</span>); <a name="l00364"></a>00364 rpmrc = <a class="code" href="lib_2misc_8c.html#17b2947a71022080b4db276792d90317">rpmMkdirPath</a>(_specdir, <span class="stringliteral">"specdir"</span>); <a name="l00365"></a>00365 <span class="keywordflow">if</span> (rpmrc) { <a name="l00366"></a>00366 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00367"></a>00367 <span class="keywordflow">goto</span> exit; <a name="l00368"></a>00368 } <a name="l00369"></a>00369 <a name="l00370"></a>00370 <span class="comment">/* Build dnl/dil with {_sourcedir, _specdir} as values. */</span> <a name="l00371"></a>00371 <span class="keywordflow">if</span> (i < fi->fc) { <a name="l00372"></a>00372 <span class="keywordtype">int</span> speclen = strlen(_specdir) + 2; <a name="l00373"></a>00373 <span class="keywordtype">int</span> sourcelen = strlen(_sourcedir) + 2; <a name="l00374"></a>00374 <span class="keywordtype">char</span> * t; <a name="l00375"></a>00375 <a name="l00376"></a>00376 <span class="comment">/*@i@*/</span> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl = hfd(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl, -1); <a name="l00377"></a>00377 <a name="l00378"></a>00378 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dc = 2; <a name="l00379"></a>00379 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dc * <span class="keyword">sizeof</span>(*<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl) <a name="l00380"></a>00380 + <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->fc * <span class="keyword">sizeof</span>(*<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dil) <a name="l00381"></a>00381 + speclen + sourcelen); <a name="l00382"></a>00382 <span class="comment">/*@-dependenttrans@*/</span> <a name="l00383"></a>00383 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dil = (<span class="keywordtype">int</span> *)(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl + <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dc); <a name="l00384"></a>00384 <span class="comment">/*@=dependenttrans@*/</span> <a name="l00385"></a>00385 memset(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dil, 0, <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->fc * <span class="keyword">sizeof</span>(*<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dil)); <a name="l00386"></a>00386 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dil[i] = 1; <a name="l00387"></a>00387 <span class="comment">/*@-dependenttrans@*/</span> <a name="l00388"></a>00388 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl[0] = t = (<span class="keywordtype">char</span> *)(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dil + <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->fc); <a name="l00389"></a>00389 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->dnl[1] = t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, _sourcedir), <span class="stringliteral">"/"</span>) + 1; <a name="l00390"></a>00390 <span class="comment">/*@=dependenttrans@*/</span> <a name="l00391"></a>00391 (void) <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, _specdir), <span class="stringliteral">"/"</span>); <a name="l00392"></a>00392 <a name="l00393"></a>00393 t = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(speclen + strlen(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->bnl[i]) + 1); <a name="l00394"></a>00394 (void) <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, _specdir), <span class="stringliteral">"/"</span>), <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->bnl[i]); <a name="l00395"></a>00395 specFile = t; <a name="l00396"></a>00396 } <span class="keywordflow">else</span> { <a name="l00397"></a>00397 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55bce824839ccb3a7f5b39704dd85a44e89">RPMERR_NOSPEC</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"source package contains no .spec file\n"</span>)); <a name="l00398"></a>00398 rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00399"></a>00399 <span class="keywordflow">goto</span> exit; <a name="l00400"></a>00400 } <a name="l00401"></a>00401 <a name="l00402"></a>00402 psm->goal = <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>; <a name="l00403"></a>00403 <a name="l00404"></a>00404 <span class="comment">/*@-compmempass@*/</span> <span class="comment">/* FIX: psm->fi->dnl should be owned. */</span> <a name="l00405"></a>00405 rpmrc = <a class="code" href="psm_8c.html#9d374cccd16cb6758c13e4bd68cfe6f4">rpmpsmStage</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d73e1f2f8f8acc28503282257f4f4f2214">PSM_PROCESS</a>); <a name="l00406"></a>00406 <a name="l00407"></a>00407 (void) <a class="code" href="psm_8c.html#9d374cccd16cb6758c13e4bd68cfe6f4">rpmpsmStage</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d76b3d26ccca6373c1fb1af31bdc931512">PSM_FINI</a>); <a name="l00408"></a>00408 <span class="comment">/*@=compmempass@*/</span> <a name="l00409"></a>00409 <a name="l00410"></a>00410 <span class="keywordflow">if</span> (rpmrc) rpmrc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00411"></a>00411 <a name="l00412"></a>00412 exit: <a name="l00413"></a>00413 <span class="keywordflow">if</span> (specFilePtr && specFile && rpmrc == <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>) <a name="l00414"></a>00414 *specFilePtr = specFile; <a name="l00415"></a>00415 <span class="keywordflow">else</span> <a name="l00416"></a>00416 specFile = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(specFile); <a name="l00417"></a>00417 <a name="l00418"></a>00418 _specdir = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(_specdir); <a name="l00419"></a>00419 _sourcedir = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(_sourcedir); <a name="l00420"></a>00420 <a name="l00421"></a>00421 psm->fi = <a class="code" href="rpmfi_8c.html#a57c23e38b8fcd2028d94e0e5f22367e">rpmfiFree</a>(psm->fi); <a name="l00422"></a>00422 psm->te = NULL; <a name="l00423"></a>00423 <a name="l00424"></a>00424 <span class="keywordflow">if</span> (h != NULL) h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(h); <a name="l00425"></a>00425 <a name="l00426"></a>00426 <span class="comment">/*@-branchstate@*/</span> <a name="l00427"></a>00427 <span class="keywordflow">if</span> (<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> != NULL) { <a name="l00428"></a>00428 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->te->h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->te->h); <a name="l00429"></a>00429 <span class="keywordflow">if</span> (<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->te->fd != NULL) <a name="l00430"></a>00430 (void) <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->te->fd); <a name="l00431"></a>00431 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->te->fd = NULL; <a name="l00432"></a>00432 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>->te = NULL; <a name="l00433"></a>00433 <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = <a class="code" href="rpmfi_8c.html#a57c23e38b8fcd2028d94e0e5f22367e">rpmfiFree</a>(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>); <a name="l00434"></a>00434 } <a name="l00435"></a>00435 <span class="comment">/*@=branchstate@*/</span> <a name="l00436"></a>00436 <a name="l00437"></a>00437 <span class="comment">/* XXX nuke the added package(s). */</span> <a name="l00438"></a>00438 <a class="code" href="group__rpmts.html#gd3104a1a8c915cde09f2101a16f78133">rpmtsClean</a>(<a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>); <a name="l00439"></a>00439 <a name="l00440"></a>00440 psm->ts = <a class="code" href="group__rpmts.html#g5315165a6e80a0c71dbe5eb07dd18f58">rpmtsFree</a>(psm->ts); <a name="l00441"></a>00441 <a name="l00442"></a>00442 <span class="keywordflow">return</span> rpmrc; <a name="l00443"></a>00443 } <a name="l00444"></a>00444 <a name="l00445"></a>00445 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00446"></a><a class="code" href="psm_8c.html#ffdfbe5ff04320c59094e4d7007bd637">00446</a> <span class="keyword">static</span> <span class="keywordtype">char</span> * <a class="code" href="psm_8c.html#ffdfbe5ff04320c59094e4d7007bd637">SCRIPT_PATH</a> = <span class="stringliteral">"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin"</span>; <a name="l00447"></a>00447 <a name="l00453"></a><a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">00453</a> <span class="keyword">static</span> <span class="comment">/*@observer@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(<span class="keywordtype">int</span> tag) <a name="l00454"></a>00454 <span class="comment">/*@*/</span> <a name="l00455"></a>00455 { <a name="l00456"></a>00456 <span class="keywordflow">switch</span> (tag) { <a name="l00457"></a>00457 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bd498ce9388228f51be13c4142c749918">RPMTAG_PRETRANS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%pretrans"</span>; <a name="l00458"></a>00458 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b95b946c69130536f875942663c0dda3a">RPMTAG_TRIGGERPREIN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%triggerprein"</span>; <a name="l00459"></a>00459 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb973ae4c44ec1f58f57377961d4e88d2">RPMTAG_PREIN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%pre"</span>; <a name="l00460"></a>00460 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b9e949fbfd1262226cb793c74fa0f26f8">RPMTAG_POSTIN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%post"</span>; <a name="l00461"></a>00461 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507beeb9260a5397c174d783bb34fb3f5502">RPMTAG_TRIGGERIN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%triggerin"</span>; <a name="l00462"></a>00462 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b695242ee286e5c32830aac7cb93a2edc">RPMTAG_TRIGGERUN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%triggerun"</span>; <a name="l00463"></a>00463 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b7e8404eedc1a985e64340e25c2f74615">RPMTAG_PREUN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%preun"</span>; <a name="l00464"></a>00464 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2226eeadd4087c55510c19627e4b605a">RPMTAG_POSTUN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%postun"</span>; <a name="l00465"></a>00465 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bd30682d5a7a2eade18129641e7206e36">RPMTAG_POSTTRANS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%posttrans"</span>; <a name="l00466"></a>00466 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bda97cc51a8cc7d843877036c5d52433b">RPMTAG_TRIGGERPOSTUN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%triggerpostun"</span>; <a name="l00467"></a>00467 <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b4649aa00b50ad1d6d933cdff13240c8d">RPMTAG_VERIFYSCRIPT</a>: <span class="keywordflow">return</span> <span class="stringliteral">"%verify"</span>; <a name="l00468"></a>00468 } <a name="l00469"></a>00469 <span class="keywordflow">return</span> <span class="stringliteral">"%unknownscript"</span>; <a name="l00470"></a>00470 } <a name="l00471"></a>00471 <a name="l00477"></a><a class="code" href="psm_8c.html#f109fe7b9bc61d91b2b2ba44dc40b96e">00477</a> <span class="keyword">static</span> pid_t <a class="code" href="psm_8c.html#f109fe7b9bc61d91b2b2ba44dc40b96e">psmWait</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm) <a name="l00478"></a>00478 <span class="comment">/*@globals fileSystem, internalState @*/</span> <a name="l00479"></a>00479 <span class="comment">/*@modifies psm, fileSystem, internalState @*/</span> <a name="l00480"></a>00480 { <a name="l00481"></a>00481 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> <a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a> = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l00482"></a>00482 <a class="code" href="group__rpmio.html#g17f1fdbc48f3de7d0498dc8a14d8fad3">rpmtime_t</a> msecs; <a name="l00483"></a>00483 <a name="l00484"></a>00484 (void) <a class="code" href="rpmsq_8c.html#be449b3b92e2c98d46fb4bbc6cefc58e">rpmsqWait</a>(&psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>); <a name="l00485"></a>00485 msecs = psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#a41f4835ad7e3f5719d9279526cdf002">op</a>.<a class="code" href="structrpmop__s.html#441e7e2e6184a6e052c3955065326214">usecs</a>/1000; <a name="l00486"></a>00486 (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e82aa94b9f182b64fd706ed2b5b1a201a1">RPMTS_OP_SCRIPTLETS</a>), &psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#a41f4835ad7e3f5719d9279526cdf002">op</a>); <a name="l00487"></a>00487 <a name="l00488"></a>00488 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a name="l00489"></a>00489 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: waitpid(%d) rc %d status %x secs %u.%03u\n"</span>), <a name="l00490"></a>00490 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, (<span class="keywordtype">unsigned</span>)psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#8f30ac4a445872588abad49c384b92e8">child</a>, <a name="l00491"></a>00491 (<span class="keywordtype">unsigned</span>)psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a>, psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>, <a name="l00492"></a>00492 (<span class="keywordtype">unsigned</span>)msecs/1000, (<span class="keywordtype">unsigned</span>)msecs%1000); <a name="l00493"></a>00493 <a name="l00494"></a>00494 <span class="keywordflow">return</span> psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a>; <a name="l00495"></a>00495 } <a name="l00496"></a>00496 <a name="l00497"></a><a class="code" href="psm_8c.html#3e90e7f51d3446e1aa298fcd2d1c11db">00497</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="psm_8c.html#3e90e7f51d3446e1aa298fcd2d1c11db">scriptErrNotify</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="structrpmpsm__s.html#dd1afe1b5e692bea6b9c855c3cc665ca">rc</a>) <a name="l00498"></a>00498 { <a name="l00499"></a>00499 <span class="keywordtype">int</span> warn_only = (psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> != <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb973ae4c44ec1f58f57377961d4e88d2">RPMTAG_PREIN</a> && <a name="l00500"></a>00500 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> != <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b7e8404eedc1a985e64340e25c2f74615">RPMTAG_PREUN</a> && <a name="l00501"></a>00501 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> != <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b4649aa00b50ad1d6d933cdff13240c8d">RPMTAG_VERIFYSCRIPT</a>); <a name="l00502"></a>00502 <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>, psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>, <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9ca3592a49ef3361a79f1a91b56c26b07e">RPMCALLBACK_SCRIPT_ERROR</a>, <a name="l00503"></a>00503 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>, warn_only ? <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a> : rc); <a name="l00504"></a>00504 } <a name="l00505"></a>00505 <a name="l00506"></a>00506 <span class="preprocessor">#ifdef WITH_LUA</span> <a name="l00507"></a>00507 <span class="preprocessor"></span> <a name="l00510"></a>00510 <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> runLuaScript(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <a class="code" href="structheaderToken__s.html">Header</a> h, <span class="keyword">const</span> <span class="keywordtype">char</span> *sln, <a name="l00511"></a>00511 <span class="keywordtype">int</span> progArgc, <span class="keyword">const</span> <span class="keywordtype">char</span> **progArgv, <a name="l00512"></a>00512 <span class="keyword">const</span> <span class="keywordtype">char</span> *script, <span class="keywordtype">int</span> arg1, <span class="keywordtype">int</span> arg2) <a name="l00513"></a>00513 <span class="comment">/*@globals fileSystem, internalState @*/</span> <a name="l00514"></a>00514 <span class="comment">/*@modifies psm, fileSystem, internalState @*/</span> <a name="l00515"></a>00515 { <a name="l00516"></a>00516 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> <a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a> = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l00517"></a>00517 <span class="keywordtype">int</span> rootFd = -1; <a name="l00518"></a>00518 <span class="keyword">const</span> <span class="keywordtype">char</span> *n, *v, *r; <a name="l00519"></a>00519 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="structrpmpsm__s.html#dd1afe1b5e692bea6b9c855c3cc665ca">rc</a> = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l00520"></a>00520 <span class="keywordtype">int</span> i; <a name="l00521"></a>00521 <span class="keywordtype">int</span> xx; <a name="l00522"></a>00522 rpmlua lua = NULL; <span class="comment">/* Global state. */</span> <a name="l00523"></a>00523 rpmluav var; <a name="l00524"></a>00524 <a name="l00525"></a>00525 xx = <a class="code" href="group__header.html#g50514667473d848fc998df421ca3ce12">headerNVR</a>(h, &n, &v, &r); <a name="l00526"></a>00526 <a name="l00527"></a>00527 <span class="keywordflow">if</span> (!<a class="code" href="group__rpmts.html#g1db773f0137abb1593a35a396eed168a">rpmtsChrootDone</a>(ts)) { <a name="l00528"></a>00528 <span class="keyword">const</span> <span class="keywordtype">char</span> *rootDir = <a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(ts); <a name="l00529"></a>00529 xx = chdir(<span class="stringliteral">"/"</span>); <a name="l00530"></a>00530 <span class="comment">/*@-nullpass@*/</span> <a name="l00531"></a>00531 rootFd = open(<span class="stringliteral">"."</span>, O_RDONLY, 0); <a name="l00532"></a>00532 <span class="comment">/*@=nullpass@*/</span> <a name="l00533"></a>00533 <span class="keywordflow">if</span> (rootFd >= 0) { <a name="l00534"></a>00534 <span class="comment">/*@-superuser -noeffect @*/</span> <a name="l00535"></a>00535 <span class="keywordflow">if</span> (rootDir != NULL && strcmp(rootDir, <span class="stringliteral">"/"</span>) && *rootDir == <span class="charliteral">'/'</span>) <a name="l00536"></a>00536 xx = chroot(rootDir); <a name="l00537"></a>00537 <span class="comment">/*@=superuser =noeffect @*/</span> <a name="l00538"></a>00538 xx = <a class="code" href="group__rpmts.html#g1b06d5545f2232201dc199bcbe9d0f04">rpmtsSetChrootDone</a>(ts, 1); <a name="l00539"></a>00539 } <a name="l00540"></a>00540 } <a name="l00541"></a>00541 <a name="l00542"></a>00542 <span class="comment">/* Create arg variable */</span> <a name="l00543"></a>00543 rpmluaPushTable(lua, <span class="stringliteral">"arg"</span>); <a name="l00544"></a>00544 var = rpmluavNew(); <a name="l00545"></a>00545 rpmluavSetListMode(var, 1); <a name="l00546"></a>00546 <span class="comment">/*@+relaxtypes@*/</span> <a name="l00547"></a>00547 <span class="keywordflow">if</span> (progArgv) { <a name="l00548"></a>00548 <span class="keywordflow">for</span> (i = 0; i < progArgc && progArgv[i]; i++) { <a name="l00549"></a>00549 rpmluavSetValue(var, RPMLUAV_STRING, progArgv[i]); <a name="l00550"></a>00550 rpmluaSetVar(lua, var); <a name="l00551"></a>00551 } <a name="l00552"></a>00552 } <a name="l00553"></a>00553 <span class="keywordflow">if</span> (arg1 >= 0) { <a name="l00554"></a>00554 rpmluavSetValueNum(var, arg1); <a name="l00555"></a>00555 rpmluaSetVar(lua, var); <a name="l00556"></a>00556 } <a name="l00557"></a>00557 <span class="keywordflow">if</span> (arg2 >= 0) { <a name="l00558"></a>00558 rpmluavSetValueNum(var, arg2); <a name="l00559"></a>00559 rpmluaSetVar(lua, var); <a name="l00560"></a>00560 } <a name="l00561"></a>00561 <span class="comment">/*@=relaxtypes@*/</span> <a name="l00562"></a>00562 <span class="comment">/*@-moduncon@*/</span> <a name="l00563"></a>00563 var = rpmluavFree(var); <a name="l00564"></a>00564 <span class="comment">/*@=moduncon@*/</span> <a name="l00565"></a>00565 rpmluaPop(lua); <a name="l00566"></a>00566 <a name="l00567"></a>00567 { <a name="l00568"></a>00568 <span class="keywordtype">char</span> buf[BUFSIZ]; <a name="l00569"></a>00569 xx = <a class="code" href="rpmps_8c.html#8eff177ddf89d8d85ac7c6b90a011480">snprintf</a>(buf, BUFSIZ, <span class="stringliteral">"%s(%s-%s-%s)"</span>, sln, n, v, r); <a name="l00570"></a>00570 <span class="keywordflow">if</span> (rpmluaRunScript(lua, script, buf) == -1) <a name="l00571"></a>00571 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00572"></a>00572 } <a name="l00573"></a>00573 <a name="l00574"></a>00574 rpmluaDelVar(lua, <span class="stringliteral">"arg"</span>); <a name="l00575"></a>00575 <a name="l00576"></a>00576 <span class="keywordflow">if</span> (rootFd >= 0) { <a name="l00577"></a>00577 <span class="keyword">const</span> <span class="keywordtype">char</span> *rootDir = <a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(ts); <a name="l00578"></a>00578 xx = fchdir(rootFd); <a name="l00579"></a>00579 xx = close(rootFd); <a name="l00580"></a>00580 <span class="comment">/*@-superuser -noeffect @*/</span> <a name="l00581"></a>00581 <span class="keywordflow">if</span> (rootDir != NULL && strcmp(rootDir, <span class="stringliteral">"/"</span>) && *rootDir == <span class="charliteral">'/'</span>) <a name="l00582"></a>00582 xx = chroot(<span class="stringliteral">"."</span>); <a name="l00583"></a>00583 <span class="comment">/*@=superuser =noeffect @*/</span> <a name="l00584"></a>00584 xx = <a class="code" href="group__rpmts.html#g1b06d5545f2232201dc199bcbe9d0f04">rpmtsSetChrootDone</a>(ts, 0); <a name="l00585"></a>00585 } <a name="l00586"></a>00586 <a name="l00587"></a>00587 <span class="keywordflow">if</span> (rc != <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>) { <a name="l00588"></a>00588 <a class="code" href="psm_8c.html#3e90e7f51d3446e1aa298fcd2d1c11db">scriptErrNotify</a>(psm, rc); <a name="l00589"></a>00589 } <a name="l00590"></a>00590 <a name="l00591"></a>00591 <span class="keywordflow">return</span> rc; <a name="l00592"></a>00592 } <a name="l00593"></a>00593 <span class="preprocessor">#endif</span> <a name="l00594"></a>00594 <span class="preprocessor"></span> <a name="l00597"></a>00597 <span class="comment">/*@unchecked@*/</span> <a name="l00598"></a><a class="code" href="psm_8c.html#89484b1d7fb0b14c918b3718c20d6111">00598</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="psm_8c.html#89484b1d7fb0b14c918b3718c20d6111">ldconfig_done</a> = 0; <a name="l00599"></a>00599 <a name="l00600"></a>00600 <span class="comment">/*@unchecked@*/</span> <span class="comment">/*@observer@*/</span> <span class="comment">/*@null@*/</span> <a name="l00601"></a>00601 <span class="preprocessor">#if 0</span> <a name="l00602"></a>00602 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="psm_8c.html#f9dd13f11138732bb07360147edcde05">ldconfig_path</a> = <span class="stringliteral">"/sbin/ldconfig"</span>; <a name="l00603"></a>00603 <span class="preprocessor">#else</span> <a name="l00604"></a><a class="code" href="psm_8c.html#f9dd13f11138732bb07360147edcde05">00604</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * ldconfig_path = NULL; <a name="l00605"></a>00605 <span class="preprocessor">#endif</span> <a name="l00606"></a>00606 <span class="preprocessor"></span> <a name="l00625"></a><a class="code" href="psm_8c.html#e2f77b7d3865469ef4f1a7a47a6638b8">00625</a> <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#e2f77b7d3865469ef4f1a7a47a6638b8">runScript</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <a class="code" href="structheaderToken__s.html">Header</a> h, <span class="keyword">const</span> <span class="keywordtype">char</span> * sln, <a name="l00626"></a>00626 <span class="keywordtype">int</span> progArgc, <span class="keyword">const</span> <span class="keywordtype">char</span> ** progArgv, <a name="l00627"></a>00627 <span class="keyword">const</span> <span class="keywordtype">char</span> * script, <span class="keywordtype">int</span> arg1, <span class="keywordtype">int</span> arg2) <a name="l00628"></a>00628 <span class="comment">/*@globals ldconfig_done, rpmGlobalMacroContext, h_errno,</span> <a name="l00629"></a>00629 <span class="comment"> fileSystem, internalState@*/</span> <a name="l00630"></a>00630 <span class="comment">/*@modifies psm, ldconfig_done, rpmGlobalMacroContext,</span> <a name="l00631"></a>00631 <span class="comment"> fileSystem, internalState @*/</span> <a name="l00632"></a>00632 { <a name="l00633"></a>00633 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l00634"></a>00634 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l00635"></a>00635 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = fi->hge; <a name="l00636"></a>00636 <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi->hfd ? fi->hfd : <a class="code" href="group__header.html#ge7835c5c4504bf89e169fb7d34c6b521">headerFreeData</a>); <a name="l00637"></a>00637 <span class="keyword">const</span> <span class="keywordtype">char</span> ** <a class="code" href="compress_8c.html#b233d58a2d9af13ae09ea8fd82556856">argv</a> = NULL; <a name="l00638"></a>00638 <span class="keywordtype">int</span> argc = 0; <a name="l00639"></a>00639 <span class="keyword">const</span> <span class="keywordtype">char</span> ** prefixes = NULL; <a name="l00640"></a>00640 <span class="keywordtype">int</span> numPrefixes; <a name="l00641"></a>00641 <a class="code" href="group__header.html#ge3bf8d35e51bc1fbaa1a2a5acdceb79e">rpmTagType</a> ipt; <a name="l00642"></a>00642 <span class="keyword">const</span> <span class="keywordtype">char</span> * oldPrefix; <a name="l00643"></a>00643 <span class="keywordtype">int</span> maxPrefixLength; <a name="l00644"></a>00644 <span class="keywordtype">int</span> len; <a name="l00645"></a>00645 <span class="keywordtype">char</span> * prefixBuf = NULL; <a name="l00646"></a>00646 <span class="keyword">const</span> <span class="keywordtype">char</span> * fn = NULL; <a name="l00647"></a>00647 <span class="keywordtype">int</span> xx; <a name="l00648"></a>00648 <span class="keywordtype">int</span> i; <a name="l00649"></a>00649 <span class="keywordtype">int</span> freePrefixes = 0; <a name="l00650"></a>00650 <a class="code" href="struct__FD__s.html">FD_t</a> scriptFd; <a name="l00651"></a>00651 <a class="code" href="struct__FD__s.html">FD_t</a> out; <a name="l00652"></a>00652 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l00653"></a>00653 <span class="keyword">const</span> <span class="keywordtype">char</span> *n, *v, *r, *a; <a name="l00654"></a>00654 <a name="l00655"></a>00655 <span class="keywordflow">if</span> (progArgv == NULL && script == NULL) <a name="l00656"></a>00656 <span class="keywordflow">return</span> rc; <a name="l00657"></a>00657 <a name="l00658"></a>00658 <span class="comment">/* XXX FIXME: except for %verifyscript, rpmteNEVR can be used. */</span> <a name="l00659"></a>00659 xx = <a class="code" href="group__header.html#g50514667473d848fc998df421ca3ce12">headerNVR</a>(h, &n, &v, &r); <a name="l00660"></a>00660 xx = hge(h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b99068a2c9123489dfc26242674d29ed6">RPMTAG_ARCH</a>, NULL, (<span class="keywordtype">void</span> **) &a, NULL); <a name="l00661"></a>00661 <a name="l00662"></a>00662 <span class="keywordflow">if</span> (progArgv && strcmp(progArgv[0], <span class="stringliteral">"<lua>"</span>) == 0) { <a name="l00663"></a>00663 <span class="preprocessor">#ifdef WITH_LUA</span> <a name="l00664"></a>00664 <span class="preprocessor"></span> <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a name="l00665"></a>00665 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: %s(%s-%s-%s.%s) running <lua> scriptlet.\n"</span>), <a name="l00666"></a>00666 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), n, v, r, a); <a name="l00667"></a>00667 <span class="keywordflow">return</span> runLuaScript(psm, h, sln, progArgc, progArgv, <a name="l00668"></a>00668 script, arg1, arg2); <a name="l00669"></a>00669 <span class="preprocessor">#else</span> <a name="l00670"></a>00670 <span class="preprocessor"></span> <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00671"></a>00671 <span class="preprocessor">#endif</span> <a name="l00672"></a>00672 <span class="preprocessor"></span> } <a name="l00673"></a>00673 <a name="l00674"></a>00674 psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#d341ce4fa8cded55a7a133876dbb5200">reaper</a> = 1; <a name="l00675"></a>00675 <a name="l00676"></a>00676 <span class="comment">/*</span> <a name="l00677"></a>00677 <span class="comment"> * If a successor node, and ldconfig was just run, don't bother.</span> <a name="l00678"></a>00678 <span class="comment"> */</span> <a name="l00679"></a>00679 <span class="keywordflow">if</span> (ldconfig_path && progArgv != NULL && psm-><a class="code" href="structrpmpsm__s.html#0af58685c1524abefa73fb132229913f">unorderedSuccessor</a>) { <a name="l00680"></a>00680 <span class="keywordflow">if</span> (ldconfig_done && !strcmp(progArgv[0], ldconfig_path)) { <a name="l00681"></a>00681 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a name="l00682"></a>00682 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: %s(%s-%s-%s.%s) skipping redundant \"%s\".\n"</span>), <a name="l00683"></a>00683 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), n, v, r, a, <a name="l00684"></a>00684 progArgv[0]); <a name="l00685"></a>00685 <span class="keywordflow">return</span> rc; <a name="l00686"></a>00686 } <a name="l00687"></a>00687 } <a name="l00688"></a>00688 <a name="l00689"></a>00689 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a name="l00690"></a>00690 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: %s(%s-%s-%s.%s) %ssynchronous scriptlet start\n"</span>), <a name="l00691"></a>00691 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), n, v, r, a, <a name="l00692"></a>00692 (psm-><a class="code" href="structrpmpsm__s.html#0af58685c1524abefa73fb132229913f">unorderedSuccessor</a> ? <span class="stringliteral">"a"</span> : <span class="stringliteral">""</span>)); <a name="l00693"></a>00693 <a name="l00694"></a>00694 <span class="keywordflow">if</span> (!progArgv) { <a name="l00695"></a>00695 argv = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(5 * <span class="keyword">sizeof</span>(*argv)); <a name="l00696"></a>00696 argv[0] = <span class="stringliteral">"/bin/sh"</span>; <a name="l00697"></a>00697 argc = 1; <a name="l00698"></a>00698 ldconfig_done = 0; <a name="l00699"></a>00699 } <span class="keywordflow">else</span> { <a name="l00700"></a>00700 argv = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>((progArgc + 4) * <span class="keyword">sizeof</span>(*argv)); <a name="l00701"></a>00701 memcpy(argv, progArgv, progArgc * <span class="keyword">sizeof</span>(*argv)); <a name="l00702"></a>00702 argc = progArgc; <a name="l00703"></a>00703 ldconfig_done = (ldconfig_path && !strcmp(argv[0], ldconfig_path) <a name="l00704"></a>00704 ? 1 : 0); <a name="l00705"></a>00705 } <a name="l00706"></a>00706 <a name="l00707"></a>00707 <span class="preprocessor">#if __ia64__</span> <a name="l00708"></a>00708 <span class="preprocessor"></span> <span class="comment">/* XXX This assumes that all interpreters are elf executables. */</span> <a name="l00709"></a>00709 <span class="keywordflow">if</span> ((a != NULL && a[0] == <span class="charliteral">'i'</span> && a[1] != <span class="charliteral">'\0'</span> && a[2] == <span class="charliteral">'8'</span> && a[3] == <span class="charliteral">'6'</span>) <a name="l00710"></a>00710 && strcmp(argv[0], <span class="stringliteral">"/sbin/ldconfig"</span>)) <a name="l00711"></a>00711 { <a name="l00712"></a>00712 <span class="keyword">const</span> <span class="keywordtype">char</span> * fmt = <a class="code" href="macro_8c.html#5167ad7785835f120734aad8ea938cd9">rpmGetPath</a>(<span class="stringliteral">"%{?_autorelocate_path}"</span>, NULL); <a name="l00713"></a>00713 <span class="keyword">const</span> <span class="keywordtype">char</span> * errstr; <a name="l00714"></a>00714 <span class="keywordtype">char</span> * newPath; <a name="l00715"></a>00715 <span class="keywordtype">char</span> * t; <a name="l00716"></a>00716 <a name="l00717"></a>00717 newPath = <a class="code" href="group__header.html#gaeec919c9a7c25163d6066137e85cba7">headerSprintf</a>(h, fmt, <a class="code" href="rpmlib_8h.html#8ecee0348aa330b50d6c0dc3dcc1101f">rpmTagTable</a>, <a class="code" href="formats_8c.html#046a50c5123c8a1d606afb0d8b37790d">rpmHeaderFormats</a>, &errstr); <a name="l00718"></a>00718 fmt = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fmt); <a name="l00719"></a>00719 <a name="l00720"></a>00720 <span class="comment">/* XXX On ia64, change leading /emul/ix86 -> /emul/ia32, ick. */</span> <a name="l00721"></a>00721 <span class="keywordflow">if</span> (newPath != NULL && *newPath != <span class="charliteral">'\0'</span> <a name="l00722"></a>00722 && strlen(newPath) >= (<span class="keyword">sizeof</span>(<span class="stringliteral">"/emul/i386"</span>)-1) <a name="l00723"></a>00723 && newPath[0] == <span class="charliteral">'/'</span> && newPath[1] == <span class="charliteral">'e'</span> && newPath[2] == <span class="charliteral">'m'</span> <a name="l00724"></a>00724 && newPath[3] == <span class="charliteral">'u'</span> && newPath[4] == <span class="charliteral">'l'</span> && newPath[5] == <span class="charliteral">'/'</span> <a name="l00725"></a>00725 && newPath[6] == <span class="charliteral">'i'</span> && newPath[8] == <span class="charliteral">'8'</span> && newPath[9] == <span class="charliteral">'6'</span>) <a name="l00726"></a>00726 { <a name="l00727"></a>00727 newPath[7] = <span class="charliteral">'a'</span>; <a name="l00728"></a>00728 newPath[8] = <span class="charliteral">'3'</span>; <a name="l00729"></a>00729 newPath[9] = <span class="charliteral">'2'</span>; <a name="l00730"></a>00730 } <a name="l00731"></a>00731 <a name="l00732"></a>00732 t = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(strlen(newPath) + strlen(argv[0]) + 1); <a name="l00733"></a>00733 *t = <span class="charliteral">'\0'</span>; <a name="l00734"></a>00734 (void) <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, newPath), argv[0]); <a name="l00735"></a>00735 newPath = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(newPath); <a name="l00736"></a>00736 argv[0] = t; <a name="l00737"></a>00737 } <a name="l00738"></a>00738 <span class="preprocessor">#endif</span> <a name="l00739"></a>00739 <span class="preprocessor"></span> <a name="l00740"></a>00740 <span class="keywordflow">if</span> (hge(h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b6247eea48c96994d2b2204b5f840cd44">RPMTAG_INSTPREFIXES</a>, &ipt, (<span class="keywordtype">void</span> **) &prefixes, &numPrefixes)) { <a name="l00741"></a>00741 freePrefixes = 1; <a name="l00742"></a>00742 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hge(h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b9def23ff818e48f2fa34f5689650952c">RPMTAG_INSTALLPREFIX</a>, NULL, (<span class="keywordtype">void</span> **) &oldPrefix, NULL)) { <a name="l00743"></a>00743 prefixes = &oldPrefix; <a name="l00744"></a>00744 numPrefixes = 1; <a name="l00745"></a>00745 } <span class="keywordflow">else</span> { <a name="l00746"></a>00746 numPrefixes = 0; <a name="l00747"></a>00747 } <a name="l00748"></a>00748 <a name="l00749"></a>00749 maxPrefixLength = 0; <a name="l00750"></a>00750 <span class="keywordflow">if</span> (prefixes != NULL) <a name="l00751"></a>00751 <span class="keywordflow">for</span> (i = 0; i < numPrefixes; i++) { <a name="l00752"></a>00752 len = strlen(prefixes[i]); <a name="l00753"></a>00753 <span class="keywordflow">if</span> (len > maxPrefixLength) maxPrefixLength = len; <a name="l00754"></a>00754 } <a name="l00755"></a>00755 prefixBuf = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(maxPrefixLength + 50); <a name="l00756"></a>00756 <a name="l00757"></a>00757 <span class="keywordflow">if</span> (script) { <a name="l00758"></a>00758 <span class="keyword">const</span> <span class="keywordtype">char</span> * rootDir = <a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(ts); <a name="l00759"></a>00759 <a class="code" href="struct__FD__s.html">FD_t</a> <a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>; <a name="l00760"></a>00760 <a name="l00761"></a>00761 <span class="comment">/*@-branchstate@*/</span> <a name="l00762"></a>00762 <span class="keywordflow">if</span> (<a class="code" href="lib_2misc_8c.html#a6bd8504c68cc7ffebecef2a094dcf7e">makeTempFile</a>((!<a class="code" href="group__rpmts.html#g1db773f0137abb1593a35a396eed168a">rpmtsChrootDone</a>(ts) ? rootDir : <span class="stringliteral">"/"</span>), &fn, &<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>)) { <a name="l00763"></a>00763 <span class="keywordflow">if</span> (prefixes != NULL && freePrefixes) free(prefixes); <a name="l00764"></a>00764 <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00765"></a>00765 } <a name="l00766"></a>00766 <span class="comment">/*@=branchstate@*/</span> <a name="l00767"></a>00767 <a name="l00768"></a>00768 <span class="keywordflow">if</span> (<a class="code" href="rpmmessages_8h.html#5c744d9a5bb5b5fc109a329e0d30c160">rpmIsDebug</a>() && <a name="l00769"></a>00769 (!strcmp(argv[0], <span class="stringliteral">"/bin/sh"</span>) || !strcmp(argv[0], <span class="stringliteral">"/bin/bash"</span>))) <a name="l00770"></a>00770 { <a name="l00771"></a>00771 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> set_x[] = <span class="stringliteral">"set -x\n"</span>; <a name="l00772"></a>00772 xx = <a class="code" href="rpmio_8c.html#ce5d48cc70864787df48c3d233edb997">Fwrite</a>(set_x, <span class="keyword">sizeof</span>(set_x[0]), <span class="keyword">sizeof</span>(set_x)-1, <a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>); <a name="l00773"></a>00773 } <a name="l00774"></a>00774 <a name="l00775"></a>00775 <span class="keywordflow">if</span> (ldconfig_path && strstr(script, ldconfig_path) != NULL) <a name="l00776"></a>00776 ldconfig_done = 1; <a name="l00777"></a>00777 <a name="l00778"></a>00778 xx = <a class="code" href="rpmio_8c.html#ce5d48cc70864787df48c3d233edb997">Fwrite</a>(script, <span class="keyword">sizeof</span>(script[0]), strlen(script), <a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>); <a name="l00779"></a>00779 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>); <a name="l00780"></a>00780 <a name="l00781"></a>00781 { <span class="keyword">const</span> <span class="keywordtype">char</span> * sn = fn; <a name="l00782"></a>00782 <span class="keywordflow">if</span> (!<a class="code" href="group__rpmts.html#g1db773f0137abb1593a35a396eed168a">rpmtsChrootDone</a>(ts) && rootDir != NULL && <a name="l00783"></a>00783 !(rootDir[0] == <span class="charliteral">'/'</span> && rootDir[1] == <span class="charliteral">'\0'</span>)) <a name="l00784"></a>00784 { <a name="l00785"></a>00785 sn += strlen(rootDir)-1; <a name="l00786"></a>00786 } <a name="l00787"></a>00787 argv[argc++] = sn; <a name="l00788"></a>00788 } <a name="l00789"></a>00789 <a name="l00790"></a>00790 <span class="keywordflow">if</span> (arg1 >= 0) { <a name="l00791"></a>00791 <span class="keywordtype">char</span> *av = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(20); <a name="l00792"></a>00792 sprintf(av, <span class="stringliteral">"%d"</span>, arg1); <a name="l00793"></a>00793 argv[argc++] = av; <a name="l00794"></a>00794 } <a name="l00795"></a>00795 <span class="keywordflow">if</span> (arg2 >= 0) { <a name="l00796"></a>00796 <span class="keywordtype">char</span> *av = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(20); <a name="l00797"></a>00797 sprintf(av, <span class="stringliteral">"%d"</span>, arg2); <a name="l00798"></a>00798 argv[argc++] = av; <a name="l00799"></a>00799 } <a name="l00800"></a>00800 } <a name="l00801"></a>00801 <a name="l00802"></a>00802 argv[argc] = NULL; <a name="l00803"></a>00803 <a name="l00804"></a>00804 scriptFd = <a class="code" href="group__rpmts.html#gf9185d7ec5096c8e1058750937a299e7">rpmtsScriptFd</a>(ts); <a name="l00805"></a>00805 <span class="keywordflow">if</span> (scriptFd != NULL) { <a name="l00806"></a>00806 <span class="keywordflow">if</span> (<a class="code" href="rpmmessages_8h.html#16d38257a060a06fe95122f8fa5bf4e8">rpmIsVerbose</a>()) { <a name="l00807"></a>00807 out = <a class="code" href="rpmio_8c.html#7fdbfe3ae72584240fb4c41364667ed6">fdDup</a>(<a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(scriptFd)); <a name="l00808"></a>00808 } <span class="keywordflow">else</span> { <a name="l00809"></a>00809 out = <a class="code" href="rpmio_8c.html#2eb611bd97d6d937d2296bcecd83ee31">Fopen</a>(<span class="stringliteral">"/dev/null"</span>, <span class="stringliteral">"w.fdio"</span>); <a name="l00810"></a>00810 <span class="keywordflow">if</span> (<a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(out)) { <a name="l00811"></a>00811 out = <a class="code" href="rpmio_8c.html#7fdbfe3ae72584240fb4c41364667ed6">fdDup</a>(<a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(scriptFd)); <a name="l00812"></a>00812 } <a name="l00813"></a>00813 } <a name="l00814"></a>00814 } <span class="keywordflow">else</span> { <a name="l00815"></a>00815 out = <a class="code" href="rpmio_8c.html#7fdbfe3ae72584240fb4c41364667ed6">fdDup</a>(STDOUT_FILENO); <a name="l00816"></a>00816 } <a name="l00817"></a>00817 <span class="keywordflow">if</span> (out == NULL) <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <span class="comment">/* XXX can't happen */</span> <a name="l00818"></a>00818 <a name="l00819"></a>00819 <span class="comment">/*@-branchstate@*/</span> <a name="l00820"></a>00820 xx = <a class="code" href="rpmsq_8c.html#b13d7b8025bdd175c80fea8ea9f066fb">rpmsqFork</a>(&psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>); <a name="l00821"></a>00821 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#8f30ac4a445872588abad49c384b92e8">child</a> == 0) { <a name="l00822"></a>00822 <span class="keyword">const</span> <span class="keywordtype">char</span> * rootDir; <a name="l00823"></a>00823 <span class="keywordtype">int</span> pipes[2]; <a name="l00824"></a>00824 <span class="keywordtype">int</span> flag; <a name="l00825"></a>00825 <span class="keywordtype">int</span> fdno; <a name="l00826"></a>00826 <span class="keywordtype">int</span> open_max; <a name="l00827"></a>00827 <a name="l00828"></a>00828 (void) signal(SIGPIPE, SIG_DFL); <a name="l00829"></a>00829 pipes[0] = pipes[1] = 0; <a name="l00830"></a>00830 <span class="comment">/* make stdin inaccessible */</span> <a name="l00831"></a>00831 xx = pipe(pipes); <a name="l00832"></a>00832 xx = close(pipes[1]); <a name="l00833"></a>00833 xx = dup2(pipes[0], STDIN_FILENO); <a name="l00834"></a>00834 xx = close(pipes[0]); <a name="l00835"></a>00835 <a name="l00836"></a>00836 <span class="comment">/* XXX Force FD_CLOEXEC on all inherited fdno's. */</span> <a name="l00837"></a>00837 open_max = sysconf(_SC_OPEN_MAX); <a name="l00838"></a>00838 <span class="keywordflow">if</span> (open_max == -1) { <a name="l00839"></a>00839 open_max = 1024; <a name="l00840"></a>00840 } <a name="l00841"></a>00841 <span class="keywordflow">for</span> (fdno = 3; fdno < open_max; fdno++) { <a name="l00842"></a>00842 flag = fcntl(fdno, F_GETFD); <a name="l00843"></a>00843 <span class="keywordflow">if</span> (flag == -1 || (flag & FD_CLOEXEC)) <a name="l00844"></a>00844 <span class="keywordflow">continue</span>; <a name="l00845"></a>00845 xx = fcntl(fdno, F_SETFD, FD_CLOEXEC); <a name="l00846"></a>00846 <span class="comment">/* XXX W2DO? debug msg for inheirited fdno w/o FD_CLOEXEC */</span> <a name="l00847"></a>00847 } <a name="l00848"></a>00848 <a name="l00849"></a>00849 <span class="keywordflow">if</span> (scriptFd != NULL) { <a name="l00850"></a>00850 <span class="keywordtype">int</span> sfdno = <a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(scriptFd); <a name="l00851"></a>00851 <span class="keywordtype">int</span> ofdno = <a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(out); <a name="l00852"></a>00852 <span class="keywordflow">if</span> (sfdno != STDERR_FILENO) <a name="l00853"></a>00853 xx = dup2(sfdno, STDERR_FILENO); <a name="l00854"></a>00854 <span class="keywordflow">if</span> (ofdno != STDOUT_FILENO) <a name="l00855"></a>00855 xx = dup2(ofdno, STDOUT_FILENO); <a name="l00856"></a>00856 <span class="comment">/* make sure we don't close stdin/stderr/stdout by mistake! */</span> <a name="l00857"></a>00857 <span class="keywordflow">if</span> (ofdno > STDERR_FILENO && ofdno != sfdno) <a name="l00858"></a>00858 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a> (out); <a name="l00859"></a>00859 <span class="keywordflow">if</span> (sfdno > STDERR_FILENO && ofdno != sfdno) <a name="l00860"></a>00860 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a> (scriptFd); <a name="l00861"></a>00861 } <a name="l00862"></a>00862 <a name="l00863"></a>00863 { <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="rpmtool_8c.html#b49355ca6cf1f782b6371d6f00c79a50">ipath</a> = <a class="code" href="macro_8c.html#5d9a83318fc250d1fad8096c811754d4">rpmExpand</a>(<span class="stringliteral">"PATH=%{_install_script_path}"</span>, NULL); <a name="l00864"></a>00864 <span class="keyword">const</span> <span class="keywordtype">char</span> *path = SCRIPT_PATH; <a name="l00865"></a>00865 <a name="l00866"></a>00866 <span class="keywordflow">if</span> (ipath && ipath[5] != <span class="charliteral">'%'</span>) <a name="l00867"></a>00867 path = ipath; <a name="l00868"></a>00868 <a name="l00869"></a>00869 xx = <a class="code" href="lib_2misc_8c.html#a72d9b03a6e29900b11206f5b7c1ed2c">doputenv</a>(path); <a name="l00870"></a>00870 <span class="comment">/*@-modobserver@*/</span> <a name="l00871"></a>00871 ipath = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(ipath); <a name="l00872"></a>00872 <span class="comment">/*@=modobserver@*/</span> <a name="l00873"></a>00873 } <a name="l00874"></a>00874 <a name="l00875"></a>00875 <span class="keywordflow">if</span> (prefixes != NULL) <a name="l00876"></a>00876 <span class="keywordflow">for</span> (i = 0; i < numPrefixes; i++) { <a name="l00877"></a>00877 sprintf(prefixBuf, <span class="stringliteral">"RPM_INSTALL_PREFIX%d=%s"</span>, i, prefixes[i]); <a name="l00878"></a>00878 xx = <a class="code" href="lib_2misc_8c.html#a72d9b03a6e29900b11206f5b7c1ed2c">doputenv</a>(prefixBuf); <a name="l00879"></a>00879 <a name="l00880"></a>00880 <span class="comment">/* backwards compatibility */</span> <a name="l00881"></a>00881 <span class="keywordflow">if</span> (i == 0) { <a name="l00882"></a>00882 sprintf(prefixBuf, <span class="stringliteral">"RPM_INSTALL_PREFIX=%s"</span>, prefixes[i]); <a name="l00883"></a>00883 xx = <a class="code" href="lib_2misc_8c.html#a72d9b03a6e29900b11206f5b7c1ed2c">doputenv</a>(prefixBuf); <a name="l00884"></a>00884 } <a name="l00885"></a>00885 } <a name="l00886"></a>00886 <a name="l00887"></a>00887 rootDir = ts->rootDir; <span class="comment">/* HACK: rootDir = rpmtsRootDir(ts); instead */</span> <a name="l00888"></a>00888 <span class="keywordflow">if</span> (rootDir != NULL) <span class="comment">/* XXX can't happen */</span> <a name="l00889"></a>00889 <span class="keywordflow">switch</span>(<a class="code" href="rpmurl_8h.html#22b100d54b531488e82c40551e60a065">urlIsURL</a>(rootDir)) { <a name="l00890"></a>00890 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f56b83b361a4814f376a40035d5b837d66f">URL_IS_PATH</a>: <a name="l00891"></a>00891 rootDir += <span class="keyword">sizeof</span>(<span class="stringliteral">"file://"</span>) - 1; <a name="l00892"></a>00892 rootDir = strchr(rootDir, <span class="charliteral">'/'</span>); <a name="l00893"></a>00893 <span class="comment">/*@fallthrough@*/</span> <a name="l00894"></a>00894 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f56adafeb790bb74bf766bea5fdde6e0e1c">URL_IS_UNKNOWN</a>: <a name="l00895"></a>00895 <span class="keywordflow">if</span> (!<a class="code" href="group__rpmts.html#g1db773f0137abb1593a35a396eed168a">rpmtsChrootDone</a>(ts) && <a name="l00896"></a>00896 !(rootDir[0] == <span class="charliteral">'/'</span> && rootDir[1] == <span class="charliteral">'\0'</span>)) <a name="l00897"></a>00897 { <a name="l00898"></a>00898 <span class="comment">/*@-superuser -noeffect @*/</span> <a name="l00899"></a>00899 xx = chroot(rootDir); <a name="l00900"></a>00900 <span class="comment">/*@=superuser =noeffect @*/</span> <a name="l00901"></a>00901 } <a name="l00902"></a>00902 xx = chdir(<span class="stringliteral">"/"</span>); <a name="l00903"></a>00903 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: %s(%s-%s-%s.%s)\texecv(%s) pid %d\n"</span>), <a name="l00904"></a>00904 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, sln, n, v, r, a, <a name="l00905"></a>00905 argv[0], (<span class="keywordtype">unsigned</span>)getpid()); <a name="l00906"></a>00906 <a name="l00907"></a>00907 <span class="comment">/* XXX Don't mtrace into children. */</span> <a name="l00908"></a>00908 <a class="code" href="system_8h.html#8c996258959222a38a0d4c35d8e22105">unsetenv</a>(<span class="stringliteral">"MALLOC_CHECK_"</span>); <a name="l00909"></a>00909 <a name="l00910"></a>00910 <span class="comment">/* Permit libselinux to do the scriptlet exec. */</span> <a name="l00911"></a>00911 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g05e5e58b25c9bb474d70000c9b24697c">rpmtsSELinuxEnabled</a>(ts) == 1) { <a name="l00912"></a>00912 <span class="comment">/*@-moduncon@*/</span> <a name="l00913"></a>00913 xx = <a class="code" href="system_8h.html#97e4e71d31e95800050ae0f1bfaf09bb">rpm_execcon</a>(0, argv[0], argv, <a class="code" href="signature_8c.html#a006daaf11f1e2e45a6ababaf463212b">environ</a>); <a name="l00914"></a>00914 <span class="comment">/*@=moduncon@*/</span> <a name="l00915"></a>00915 <span class="keywordflow">if</span> (xx != 0) <a name="l00916"></a>00916 <span class="keywordflow">break</span>; <a name="l00917"></a>00917 } <a name="l00918"></a>00918 <a name="l00919"></a>00919 <span class="comment">/*@-nullstate@*/</span> <a name="l00920"></a>00920 xx = execv(argv[0], (<span class="keywordtype">char</span> *<span class="keyword">const</span> *)argv); <a name="l00921"></a>00921 <span class="comment">/*@=nullstate@*/</span> <a name="l00922"></a>00922 <span class="keywordflow">break</span>; <a name="l00923"></a>00923 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f5654350c4a233015b91be84a91e51bbb49">URL_IS_HTTPS</a>: <a name="l00924"></a>00924 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f569cec1f8f01bd18cbe16cef81830fd95f">URL_IS_HTTP</a>: <a name="l00925"></a>00925 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f5673c9c198188c069b467ce593d9413475">URL_IS_FTP</a>: <a name="l00926"></a>00926 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f5665ce47b498e38dfe851d350107b86cb0">URL_IS_DASH</a>: <a name="l00927"></a>00927 <span class="keywordflow">case</span> <a class="code" href="rpmurl_8h.html#3c0dd3c42784390f1b3102ededcf5f56e3410c399bbd830783bb877d1a55eaad">URL_IS_HKP</a>: <a name="l00928"></a>00928 <span class="keywordflow">default</span>: <a name="l00929"></a>00929 <span class="keywordflow">break</span>; <a name="l00930"></a>00930 } <a name="l00931"></a>00931 <a name="l00932"></a>00932 _exit(-1); <a name="l00933"></a>00933 <span class="comment">/*@notreached@*/</span> <a name="l00934"></a>00934 } <a name="l00935"></a>00935 <span class="comment">/*@=branchstate@*/</span> <a name="l00936"></a>00936 <a name="l00937"></a>00937 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#8f30ac4a445872588abad49c384b92e8">child</a> == (pid_t)-1) { <a name="l00938"></a>00938 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b3700d5dda1cbf0dff2519ef843d7b7bc">RPMERR_FORK</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"Couldn't fork %s: %s\n"</span>), sln, <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>)); <a name="l00939"></a>00939 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00940"></a>00940 <span class="keywordflow">goto</span> exit; <a name="l00941"></a>00941 } <a name="l00942"></a>00942 <a name="l00943"></a>00943 (void) <a class="code" href="psm_8c.html#f109fe7b9bc61d91b2b2ba44dc40b96e">psmWait</a>(psm); <a name="l00944"></a>00944 <a name="l00945"></a>00945 <span class="comment">/* XXX filter order dependent multilib "other" arch helper error. */</span> <a name="l00946"></a>00946 <span class="keywordflow">if</span> (!(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a> >= 0 && !strcmp(argv[0], <span class="stringliteral">"/usr/sbin/glibc_post_upgrade"</span>) && WEXITSTATUS(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>) == 110)) { <a name="l00947"></a>00947 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a> < 0) { <a name="l00948"></a>00948 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55ba80d737677b15284f66912737f36d469">RPMERR_SCRIPT</a>, <a name="l00949"></a>00949 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s(%s-%s-%s.%s) scriptlet failed, waitpid(%d) rc %d: %s\n"</span>), <a name="l00950"></a>00950 sln, n, v, r, a, psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#8f30ac4a445872588abad49c384b92e8">child</a>, psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a>, <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>)); <a name="l00951"></a>00951 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00952"></a>00952 } <span class="keywordflow">else</span> <a name="l00953"></a>00953 <span class="keywordflow">if</span> (!WIFEXITED(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>) || WEXITSTATUS(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>)) { <a name="l00954"></a>00954 <span class="keywordflow">if</span> (WIFSIGNALED(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>)) { <a name="l00955"></a>00955 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55ba80d737677b15284f66912737f36d469">RPMERR_SCRIPT</a>, <a name="l00956"></a>00956 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s(%s-%s-%s.%s) scriptlet failed, signal %d\n"</span>), <a name="l00957"></a>00957 sln, n, v, r, a, WTERMSIG(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>)); <a name="l00958"></a>00958 } <span class="keywordflow">else</span> { <a name="l00959"></a>00959 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55ba80d737677b15284f66912737f36d469">RPMERR_SCRIPT</a>, <a name="l00960"></a>00960 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s(%s-%s-%s.%s) scriptlet failed, exit status %d\n"</span>), <a name="l00961"></a>00961 sln, n, v, r, a, WEXITSTATUS(psm-><a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>)); <a name="l00962"></a>00962 } <a name="l00963"></a>00963 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l00964"></a>00964 } <a name="l00965"></a>00965 } <a name="l00966"></a>00966 <a name="l00967"></a>00967 exit: <a name="l00968"></a>00968 <span class="keywordflow">if</span> (rc != <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>) { <a name="l00969"></a>00969 <a class="code" href="psm_8c.html#3e90e7f51d3446e1aa298fcd2d1c11db">scriptErrNotify</a>(psm, rc); <a name="l00970"></a>00970 } <a name="l00971"></a>00971 <a name="l00972"></a>00972 <span class="keywordflow">if</span> (freePrefixes) prefixes = hfd(prefixes, ipt); <a name="l00973"></a>00973 <a name="l00974"></a>00974 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(out); <span class="comment">/* XXX dup'd STDOUT_FILENO */</span> <a name="l00975"></a>00975 <a name="l00976"></a>00976 <span class="comment">/*@-branchstate@*/</span> <a name="l00977"></a>00977 <span class="keywordflow">if</span> (script) { <a name="l00978"></a>00978 <span class="keywordflow">if</span> (!<a class="code" href="rpmmessages_8h.html#5c744d9a5bb5b5fc109a329e0d30c160">rpmIsDebug</a>()) <a name="l00979"></a>00979 xx = unlink(fn); <a name="l00980"></a>00980 fn = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fn); <a name="l00981"></a>00981 } <a name="l00982"></a>00982 <span class="comment">/*@=branchstate@*/</span> <a name="l00983"></a>00983 <a name="l00984"></a>00984 <span class="keywordflow">return</span> rc; <a name="l00985"></a>00985 } <a name="l00986"></a>00986 <a name="l00992"></a><a class="code" href="psm_8c.html#9de1f2da649cf43349935f1dc84292c1">00992</a> <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#9de1f2da649cf43349935f1dc84292c1">runInstScript</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm) <a name="l00993"></a>00993 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/</span> <a name="l00994"></a>00994 <span class="comment">/*@modifies psm, rpmGlobalMacroContext, fileSystem, internalState @*/</span> <a name="l00995"></a>00995 { <a name="l00996"></a>00996 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l00997"></a>00997 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = fi->hge; <a name="l00998"></a>00998 <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi->hfd ? fi->hfd : <a class="code" href="group__header.html#ge7835c5c4504bf89e169fb7d34c6b521">headerFreeData</a>); <a name="l00999"></a>00999 <span class="keywordtype">void</span> ** progArgv; <a name="l01000"></a>01000 <span class="keywordtype">int</span> progArgc; <a name="l01001"></a>01001 <span class="keyword">const</span> <span class="keywordtype">char</span> ** <a class="code" href="compress_8c.html#b233d58a2d9af13ae09ea8fd82556856">argv</a>; <a name="l01002"></a>01002 <a class="code" href="group__header.html#ge3bf8d35e51bc1fbaa1a2a5acdceb79e">rpmTagType</a> ptt, stt; <a name="l01003"></a>01003 <span class="keyword">const</span> <span class="keywordtype">char</span> * script; <a name="l01004"></a>01004 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l01005"></a>01005 <span class="keywordtype">int</span> xx; <a name="l01006"></a>01006 <a name="l01007"></a>01007 <span class="comment">/*</span> <a name="l01008"></a>01008 <span class="comment"> * headerGetEntry() sets the data pointer to NULL if the entry does</span> <a name="l01009"></a>01009 <span class="comment"> * not exist.</span> <a name="l01010"></a>01010 <span class="comment"> */</span> <a name="l01011"></a>01011 xx = hge(fi->h, psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>, &stt, (<span class="keywordtype">void</span> **) &script, NULL); <a name="l01012"></a>01012 xx = hge(fi->h, psm-><a class="code" href="structrpmpsm__s.html#395e28ea3a310dbef04bb67230f71674">progTag</a>, &ptt, (<span class="keywordtype">void</span> **) &progArgv, &progArgc); <a name="l01013"></a>01013 <span class="keywordflow">if</span> (progArgv == NULL && script == NULL) <a name="l01014"></a>01014 <span class="keywordflow">goto</span> exit; <a name="l01015"></a>01015 <a name="l01016"></a>01016 <span class="comment">/*@-branchstate@*/</span> <a name="l01017"></a>01017 <span class="keywordflow">if</span> (progArgv && ptt == <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed34cdc667815b86f8741fbf06ce4725eb">RPM_STRING_TYPE</a>) { <a name="l01018"></a>01018 argv = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(<span class="keyword">sizeof</span>(*argv)); <a name="l01019"></a>01019 *argv = (<span class="keyword">const</span> <span class="keywordtype">char</span> *) progArgv; <a name="l01020"></a>01020 } <span class="keywordflow">else</span> { <a name="l01021"></a>01021 argv = (<span class="keyword">const</span> <span class="keywordtype">char</span> **) progArgv; <a name="l01022"></a>01022 } <a name="l01023"></a>01023 <span class="comment">/*@=branchstate@*/</span> <a name="l01024"></a>01024 <a name="l01025"></a>01025 <span class="keywordflow">if</span> (fi->h != NULL) <span class="comment">/* XXX can't happen */</span> <a name="l01026"></a>01026 rc = <a class="code" href="psm_8c.html#e2f77b7d3865469ef4f1a7a47a6638b8">runScript</a>(psm, fi->h, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), progArgc, argv, <a name="l01027"></a>01027 script, psm-><a class="code" href="structrpmpsm__s.html#9e1e7ad4a9921f6c45d9b28f13fffad5">scriptArg</a>, -1); <a name="l01028"></a>01028 <a name="l01029"></a>01029 exit: <a name="l01030"></a>01030 progArgv = hfd(progArgv, ptt); <a name="l01031"></a>01031 script = hfd(script, stt); <a name="l01032"></a>01032 <span class="keywordflow">return</span> rc; <a name="l01033"></a>01033 } <a name="l01034"></a>01034 <a name="l01045"></a><a class="code" href="psm_8c.html#80237c275910bdbd0af82619d1aaeb9f">01045</a> <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#80237c275910bdbd0af82619d1aaeb9f">handleOneTrigger</a>(<span class="keyword">const</span> <a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <a name="l01046"></a>01046 <a class="code" href="structheaderToken__s.html">Header</a> sourceH, <a class="code" href="structheaderToken__s.html">Header</a> triggeredH, <a name="l01047"></a>01047 <span class="keywordtype">int</span> arg2, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * triggersAlreadyRun) <a name="l01048"></a>01048 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState@*/</span> <a name="l01049"></a>01049 <span class="comment">/*@modifies psm, sourceH, triggeredH, *triggersAlreadyRun,</span> <a name="l01050"></a>01050 <span class="comment"> rpmGlobalMacroContext, fileSystem, internalState @*/</span> <a name="l01051"></a>01051 { <a name="l01052"></a>01052 <span class="keywordtype">int</span> scareMem = 1; <a name="l01053"></a>01053 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l01054"></a>01054 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l01055"></a>01055 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = fi->hge; <a name="l01056"></a>01056 <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi->hfd ? fi->hfd : <a class="code" href="group__header.html#ge7835c5c4504bf89e169fb7d34c6b521">headerFreeData</a>); <a name="l01057"></a>01057 <a class="code" href="rpmlib_8h.html#8ee68aea070136e6b8c844995ff0c5a8">rpmds</a> trigger = NULL; <a name="l01058"></a>01058 <span class="keyword">const</span> <span class="keywordtype">char</span> ** triggerScripts; <a name="l01059"></a>01059 <span class="keyword">const</span> <span class="keywordtype">char</span> ** triggerProgs; <a name="l01060"></a>01060 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> * triggerIndices; <a name="l01061"></a>01061 <span class="keyword">const</span> <span class="keywordtype">char</span> * sourceName; <a name="l01062"></a>01062 <span class="keyword">const</span> <span class="keywordtype">char</span> * triggerName; <a name="l01063"></a>01063 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l01064"></a>01064 <span class="keywordtype">int</span> xx; <a name="l01065"></a>01065 <span class="keywordtype">int</span> i; <a name="l01066"></a>01066 <a name="l01067"></a>01067 xx = <a class="code" href="group__header.html#g50514667473d848fc998df421ca3ce12">headerNVR</a>(sourceH, &sourceName, NULL, NULL); <a name="l01068"></a>01068 xx = <a class="code" href="group__header.html#g50514667473d848fc998df421ca3ce12">headerNVR</a>(triggeredH, &triggerName, NULL, NULL); <a name="l01069"></a>01069 <a name="l01070"></a>01070 trigger = <a class="code" href="rpmds_8c.html#c510049aca4890a06fc7b1e53c8caf5c">rpmdsInit</a>(<a class="code" href="rpmds_8c.html#01b8da9bcbce25c3021bf5c0608e7c02">rpmdsNew</a>(triggeredH, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2a0e9d0f76ad91d779cbbb219e4227c5">RPMTAG_TRIGGERNAME</a>, scareMem)); <a name="l01071"></a>01071 <span class="keywordflow">if</span> (trigger == NULL) <a name="l01072"></a>01072 <span class="keywordflow">return</span> rc; <a name="l01073"></a>01073 <a name="l01074"></a>01074 (void) <a class="code" href="rpmds_8c.html#fa65c538d606aaa75070ca03555d7ed4">rpmdsSetNoPromote</a>(trigger, 1); <a name="l01075"></a>01075 <a name="l01076"></a>01076 <span class="keywordflow">while</span> ((i = <a class="code" href="rpmds_8c.html#d30ef432a3ddff05ba2c5e4b9c9465a2">rpmdsNext</a>(trigger)) >= 0) { <a name="l01077"></a>01077 <a class="code" href="group__header.html#ge3bf8d35e51bc1fbaa1a2a5acdceb79e">rpmTagType</a> tit, tst, tpt; <a name="l01078"></a>01078 <span class="keyword">const</span> <span class="keywordtype">char</span> * Name; <a name="l01079"></a>01079 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> Flags = <a class="code" href="rpmds_8c.html#cd3d85fc2c8ce656c818603f444c5ab6">rpmdsFlags</a>(trigger); <a name="l01080"></a>01080 <a name="l01081"></a>01081 <span class="keywordflow">if</span> ((Name = <a class="code" href="rpmds_8c.html#4ec909c373d002650eea296020738fb9">rpmdsN</a>(trigger)) == NULL) <a name="l01082"></a>01082 <span class="keywordflow">continue</span>; <span class="comment">/* XXX can't happen */</span> <a name="l01083"></a>01083 <a name="l01084"></a>01084 <span class="keywordflow">if</span> (strcmp(Name, sourceName)) <a name="l01085"></a>01085 <span class="keywordflow">continue</span>; <a name="l01086"></a>01086 <span class="keywordflow">if</span> (!(Flags & psm-><a class="code" href="structrpmpsm__s.html#485902a864333d1e0d4e09e9ca9bd8c7">sense</a>)) <a name="l01087"></a>01087 <span class="keywordflow">continue</span>; <a name="l01088"></a>01088 <a name="l01089"></a>01089 <span class="comment">/*</span> <a name="l01090"></a>01090 <span class="comment"> * XXX Trigger on any provided dependency, not just the package NEVR.</span> <a name="l01091"></a>01091 <span class="comment"> */</span> <a name="l01092"></a>01092 <span class="keywordflow">if</span> (!<a class="code" href="rpmds_8c.html#ca6decba06eb1219b1f4ec4ef3f24376">rpmdsAnyMatchesDep</a>(sourceH, trigger, 1)) <a name="l01093"></a>01093 <span class="keywordflow">continue</span>; <a name="l01094"></a>01094 <a name="l01095"></a>01095 <span class="keywordflow">if</span> (!( hge(triggeredH, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b262569abd4cb1b37cfded2646c66758c">RPMTAG_TRIGGERINDEX</a>, &tit, <a name="l01096"></a>01096 (<span class="keywordtype">void</span> **) &triggerIndices, NULL) && <a name="l01097"></a>01097 hge(triggeredH, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b1fe18964738003cafe10d95640a800a8">RPMTAG_TRIGGERSCRIPTS</a>, &tst, <a name="l01098"></a>01098 (<span class="keywordtype">void</span> **) &triggerScripts, NULL) && <a name="l01099"></a>01099 hge(triggeredH, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2e4278f900fe835410b559f730504cbf">RPMTAG_TRIGGERSCRIPTPROG</a>, &tpt, <a name="l01100"></a>01100 (<span class="keywordtype">void</span> **) &triggerProgs, NULL)) <a name="l01101"></a>01101 ) <a name="l01102"></a>01102 <span class="keywordflow">continue</span>; <a name="l01103"></a>01103 <a name="l01104"></a>01104 { <span class="keywordtype">int</span> arg1; <a name="l01105"></a>01105 <span class="keywordtype">int</span> index; <a name="l01106"></a>01106 <a name="l01107"></a>01107 arg1 = <a class="code" href="group__rpmdb.html#g411b4d901d2f4953f9674c104973d4f8">rpmdbCountPackages</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), triggerName); <a name="l01108"></a>01108 <span class="keywordflow">if</span> (arg1 < 0) { <a name="l01109"></a>01109 <span class="comment">/* XXX W2DO? fails as "execution of script failed" */</span> <a name="l01110"></a>01110 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01111"></a>01111 } <span class="keywordflow">else</span> { <a name="l01112"></a>01112 arg1 += psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a>; <a name="l01113"></a>01113 index = triggerIndices[i]; <a name="l01114"></a>01114 <span class="keywordflow">if</span> (triggersAlreadyRun == NULL || <a name="l01115"></a>01115 triggersAlreadyRun[index] == 0) <a name="l01116"></a>01116 { <a name="l01117"></a>01117 rc = <a class="code" href="psm_8c.html#e2f77b7d3865469ef4f1a7a47a6638b8">runScript</a>(psm, triggeredH, <span class="stringliteral">"%trigger"</span>, 1, <a name="l01118"></a>01118 triggerProgs + index, triggerScripts[index], <a name="l01119"></a>01119 arg1, arg2); <a name="l01120"></a>01120 <span class="keywordflow">if</span> (triggersAlreadyRun != NULL) <a name="l01121"></a>01121 triggersAlreadyRun[index] = 1; <a name="l01122"></a>01122 } <a name="l01123"></a>01123 } <a name="l01124"></a>01124 } <a name="l01125"></a>01125 <a name="l01126"></a>01126 triggerIndices = hfd(triggerIndices, tit); <a name="l01127"></a>01127 triggerScripts = hfd(triggerScripts, tst); <a name="l01128"></a>01128 triggerProgs = hfd(triggerProgs, tpt); <a name="l01129"></a>01129 <a name="l01130"></a>01130 <span class="comment">/*</span> <a name="l01131"></a>01131 <span class="comment"> * Each target/source header pair can only result in a single</span> <a name="l01132"></a>01132 <span class="comment"> * script being run.</span> <a name="l01133"></a>01133 <span class="comment"> */</span> <a name="l01134"></a>01134 <span class="keywordflow">break</span>; <a name="l01135"></a>01135 } <a name="l01136"></a>01136 <a name="l01137"></a>01137 trigger = <a class="code" href="rpmds_8c.html#81e41176cb032311da92de634bff8183">rpmdsFree</a>(trigger); <a name="l01138"></a>01138 <a name="l01139"></a>01139 <span class="keywordflow">return</span> rc; <a name="l01140"></a>01140 } <a name="l01141"></a>01141 <a name="l01147"></a><a class="code" href="psm_8c.html#7de58142a72a3ddf82cfbde1d5353d7d">01147</a> <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#7de58142a72a3ddf82cfbde1d5353d7d">runTriggers</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm) <a name="l01148"></a>01148 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno,</span> <a name="l01149"></a>01149 <span class="comment"> fileSystem, internalState @*/</span> <a name="l01150"></a>01150 <span class="comment">/*@modifies psm, rpmGlobalMacroContext,</span> <a name="l01151"></a>01151 <span class="comment"> fileSystem, internalState @*/</span> <a name="l01152"></a>01152 { <a name="l01153"></a>01153 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l01154"></a>01154 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l01155"></a>01155 <span class="keywordtype">int</span> numPackage = -1; <a name="l01156"></a>01156 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l01157"></a>01157 <span class="keyword">const</span> <span class="keywordtype">char</span> * N = NULL; <a name="l01158"></a>01158 <a name="l01159"></a>01159 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>) <span class="comment">/* XXX can't happen */</span> <a name="l01160"></a>01160 N = <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>); <a name="l01161"></a>01161 <span class="comment">/* XXX: Might need to adjust instance counts four autorollback. */</span> <a name="l01162"></a>01162 <span class="keywordflow">if</span> (N) <span class="comment">/* XXX can't happen */</span> <a name="l01163"></a>01163 numPackage = <a class="code" href="group__rpmdb.html#g411b4d901d2f4953f9674c104973d4f8">rpmdbCountPackages</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), N) <a name="l01164"></a>01164 + psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a>; <a name="l01165"></a>01165 <span class="keywordflow">if</span> (numPackage < 0) <a name="l01166"></a>01166 <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e80163a651497a21974d2993a25d9b60208d">RPMRC_NOTFOUND</a>; <a name="l01167"></a>01167 <a name="l01168"></a>01168 <span class="keywordflow">if</span> (fi != NULL && fi->h != NULL) <span class="comment">/* XXX can't happen */</span> <a name="l01169"></a>01169 { <a class="code" href="structheaderToken__s.html">Header</a> triggeredH; <a name="l01170"></a>01170 <a class="code" href="struct__rpmdbMatchIterator.html">rpmdbMatchIterator</a> <a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>; <a name="l01171"></a>01171 <span class="keywordtype">int</span> <a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a>; <a name="l01172"></a>01172 <a name="l01173"></a>01173 psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = 0; <a name="l01174"></a>01174 <a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmts.html#g16ebec8beff205af120f86b2b6c7e25d">rpmtsInitIterator</a>(ts, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2a0e9d0f76ad91d779cbbb219e4227c5">RPMTAG_TRIGGERNAME</a>, N, 0); <a name="l01175"></a>01175 <span class="keywordflow">while</span>((triggeredH = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>)) != NULL) <a name="l01176"></a>01176 rc |= <a class="code" href="psm_8c.html#80237c275910bdbd0af82619d1aaeb9f">handleOneTrigger</a>(psm, fi->h, triggeredH, numPackage, NULL); <a name="l01177"></a>01177 <a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>); <a name="l01178"></a>01178 psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = countCorrection; <a name="l01179"></a>01179 } <a name="l01180"></a>01180 <a name="l01181"></a>01181 <span class="keywordflow">return</span> rc; <a name="l01182"></a>01182 } <a name="l01183"></a>01183 <a name="l01189"></a><a class="code" href="psm_8c.html#26f2ebfa7d7fb2d60d05f24e43896b90">01189</a> <span class="keyword">static</span> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#26f2ebfa7d7fb2d60d05f24e43896b90">runImmedTriggers</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm) <a name="l01190"></a>01190 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno,</span> <a name="l01191"></a>01191 <span class="comment"> fileSystem, internalState @*/</span> <a name="l01192"></a>01192 <span class="comment">/*@modifies psm, rpmGlobalMacroContext,</span> <a name="l01193"></a>01193 <span class="comment"> fileSystem, internalState @*/</span> <a name="l01194"></a>01194 { <a name="l01195"></a>01195 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l01196"></a>01196 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l01197"></a>01197 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = fi->hge; <a name="l01198"></a>01198 <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi->hfd ? fi->hfd : <a class="code" href="group__header.html#ge7835c5c4504bf89e169fb7d34c6b521">headerFreeData</a>); <a name="l01199"></a>01199 <span class="keyword">const</span> <span class="keywordtype">char</span> ** triggerNames; <a name="l01200"></a>01200 <span class="keywordtype">int</span> numTriggers; <a name="l01201"></a>01201 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> * triggerIndices; <a name="l01202"></a>01202 <a class="code" href="group__header.html#ge3bf8d35e51bc1fbaa1a2a5acdceb79e">rpmTagType</a> tnt, tit; <a name="l01203"></a>01203 <span class="keywordtype">int</span> numTriggerIndices; <a name="l01204"></a>01204 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * triggersRun; <a name="l01205"></a>01205 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l01206"></a>01206 <a name="l01207"></a>01207 <span class="keywordflow">if</span> (fi->h == NULL) <span class="keywordflow">return</span> rc; <span class="comment">/* XXX can't happen */</span> <a name="l01208"></a>01208 <a name="l01209"></a>01209 <span class="keywordflow">if</span> (!( hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2a0e9d0f76ad91d779cbbb219e4227c5">RPMTAG_TRIGGERNAME</a>, &tnt, <a name="l01210"></a>01210 (<span class="keywordtype">void</span> **) &triggerNames, &numTriggers) && <a name="l01211"></a>01211 hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b262569abd4cb1b37cfded2646c66758c">RPMTAG_TRIGGERINDEX</a>, &tit, <a name="l01212"></a>01212 (<span class="keywordtype">void</span> **) &triggerIndices, &numTriggerIndices)) <a name="l01213"></a>01213 ) <a name="l01214"></a>01214 <span class="keywordflow">return</span> rc; <a name="l01215"></a>01215 <a name="l01216"></a>01216 triggersRun = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(<span class="keyword">sizeof</span>(*triggersRun) * numTriggerIndices); <a name="l01217"></a>01217 memset(triggersRun, 0, <span class="keyword">sizeof</span>(*triggersRun) * numTriggerIndices); <a name="l01218"></a>01218 <a name="l01219"></a>01219 { <a class="code" href="structheaderToken__s.html">Header</a> sourceH = NULL; <a name="l01220"></a>01220 <span class="keywordtype">int</span> i; <a name="l01221"></a>01221 <a name="l01222"></a>01222 <span class="keywordflow">for</span> (i = 0; i < numTriggers; i++) { <a name="l01223"></a>01223 <a class="code" href="struct__rpmdbMatchIterator.html">rpmdbMatchIterator</a> <a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>; <a name="l01224"></a>01224 <a name="l01225"></a>01225 <span class="keywordflow">if</span> (triggersRun[triggerIndices[i]] != 0) <span class="keywordflow">continue</span>; <a name="l01226"></a>01226 <a name="l01227"></a>01227 <a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmts.html#g16ebec8beff205af120f86b2b6c7e25d">rpmtsInitIterator</a>(ts, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b5a4bfcac106d028f0908b8991e2c5b87">RPMTAG_NAME</a>, triggerNames[i], 0); <a name="l01228"></a>01228 <a name="l01229"></a>01229 <span class="keywordflow">while</span>((sourceH = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>)) != NULL) { <a name="l01230"></a>01230 rc |= <a class="code" href="psm_8c.html#80237c275910bdbd0af82619d1aaeb9f">handleOneTrigger</a>(psm, sourceH, fi->h, <a name="l01231"></a>01231 <a class="code" href="group__rpmdb.html#g0b2fac12a598a46a3f0780fab05839a0">rpmdbGetIteratorCount</a>(<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>), <a name="l01232"></a>01232 triggersRun); <a name="l01233"></a>01233 } <a name="l01234"></a>01234 <a name="l01235"></a>01235 <a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>); <a name="l01236"></a>01236 } <a name="l01237"></a>01237 } <a name="l01238"></a>01238 triggerIndices = hfd(triggerIndices, tit); <a name="l01239"></a>01239 triggerNames = hfd(triggerNames, tnt); <a name="l01240"></a>01240 <span class="keywordflow">return</span> rc; <a name="l01241"></a>01241 } <a name="l01242"></a>01242 <a name="l01243"></a><a class="code" href="psm_8c.html#124ab96768029486eaa8aebd819c65c0">01243</a> <span class="comment">/*@observer@*/</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> <a class="code" href="psm_8c.html#124ab96768029486eaa8aebd819c65c0">pkgStageString</a>(<a class="code" href="psm_8h.html#197380f575031a121930445f783ac262">pkgStage</a> a) <a name="l01244"></a>01244 <span class="comment">/*@*/</span> <a name="l01245"></a>01245 { <a name="l01246"></a>01246 <span class="keywordflow">switch</span>(a) { <a name="l01247"></a>01247 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75a92c20e8e77ed015efd0490d126a80a">PSM_UNKNOWN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"unknown"</span>; <a name="l01248"></a>01248 <a name="l01249"></a>01249 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>: <span class="keywordflow">return</span> <span class="stringliteral">" install"</span>; <a name="l01250"></a>01250 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a>: <span class="keywordflow">return</span> <span class="stringliteral">" erase"</span>; <a name="l01251"></a>01251 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f3dd14c2d7559bc4311cb595c271d402">PSM_PKGCOMMIT</a>: <span class="keywordflow">return</span> <span class="stringliteral">" commit"</span>; <a name="l01252"></a>01252 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"repackage"</span>; <a name="l01253"></a>01253 <a name="l01254"></a>01254 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7fc3e65ce3928b03b067c19bcc175d10c">PSM_INIT</a>: <span class="keywordflow">return</span> <span class="stringliteral">"init"</span>; <a name="l01255"></a>01255 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f3d01a8e44fea5579d09357559e96068">PSM_PRE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"pre"</span>; <a name="l01256"></a>01256 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d73e1f2f8f8acc28503282257f4f4f2214">PSM_PROCESS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"process"</span>; <a name="l01257"></a>01257 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74914e74f56c05b751af9208f7e97e84d">PSM_POST</a>: <span class="keywordflow">return</span> <span class="stringliteral">"post"</span>; <a name="l01258"></a>01258 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75d2e0d4cbe741e06a4931d9e44e7c7b5">PSM_UNDO</a>: <span class="keywordflow">return</span> <span class="stringliteral">"undo"</span>; <a name="l01259"></a>01259 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d76b3d26ccca6373c1fb1af31bdc931512">PSM_FINI</a>: <span class="keywordflow">return</span> <span class="stringliteral">"fini"</span>; <a name="l01260"></a>01260 <a name="l01261"></a>01261 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d742245f23de195cc384189e9415d6904b">PSM_CREATE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"create"</span>; <a name="l01262"></a>01262 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>: <span class="keywordflow">return</span> <span class="stringliteral">"notify"</span>; <a name="l01263"></a>01263 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7823d137ee860408f0c932f26ed124d8f">PSM_DESTROY</a>: <span class="keywordflow">return</span> <span class="stringliteral">"destroy"</span>; <a name="l01264"></a>01264 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ae370b68dcc218d464a774109a20cf13">PSM_COMMIT</a>: <span class="keywordflow">return</span> <span class="stringliteral">"commit"</span>; <a name="l01265"></a>01265 <a name="l01266"></a>01266 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f993b9676fa428a4012916f6e79a4cb9">PSM_CHROOT_IN</a>: <span class="keywordflow">return</span> <span class="stringliteral">"chrootin"</span>; <a name="l01267"></a>01267 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d723af579e4a8301026aeabc1ccbabe2f4">PSM_CHROOT_OUT</a>: <span class="keywordflow">return</span> <span class="stringliteral">"chrootout"</span>; <a name="l01268"></a>01268 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d72b47b48e07162140677ec64ab7e01b3d">PSM_SCRIPT</a>: <span class="keywordflow">return</span> <span class="stringliteral">"script"</span>; <a name="l01269"></a>01269 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d70b1528122057f7119cbb08ae287cf601">PSM_TRIGGERS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"triggers"</span>; <a name="l01270"></a>01270 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ef4e9b3642fd5a2ef0d6a553dc39c1c2">PSM_IMMED_TRIGGERS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"immedtriggers"</span>; <a name="l01271"></a>01271 <a name="l01272"></a>01272 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75663b12a4fdde3fa9e30f9919aa881a6">PSM_RPMIO_FLAGS</a>: <span class="keywordflow">return</span> <span class="stringliteral">"rpmioflags"</span>; <a name="l01273"></a>01273 <a name="l01274"></a>01274 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75bfc410902ed4c46f8a85ad5c04d7f32">PSM_RPMDB_LOAD</a>: <span class="keywordflow">return</span> <span class="stringliteral">"rpmdbload"</span>; <a name="l01275"></a>01275 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d71165155666a84c2b8aec935c2920baa1">PSM_RPMDB_ADD</a>: <span class="keywordflow">return</span> <span class="stringliteral">"rpmdbadd"</span>; <a name="l01276"></a>01276 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f7be35ae01ed37e6be9c2cf2a6bb7994">PSM_RPMDB_REMOVE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"rpmdbremove"</span>; <a name="l01277"></a>01277 <a name="l01278"></a>01278 <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"???"</span>; <a name="l01279"></a>01279 } <a name="l01280"></a>01280 <span class="comment">/*@noteached@*/</span> <a name="l01281"></a>01281 } <a name="l01282"></a>01282 <a name="l01283"></a><a class="code" href="psm_8h.html#b56181b94e2b753efda31349d6860316">01283</a> <a class="code" href="structrpmpsm__s.html">rpmpsm</a> <a class="code" href="psm_8c.html#b56181b94e2b753efda31349d6860316">XrpmpsmUnlink</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <span class="keyword">const</span> <span class="keywordtype">char</span> * msg, <span class="keyword">const</span> <span class="keywordtype">char</span> * fn, <span class="keywordtype">unsigned</span> ln) <a name="l01284"></a>01284 { <a name="l01285"></a>01285 <span class="keywordflow">if</span> (psm == NULL) <span class="keywordflow">return</span> NULL; <a name="l01286"></a>01286 <span class="comment">/*@-modfilesys@*/</span> <a name="l01287"></a>01287 <span class="keywordflow">if</span> (<a class="code" href="poptALL_8c.html#c1738d4bbd625c7bdd68a5721abce244">_psm_debug</a> && msg != NULL) <a name="l01288"></a>01288 fprintf(stderr, <span class="stringliteral">"--> psm %p -- %d %s at %s:%u\n"</span>, psm, psm-><a class="code" href="structrpmpsm__s.html#f1b440c33fcf9e7cee1e6f99930d8fbe">nrefs</a>, msg, fn, ln); <a name="l01289"></a>01289 <span class="comment">/*@=modfilesys@*/</span> <a name="l01290"></a>01290 psm-><a class="code" href="structrpmpsm__s.html#f1b440c33fcf9e7cee1e6f99930d8fbe">nrefs</a>--; <a name="l01291"></a>01291 <span class="keywordflow">return</span> NULL; <a name="l01292"></a>01292 } <a name="l01293"></a>01293 <a name="l01294"></a><a class="code" href="psm_8h.html#792452ad9f4c2c84b93a07a252a1bce5">01294</a> <a class="code" href="structrpmpsm__s.html">rpmpsm</a> <a class="code" href="psm_8c.html#792452ad9f4c2c84b93a07a252a1bce5">XrpmpsmLink</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <span class="keyword">const</span> <span class="keywordtype">char</span> * msg, <span class="keyword">const</span> <span class="keywordtype">char</span> * fn, <span class="keywordtype">unsigned</span> ln) <a name="l01295"></a>01295 { <a name="l01296"></a>01296 <span class="keywordflow">if</span> (psm == NULL) <span class="keywordflow">return</span> NULL; <a name="l01297"></a>01297 psm-><a class="code" href="structrpmpsm__s.html#f1b440c33fcf9e7cee1e6f99930d8fbe">nrefs</a>++; <a name="l01298"></a>01298 <a name="l01299"></a>01299 <span class="comment">/*@-modfilesys@*/</span> <a name="l01300"></a>01300 <span class="keywordflow">if</span> (<a class="code" href="poptALL_8c.html#c1738d4bbd625c7bdd68a5721abce244">_psm_debug</a> && msg != NULL) <a name="l01301"></a>01301 fprintf(stderr, <span class="stringliteral">"--> psm %p ++ %d %s at %s:%u\n"</span>, psm, psm-><a class="code" href="structrpmpsm__s.html#f1b440c33fcf9e7cee1e6f99930d8fbe">nrefs</a>, msg, fn, ln); <a name="l01302"></a>01302 <span class="comment">/*@=modfilesys@*/</span> <a name="l01303"></a>01303 <a name="l01304"></a>01304 <span class="comment">/*@-refcounttrans@*/</span> <span class="keywordflow">return</span> psm; <span class="comment">/*@=refcounttrans@*/</span> <a name="l01305"></a>01305 } <a name="l01306"></a>01306 <a name="l01307"></a><a class="code" href="psm_8h.html#4d96ca28210c18fb8d09f534ff5c9dee">01307</a> <a class="code" href="structrpmpsm__s.html">rpmpsm</a> <a class="code" href="psm_8c.html#4d96ca28210c18fb8d09f534ff5c9dee">rpmpsmFree</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm) <a name="l01308"></a>01308 { <a name="l01309"></a>01309 <span class="keyword">const</span> <span class="keywordtype">char</span> * msg = <span class="stringliteral">"rpmpsmFree"</span>; <a name="l01310"></a>01310 <span class="keywordflow">if</span> (psm == NULL) <a name="l01311"></a>01311 <span class="keywordflow">return</span> NULL; <a name="l01312"></a>01312 <a name="l01313"></a>01313 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#f1b440c33fcf9e7cee1e6f99930d8fbe">nrefs</a> > 1) <a name="l01314"></a>01314 <span class="keywordflow">return</span> <a class="code" href="psm_8h.html#ca9771f780d431706bd3d1afb95d015b">rpmpsmUnlink</a>(psm, msg); <a name="l01315"></a>01315 <a name="l01316"></a>01316 <span class="comment">/*@-nullstate@*/</span> <a name="l01317"></a>01317 psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = <a class="code" href="rpmfi_8c.html#a57c23e38b8fcd2028d94e0e5f22367e">rpmfiFree</a>(psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>); <a name="l01318"></a>01318 <span class="preprocessor">#ifdef NOTYET</span> <a name="l01319"></a>01319 <span class="preprocessor"></span> psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a> = <a class="code" href="rpmte_8c.html#811bf4f0099b3d587035b1cf27e11f3b">rpmteFree</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>); <a name="l01320"></a>01320 <span class="preprocessor">#else</span> <a name="l01321"></a>01321 <span class="preprocessor"></span> psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a> = NULL; <a name="l01322"></a>01322 <span class="preprocessor">#endif</span> <a name="l01323"></a>01323 <span class="preprocessor"></span><span class="comment">/*@-internalglobs@*/</span> <a name="l01324"></a>01324 psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a> = <a class="code" href="group__rpmts.html#g5315165a6e80a0c71dbe5eb07dd18f58">rpmtsFree</a>(psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>); <a name="l01325"></a>01325 <span class="comment">/*@=internalglobs@*/</span> <a name="l01326"></a>01326 <a name="l01327"></a>01327 (void) <a class="code" href="psm_8h.html#ca9771f780d431706bd3d1afb95d015b">rpmpsmUnlink</a>(psm, msg); <a name="l01328"></a>01328 <a name="l01329"></a>01329 <span class="comment">/*@-refcounttrans -usereleased@*/</span> <a name="l01330"></a>01330 <span class="comment">/*@-boundswrite@*/</span> <a name="l01331"></a>01331 memset(psm, 0, <span class="keyword">sizeof</span>(*psm)); <span class="comment">/* XXX trash and burn */</span> <a name="l01332"></a>01332 <span class="comment">/*@=boundswrite@*/</span> <a name="l01333"></a>01333 psm = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm); <a name="l01334"></a>01334 <span class="comment">/*@=refcounttrans =usereleased@*/</span> <a name="l01335"></a>01335 <a name="l01336"></a>01336 <span class="keywordflow">return</span> NULL; <a name="l01337"></a>01337 <span class="comment">/*@=nullstate@*/</span> <a name="l01338"></a>01338 } <a name="l01339"></a>01339 <a name="l01340"></a><a class="code" href="psm_8h.html#8b82600ba83fdbd1600acb8899504002">01340</a> <a class="code" href="structrpmpsm__s.html">rpmpsm</a> <a class="code" href="psm_8c.html#8b82600ba83fdbd1600acb8899504002">rpmpsmNew</a>(<a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts, <a class="code" href="rpmlib_8h.html#257d5c7d60e6ce00722ef73041b2c514">rpmte</a> <a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>, <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>) <a name="l01341"></a>01341 { <a name="l01342"></a>01342 <span class="keyword">const</span> <span class="keywordtype">char</span> * msg = <span class="stringliteral">"rpmpsmNew"</span>; <a name="l01343"></a>01343 <a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(1, <span class="keyword">sizeof</span>(*psm)); <a name="l01344"></a>01344 <a name="l01345"></a>01345 <span class="keywordflow">if</span> (ts) psm->ts = <a class="code" href="rpmts_8h.html#ff6f4de19581560802e96cdfc0d3d5fd">rpmtsLink</a>(ts, msg); <a name="l01346"></a>01346 <span class="preprocessor">#ifdef NOTYET</span> <a name="l01347"></a>01347 <span class="preprocessor"></span> <span class="keywordflow">if</span> (te) psm->te = rpmteLink(te, msg); <a name="l01348"></a>01348 <span class="preprocessor">#else</span> <a name="l01349"></a>01349 <span class="preprocessor"></span><span class="comment">/*@-assignexpose -temptrans @*/</span> <a name="l01350"></a>01350 <span class="keywordflow">if</span> (te) psm->te = te; <a name="l01351"></a>01351 <span class="comment">/*@=assignexpose =temptrans @*/</span> <a name="l01352"></a>01352 <span class="preprocessor">#endif</span> <a name="l01353"></a>01353 <span class="preprocessor"></span> <span class="keywordflow">if</span> (fi) psm->fi = <a class="code" href="rpmfi_8h.html#efe18edd3c3508fb257dfcf4db2776e5">rpmfiLink</a>(fi, msg); <a name="l01354"></a>01354 <a name="l01355"></a>01355 <span class="keywordflow">return</span> <a class="code" href="psm_8h.html#9fff147c15bf1056a50b9e70b12f1c97">rpmpsmLink</a>(psm, msg); <a name="l01356"></a>01356 } <a name="l01357"></a>01357 <a name="l01358"></a><a class="code" href="psm_8c.html#dc37438809eaa5bb5c95ebf28515f65e">01358</a> <span class="keyword">static</span> <span class="keywordtype">void</span> * <a class="code" href="psm_8c.html#dc37438809eaa5bb5c95ebf28515f65e">rpmpsmThread</a>(<span class="keywordtype">void</span> * arg) <a name="l01359"></a>01359 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/</span> <a name="l01360"></a>01360 <span class="comment">/*@modifies arg, rpmGlobalMacroContext, fileSystem, internalState @*/</span> <a name="l01361"></a>01361 { <a name="l01362"></a>01362 <a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm = arg; <a name="l01363"></a>01363 <span class="comment">/*@-unqualifiedtrans@*/</span> <a name="l01364"></a>01364 <span class="keywordflow">return</span> ((<span class="keywordtype">void</span> *) <a class="code" href="psm_8c.html#9d374cccd16cb6758c13e4bd68cfe6f4">rpmpsmStage</a>(psm, psm-><a class="code" href="structrpmpsm__s.html#ae362d1a7e92ef820f84eac6eb3a0845">nstage</a>)); <a name="l01365"></a>01365 <span class="comment">/*@=unqualifiedtrans@*/</span> <a name="l01366"></a>01366 } <a name="l01367"></a>01367 <a name="l01368"></a><a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">01368</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <a class="code" href="psm_8h.html#197380f575031a121930445f783ac262">pkgStage</a> <a class="code" href="structrpmpsm__s.html#ae362d1a7e92ef820f84eac6eb3a0845">nstage</a>) <a name="l01369"></a>01369 <span class="comment">/*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/</span> <a name="l01370"></a>01370 <span class="comment">/*@modifies psm, rpmGlobalMacroContext, fileSystem, internalState @*/</span> <a name="l01371"></a>01371 { <a name="l01372"></a>01372 psm-><a class="code" href="structrpmpsm__s.html#ae362d1a7e92ef820f84eac6eb3a0845">nstage</a> = nstage; <a name="l01373"></a>01373 <span class="keywordflow">if</span> (<a class="code" href="poptALL_8c.html#f1cd49d46dc236eb1faa6446bd86cf31">_psm_threads</a>) <a name="l01374"></a>01374 <span class="keywordflow">return</span> <a class="code" href="rpmsq_8c.html#0798a48224425503fe4cb455dd591b26">rpmsqJoin</a>( <a class="code" href="rpmsq_8c.html#a3aa2ebbfde186cb9c5687bdbeea4ad0">rpmsqThread</a>(<a class="code" href="psm_8c.html#dc37438809eaa5bb5c95ebf28515f65e">rpmpsmThread</a>, psm) ); <a name="l01375"></a>01375 <span class="keywordflow">return</span> <a class="code" href="psm_8c.html#9d374cccd16cb6758c13e4bd68cfe6f4">rpmpsmStage</a>(psm, psm-><a class="code" href="structrpmpsm__s.html#ae362d1a7e92ef820f84eac6eb3a0845">nstage</a>); <a name="l01376"></a>01376 } <a name="l01377"></a>01377 <a name="l01382"></a>01382 <span class="comment">/*@-bounds -nullpass@*/</span> <span class="comment">/* FIX: testing null annotation for fi->h */</span> <a name="l01383"></a><a class="code" href="psm_8h.html#9d374cccd16cb6758c13e4bd68cfe6f4">01383</a> <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> <a class="code" href="psm_8c.html#9d374cccd16cb6758c13e4bd68cfe6f4">rpmpsmStage</a>(<a class="code" href="structrpmpsm__s.html">rpmpsm</a> psm, <a class="code" href="psm_8h.html#197380f575031a121930445f783ac262">pkgStage</a> <a class="code" href="structrpmpsm__s.html#f5a6c4d062f04faf830d8ad6ca29a4f9">stage</a>) <a name="l01384"></a>01384 { <a name="l01385"></a>01385 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = psm-><a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>; <a name="l01386"></a>01386 <a class="code" href="header_8h.html#64e458b61bddf0b87a3701578aa7a428">uint_32</a> tscolor = <a class="code" href="rpmts_8c.html#b638b622295dd5eb80052b26c0364b56">rpmtsColor</a>(ts); <a name="l01387"></a>01387 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = psm-><a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>; <a name="l01388"></a>01388 <a class="code" href="rpmlib_8h.html#3597d5fe0ce8483347e69b67712661f8">HGE_t</a> hge = fi->hge; <a name="l01389"></a>01389 <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi->hfd ? fi->hfd : <a class="code" href="group__header.html#ge7835c5c4504bf89e169fb7d34c6b521">headerFreeData</a>); <a name="l01390"></a>01390 <a class="code" href="rpmlib_8h.html#06da857c39457bfb6ea9049643fdb706">rpmRC</a> rc = psm-><a class="code" href="structrpmpsm__s.html#dd1afe1b5e692bea6b9c855c3cc665ca">rc</a>; <a name="l01391"></a>01391 <span class="keywordtype">int</span> saveerrno; <a name="l01392"></a>01392 <span class="keywordtype">int</span> xx; <a name="l01393"></a>01393 <a name="l01394"></a>01394 <span class="comment">/*@-branchstate@*/</span> <a name="l01395"></a>01395 <span class="keywordflow">switch</span> (stage) { <a name="l01396"></a>01396 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75a92c20e8e77ed015efd0490d126a80a">PSM_UNKNOWN</a>: <a name="l01397"></a>01397 <span class="keywordflow">break</span>; <a name="l01398"></a>01398 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7fc3e65ce3928b03b067c19bcc175d10c">PSM_INIT</a>: <a name="l01399"></a>01399 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: %s has %d files, test = %d\n"</span>), <a name="l01400"></a>01400 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="rpmte_8c.html#53178d155e0da8f9a111d19bf4cdd279">rpmteNEVR</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>), <a name="l01401"></a>01401 <a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi), (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4ae4f59c5196be0e44be7e0f6cd4e8c6e">RPMTRANS_FLAG_TEST</a>)); <a name="l01402"></a>01402 <a name="l01403"></a>01403 <span class="comment">/*</span> <a name="l01404"></a>01404 <span class="comment"> * When we run scripts, we pass an argument which is the number of</span> <a name="l01405"></a>01405 <span class="comment"> * versions of this package that will be installed when we are</span> <a name="l01406"></a>01406 <span class="comment"> * finished.</span> <a name="l01407"></a>01407 <span class="comment"> */</span> <a name="l01408"></a>01408 psm-><a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a> = <a class="code" href="group__rpmdb.html#g411b4d901d2f4953f9674c104973d4f8">rpmdbCountPackages</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01409"></a>01409 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a> < 0) { <a name="l01410"></a>01410 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01411"></a>01411 <span class="keywordflow">break</span>; <a name="l01412"></a>01412 } <a name="l01413"></a>01413 <a name="l01414"></a>01414 <span class="comment">/* If we have a score then autorollback is enabled. If autorollback is</span> <a name="l01415"></a>01415 <span class="comment"> * enabled, and this is an autorollback transaction, then we may need to</span> <a name="l01416"></a>01416 <span class="comment"> * adjust the pkgs installed count.</span> <a name="l01417"></a>01417 <span class="comment"> *</span> <a name="l01418"></a>01418 <span class="comment"> * If all this is true, this adjustment should only be made if the PSM goal</span> <a name="l01419"></a>01419 <span class="comment"> * is an install. No need to make this adjustment on the erase</span> <a name="l01420"></a>01420 <span class="comment"> * component of the upgrade, or even more absurd to do this when doing a</span> <a name="l01421"></a>01421 <span class="comment"> * PKGSAVE.</span> <a name="l01422"></a>01422 <span class="comment"> */</span> <a name="l01423"></a>01423 <span class="keywordflow">if</span> (<a class="code" href="rpmts_8c.html#f8a6938a2063c15dd3cc7d78bbc0745f">rpmtsGetScore</a>(ts) != NULL && <a name="l01424"></a>01424 <a class="code" href="rpmts_8c.html#0ecab570b23d1701f7adebd4591ee145">rpmtsGetType</a>(ts) == <a class="code" href="rpmts_8h.html#df8d91cfe26784d7698c0a7ff9d7c5a4290f32ddd88d0da7de23261f4200fcd8">RPMTRANS_TYPE_AUTOROLLBACK</a> && <a name="l01425"></a>01425 (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> & ~(<a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>|<a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a>))) { <a name="l01426"></a>01426 <span class="comment">/* Get the score, if its not NULL, get the appropriate</span> <a name="l01427"></a>01427 <span class="comment"> * score entry.</span> <a name="l01428"></a>01428 <span class="comment"> */</span> <a name="l01429"></a>01429 rpmtsScore score = <a class="code" href="rpmts_8c.html#f8a6938a2063c15dd3cc7d78bbc0745f">rpmtsGetScore</a>(ts); <a name="l01430"></a>01430 <span class="keywordflow">if</span> (score != NULL) { <a name="l01431"></a>01431 <span class="comment">/* OK, we got a real score so lets get the appropriate</span> <a name="l01432"></a>01432 <span class="comment"> * score entry.</span> <a name="l01433"></a>01433 <span class="comment"> */</span> <a name="l01434"></a>01434 rpmtsScoreEntry se; <a name="l01435"></a>01435 se = <a class="code" href="rpmts_8c.html#769d1d67118a174f004cc9144ff19548">rpmtsScoreGetEntry</a>(score, <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01436"></a>01436 <a name="l01437"></a>01437 <span class="comment">/* IF the header for the install element has been installed,</span> <a name="l01438"></a>01438 <span class="comment"> * but the header for the erase element has not been erased,</span> <a name="l01439"></a>01439 <span class="comment"> * then decrement the instance count. This is because in an</span> <a name="l01440"></a>01440 <span class="comment"> * autorollback, if the header was added in the initial transaction</span> <a name="l01441"></a>01441 <span class="comment"> * then in the case of an upgrade the instance count will be</span> <a name="l01442"></a>01442 <span class="comment"> * 2 instead of one when re-installing the old package, and 3 when</span> <a name="l01443"></a>01443 <span class="comment"> * erasing the new package.</span> <a name="l01444"></a>01444 <span class="comment"> *</span> <a name="l01445"></a>01445 <span class="comment"> * Another wrinkle is we only want to make this adjustement</span> <a name="l01446"></a>01446 <span class="comment"> * if the thing we are rollback was an upgrade of package. A pure</span> <a name="l01447"></a>01447 <span class="comment"> * install or erase does not need the adjustment</span> <a name="l01448"></a>01448 <span class="comment"> */</span> <a name="l01449"></a>01449 <span class="keywordflow">if</span> (se && se->installed && <a name="l01450"></a>01450 !se->erased && <a name="l01451"></a>01451 (se->te_types & (<a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>|<a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e50589af969c1fa71419e740b4b3445039bf7e">TR_REMOVED</a>))) <a name="l01452"></a>01452 psm-><a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a>--; <a name="l01453"></a>01453 } <a name="l01454"></a>01454 } <a name="l01455"></a>01455 <a name="l01456"></a>01456 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>) { <a name="l01457"></a>01457 <span class="keywordtype">int</span> fc = <a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi); <a name="l01458"></a>01458 <a name="l01459"></a>01459 psm-><a class="code" href="structrpmpsm__s.html#9e1e7ad4a9921f6c45d9b28f13fffad5">scriptArg</a> = psm-><a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a> + 1; <a name="l01460"></a>01460 <a name="l01461"></a>01461 assert(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> == NULL); <a name="l01462"></a>01462 psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmts.html#g16ebec8beff205af120f86b2b6c7e25d">rpmtsInitIterator</a>(ts, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b5a4bfcac106d028f0908b8991e2c5b87">RPMTAG_NAME</a>, <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>), 0); <a name="l01463"></a>01463 xx = <a class="code" href="group__rpmdb.html#g8a31a5d7e8f728784d6cf52b620bf818">rpmdbSetIteratorRE</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b77097f97d901ca74c7d0c7c4fe0cbaf0">RPMTAG_EPOCH</a>, <a class="code" href="rpmdb_8h.html#3590a1de30d95ec5698863667d77d92e10f053aa0bcdf57007682c0e5a34f3c6">RPMMIRE_STRCMP</a>, <a name="l01464"></a>01464 <a class="code" href="rpmte_8c.html#50e5405478177af228e901e5b08071d0">rpmteE</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01465"></a>01465 xx = <a class="code" href="group__rpmdb.html#g8a31a5d7e8f728784d6cf52b620bf818">rpmdbSetIteratorRE</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b8aad6ff91681431f181573816de989d6">RPMTAG_VERSION</a>, <a class="code" href="rpmdb_8h.html#3590a1de30d95ec5698863667d77d92e10f053aa0bcdf57007682c0e5a34f3c6">RPMMIRE_STRCMP</a>, <a name="l01466"></a>01466 <a class="code" href="rpmte_8c.html#c626dbbcd84f01d05a8fe11029f41df4">rpmteV</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01467"></a>01467 xx = <a class="code" href="group__rpmdb.html#g8a31a5d7e8f728784d6cf52b620bf818">rpmdbSetIteratorRE</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bf73871610422923250e7d11409770662">RPMTAG_RELEASE</a>, <a class="code" href="rpmdb_8h.html#3590a1de30d95ec5698863667d77d92e10f053aa0bcdf57007682c0e5a34f3c6">RPMMIRE_STRCMP</a>, <a name="l01468"></a>01468 <a class="code" href="rpmte_8c.html#1180346f8292b25037d627ee08d58d76">rpmteR</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01469"></a>01469 <span class="keywordflow">if</span> (tscolor) { <a name="l01470"></a>01470 xx = <a class="code" href="group__rpmdb.html#g8a31a5d7e8f728784d6cf52b620bf818">rpmdbSetIteratorRE</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b99068a2c9123489dfc26242674d29ed6">RPMTAG_ARCH</a>, <a class="code" href="rpmdb_8h.html#3590a1de30d95ec5698863667d77d92e10f053aa0bcdf57007682c0e5a34f3c6">RPMMIRE_STRCMP</a>, <a name="l01471"></a>01471 <a class="code" href="rpmte_8c.html#c1fbdc937f7a661e77bce7cab54878c1">rpmteA</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01472"></a>01472 xx = <a class="code" href="group__rpmdb.html#g8a31a5d7e8f728784d6cf52b620bf818">rpmdbSetIteratorRE</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b48da8250ed9e9d2af23eaf6025e5c664">RPMTAG_OS</a>, <a class="code" href="rpmdb_8h.html#3590a1de30d95ec5698863667d77d92e10f053aa0bcdf57007682c0e5a34f3c6">RPMMIRE_STRCMP</a>, <a name="l01473"></a>01473 <a class="code" href="rpmte_8c.html#8775559fb9e18e792fc6014e8e079865">rpmteO</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01474"></a>01474 } <a name="l01475"></a>01475 <a name="l01476"></a>01476 <span class="keywordflow">while</span> ((psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>)) != NULL) { <a name="l01477"></a>01477 fi->record = <a class="code" href="group__rpmdb.html#g4fefb65ede996aa0edcc80286ca640d1">rpmdbGetIteratorOffset</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>); <a name="l01478"></a>01478 psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = NULL; <a name="l01479"></a>01479 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>; <a name="l01480"></a>01480 } <a name="l01481"></a>01481 psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>); <a name="l01482"></a>01482 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l01483"></a>01483 <a name="l01484"></a>01484 <span class="comment">/* XXX lazy alloc here may need to be done elsewhere. */</span> <a name="l01485"></a>01485 <span class="keywordflow">if</span> (fi->fstates == NULL && fc > 0) { <a name="l01486"></a>01486 fi->fstates = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(<span class="keyword">sizeof</span>(*fi->fstates) * fc); <a name="l01487"></a>01487 memset(fi->fstates, <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9fa1dd1d1795ed93ab04a89cb0bbb78b7d8">RPMFILE_STATE_NORMAL</a>, fc); <a name="l01488"></a>01488 } <a name="l01489"></a>01489 <a name="l01490"></a>01490 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f47ef9385f5ecbc714a81aa2fe228f5bca">RPMTRANS_FLAG_JUSTDB</a>) <span class="keywordflow">break</span>; <a name="l01491"></a>01491 <span class="keywordflow">if</span> (fc <= 0) <span class="keywordflow">break</span>; <a name="l01492"></a>01492 <a name="l01493"></a>01493 <span class="comment">/*</span> <a name="l01494"></a>01494 <span class="comment"> * Old format relocatable packages need the entire default</span> <a name="l01495"></a>01495 <span class="comment"> * prefix stripped to form the cpio list, while all other packages</span> <a name="l01496"></a>01496 <span class="comment"> * need the leading / stripped.</span> <a name="l01497"></a>01497 <span class="comment"> */</span> <a name="l01498"></a>01498 { <span class="keyword">const</span> <span class="keywordtype">char</span> * p; <a name="l01499"></a>01499 xx = hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bdfd62abbdbbb66a3260b55022d8bca2a">RPMTAG_DEFAULTPREFIX</a>, NULL, (<span class="keywordtype">void</span> **) &p, NULL); <a name="l01500"></a>01500 fi->striplen = (xx ? strlen(p) + 1 : 1); <a name="l01501"></a>01501 } <a name="l01502"></a>01502 fi->mapflags = <a name="l01503"></a>01503 <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd18471069c02aa3087b79a4d8b08e785d">CPIO_MAP_PATH</a> | <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddef02065506b7158e59001c2404d06628">CPIO_MAP_MODE</a> | <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddc943ea0fc6cf3a1ba2f0f01d57f22970">CPIO_MAP_UID</a> | <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd5e58caae4ba0cdfbef976abd18035efd">CPIO_MAP_GID</a> | (fi->mapflags & <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd4452394498549d7ea26bed87d628520c">CPIO_SBIT_CHECK</a>); <a name="l01504"></a>01504 <a name="l01505"></a>01505 <span class="keywordflow">if</span> (<a class="code" href="group__header.html#g0f25e23afbd3fb4799d579080fbb0942">headerIsEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b4fd37665b40d306e860e1ef01eca9e66">RPMTAG_ORIGBASENAMES</a>)) <a name="l01506"></a>01506 <a class="code" href="legacy_8c.html#b251121a92ea7400af24baf1dbfdb79a">rpmfiBuildFNames</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b4fd37665b40d306e860e1ef01eca9e66">RPMTAG_ORIGBASENAMES</a>, &fi->apath, NULL); <a name="l01507"></a>01507 <span class="keywordflow">else</span> <a name="l01508"></a>01508 <a class="code" href="legacy_8c.html#b251121a92ea7400af24baf1dbfdb79a">rpmfiBuildFNames</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bea94338039b3e67d9ece3f8c8875c7fc">RPMTAG_BASENAMES</a>, &fi->apath, NULL); <a name="l01509"></a>01509 <a name="l01510"></a>01510 <span class="keywordflow">if</span> (fi->fuser == NULL) <a name="l01511"></a>01511 xx = hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b5f365f44d1f93645ecb3740a8029b9b2">RPMTAG_FILEUSERNAME</a>, NULL, <a name="l01512"></a>01512 (<span class="keywordtype">void</span> **) &fi->fuser, NULL); <a name="l01513"></a>01513 <span class="keywordflow">if</span> (fi->fgroup == NULL) <a name="l01514"></a>01514 xx = hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb71c2ec302ffe1c46835859a71b9673d">RPMTAG_FILEGROUPNAME</a>, NULL, <a name="l01515"></a>01515 (<span class="keywordtype">void</span> **) &fi->fgroup, NULL); <a name="l01516"></a>01516 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l01517"></a>01517 } <a name="l01518"></a>01518 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a> || psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01519"></a>01519 psm-><a class="code" href="structrpmpsm__s.html#9e1e7ad4a9921f6c45d9b28f13fffad5">scriptArg</a> = psm-><a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a> - 1; <a name="l01520"></a>01520 <a name="l01521"></a>01521 <span class="comment">/* Retrieve installed header. */</span> <a name="l01522"></a>01522 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75bfc410902ed4c46f8a85ad5c04d7f32">PSM_RPMDB_LOAD</a>); <a name="l01523"></a>01523 <span class="keywordflow">if</span> (rc == <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>) <a name="l01524"></a>01524 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>) <a name="l01525"></a>01525 psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>->h = <a class="code" href="group__header.html#g4f07e8040ed3195e374a44919ffe97c2">headerLink</a>(fi->h); <a name="l01526"></a>01526 } <a name="l01527"></a>01527 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01528"></a>01528 <span class="comment">/* Open output package for writing. */</span> <a name="l01529"></a>01529 { <span class="keyword">const</span> <span class="keywordtype">char</span> * bfmt = <a class="code" href="macro_8c.html#5167ad7785835f120734aad8ea938cd9">rpmGetPath</a>(<span class="stringliteral">"%{_repackage_name_fmt}"</span>, NULL); <a name="l01530"></a>01530 <span class="keyword">const</span> <span class="keywordtype">char</span> * pkgbn = <a name="l01531"></a>01531 <a class="code" href="group__header.html#gaeec919c9a7c25163d6066137e85cba7">headerSprintf</a>(fi->h, bfmt, <a class="code" href="rpmlib_8h.html#8ecee0348aa330b50d6c0dc3dcc1101f">rpmTagTable</a>, <a class="code" href="formats_8c.html#046a50c5123c8a1d606afb0d8b37790d">rpmHeaderFormats</a>, NULL); <a name="l01532"></a>01532 <a name="l01533"></a>01533 bfmt = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(bfmt); <a name="l01534"></a>01534 psm-><a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a> = <a class="code" href="macro_8c.html#a00f38e60e61a7984bf1b08b7c440343">rpmGenPath</a>(<span class="stringliteral">"%{?_repackage_root}"</span>, <a name="l01535"></a>01535 <span class="stringliteral">"%{?_repackage_dir}"</span>, <a name="l01536"></a>01536 pkgbn); <a name="l01537"></a>01537 pkgbn = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(pkgbn); <a name="l01538"></a>01538 (void) <a class="code" href="rpmurl_8h.html#a53d11202529a428d1211701c7693c7b">urlPath</a>(psm-><a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a>, &psm-><a class="code" href="structrpmpsm__s.html#573071814b347959a850853fc4bcb9dd">pkgfn</a>); <a name="l01539"></a>01539 psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> = <a class="code" href="rpmio_8c.html#2eb611bd97d6d937d2296bcecd83ee31">Fopen</a>(psm-><a class="code" href="structrpmpsm__s.html#573071814b347959a850853fc4bcb9dd">pkgfn</a>, <span class="stringliteral">"w.ufdio"</span>); <a name="l01540"></a>01540 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> == NULL || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>)) { <a name="l01541"></a>01541 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01542"></a>01542 <span class="keywordflow">break</span>; <a name="l01543"></a>01543 } <a name="l01544"></a>01544 } <a name="l01545"></a>01545 } <a name="l01546"></a>01546 <span class="keywordflow">break</span>; <a name="l01547"></a>01547 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f3d01a8e44fea5579d09357559e96068">PSM_PRE</a>: <a name="l01548"></a>01548 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & RPMTRANS_FLAG_TEST) <span class="keywordflow">break</span>; <a name="l01549"></a>01549 <a name="l01550"></a>01550 <span class="comment">/* XXX insure that trigger index is opened before entering chroot. */</span> <a name="l01551"></a>01551 <span class="preprocessor">#ifdef NOTYET</span> <a name="l01552"></a>01552 <span class="preprocessor"></span> { <span class="keyword">static</span> <span class="keywordtype">int</span> oneshot = 0; <a name="l01553"></a>01553 <a class="code" href="struct__dbiIndex.html">dbiIndex</a> dbi; <a name="l01554"></a>01554 <span class="keywordflow">if</span> (!oneshot) { <a name="l01555"></a>01555 dbi = <a class="code" href="group__dbi.html#g4dd756d922e8573a0ffef0ef0da66b58">dbiOpen</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2a0e9d0f76ad91d779cbbb219e4227c5">RPMTAG_TRIGGERNAME</a>, 0); <a name="l01556"></a>01556 oneshot++; <a name="l01557"></a>01557 } <a name="l01558"></a>01558 } <a name="l01559"></a>01559 <span class="preprocessor">#endif</span> <a name="l01560"></a>01560 <span class="preprocessor"></span> <a name="l01561"></a>01561 <span class="comment">/* Change root directory if requested and not already done. */</span> <a name="l01562"></a>01562 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f993b9676fa428a4012916f6e79a4cb9">PSM_CHROOT_IN</a>); <a name="l01563"></a>01563 <a name="l01564"></a>01564 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>) { <a name="l01565"></a>01565 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb973ae4c44ec1f58f57377961d4e88d2">RPMTAG_PREIN</a>; <a name="l01566"></a>01566 psm-><a class="code" href="structrpmpsm__s.html#395e28ea3a310dbef04bb67230f71674">progTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb7d60a297aaac938aeb315483cacf27c">RPMTAG_PREINPROG</a>; <a name="l01567"></a>01567 psm-><a class="code" href="structrpmpsm__s.html#485902a864333d1e0d4e09e9ca9bd8c7">sense</a> = <a class="code" href="rpmlib_8h.html#e48bd9834f11ab42752bb6f0f54ae8a33de4607d8b2f2d6129e8fadbfbc47e0d">RPMSENSE_TRIGGERPREIN</a>; <a name="l01568"></a>01568 psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = 0; <span class="comment">/* XXX is this correct?!? */</span> <a name="l01569"></a>01569 <a name="l01570"></a>01570 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4477e311c244378d4fb3140093bb07488">RPMTRANS_FLAG_NOTRIGGERPREIN</a>)) { <a name="l01571"></a>01571 <a name="l01572"></a>01572 <span class="comment">/* Run triggers in other package(s) this package sets off. */</span> <a name="l01573"></a>01573 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d70b1528122057f7119cbb08ae287cf601">PSM_TRIGGERS</a>); <a name="l01574"></a>01574 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01575"></a>01575 <a name="l01576"></a>01576 <span class="comment">/* Run triggers in this package other package(s) set off. */</span> <a name="l01577"></a>01577 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ef4e9b3642fd5a2ef0d6a553dc39c1c2">PSM_IMMED_TRIGGERS</a>); <a name="l01578"></a>01578 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01579"></a>01579 } <a name="l01580"></a>01580 <a name="l01581"></a>01581 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f472ce0ed26bcce200c4f0bde9a0727d16">RPMTRANS_FLAG_NOPRE</a>)) { <a name="l01582"></a>01582 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d72b47b48e07162140677ec64ab7e01b3d">PSM_SCRIPT</a>); <a name="l01583"></a>01583 <span class="keywordflow">if</span> (rc != <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>) { <a name="l01584"></a>01584 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55ba80d737677b15284f66912737f36d469">RPMERR_SCRIPT</a>, <a name="l01585"></a>01585 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s: %s scriptlet failed (%d), skipping %s\n"</span>), <a name="l01586"></a>01586 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), rc, <a name="l01587"></a>01587 <a class="code" href="rpmte_8c.html#53178d155e0da8f9a111d19bf4cdd279">rpmteNEVR</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l01588"></a>01588 <span class="keywordflow">break</span>; <a name="l01589"></a>01589 } <a name="l01590"></a>01590 } <a name="l01591"></a>01591 } <a name="l01592"></a>01592 <a name="l01593"></a>01593 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a>) { <a name="l01594"></a>01594 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b7e8404eedc1a985e64340e25c2f74615">RPMTAG_PREUN</a>; <a name="l01595"></a>01595 psm-><a class="code" href="structrpmpsm__s.html#395e28ea3a310dbef04bb67230f71674">progTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b18f38e5c9effa3ec5f48d54285a43e69">RPMTAG_PREUNPROG</a>; <a name="l01596"></a>01596 psm-><a class="code" href="structrpmpsm__s.html#485902a864333d1e0d4e09e9ca9bd8c7">sense</a> = <a class="code" href="rpmlib_8h.html#e48bd9834f11ab42752bb6f0f54ae8a347685192ffb149f0bd06046b7a17b090">RPMSENSE_TRIGGERUN</a>; <a name="l01597"></a>01597 psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = -1; <a name="l01598"></a>01598 <a name="l01599"></a>01599 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f48393952989a1c0b82cc56d99bbdf3301">RPMTRANS_FLAG_NOTRIGGERUN</a>)) { <a name="l01600"></a>01600 <span class="comment">/* Run triggers in this package other package(s) set off. */</span> <a name="l01601"></a>01601 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ef4e9b3642fd5a2ef0d6a553dc39c1c2">PSM_IMMED_TRIGGERS</a>); <a name="l01602"></a>01602 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01603"></a>01603 <a name="l01604"></a>01604 <span class="comment">/* Run triggers in other package(s) this package sets off. */</span> <a name="l01605"></a>01605 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d70b1528122057f7119cbb08ae287cf601">PSM_TRIGGERS</a>); <a name="l01606"></a>01606 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01607"></a>01607 } <a name="l01608"></a>01608 <a name="l01609"></a>01609 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f41204a71c7820bcc0fc0250d472045f9c">RPMTRANS_FLAG_NOPREUN</a>)) <a name="l01610"></a>01610 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d72b47b48e07162140677ec64ab7e01b3d">PSM_SCRIPT</a>); <a name="l01611"></a>01611 } <a name="l01612"></a>01612 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01613"></a>01613 <span class="keywordtype">int</span> noArchiveSize = 0; <a name="l01614"></a>01614 <a name="l01615"></a>01615 <span class="comment">/* Regenerate original header. */</span> <a name="l01616"></a>01616 { <span class="keywordtype">void</span> * uh = NULL; <a name="l01617"></a>01617 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> uht, uhc; <a name="l01618"></a>01618 <a name="l01619"></a>01619 <span class="keywordflow">if</span> (<a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bbf199b0f74f4a4704e89b424c76ac4db">RPMTAG_HEADERIMMUTABLE</a>, &uht, &uh, &uhc)) { <a name="l01620"></a>01620 psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__header.html#gd4e89e8b4dfddd373d742f3c429e8852">headerCopyLoad</a>(uh); <a name="l01621"></a>01621 uh = hfd(uh, uht); <a name="l01622"></a>01622 } <span class="keywordflow">else</span> <a name="l01623"></a>01623 <span class="keywordflow">if</span> (<a class="code" href="group__header.html#g0b59789e021aa6ecab28e72a1f39d0a4">headerGetEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b6357cd75999a2729d1dbfec1798d4645">RPMTAG_HEADERIMAGE</a>, &uht, &uh, &uhc)) <a name="l01624"></a>01624 { <a name="l01625"></a>01625 <a class="code" href="structheaderIterator__s.html">HeaderIterator</a> hi; <a name="l01626"></a>01626 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> tag, type, count; <a name="l01627"></a>01627 <a class="code" href="header_8h.html#9896bcc85309642a21fc8c094272adb5">hPTR_t</a> ptr; <a name="l01628"></a>01628 <a class="code" href="structheaderToken__s.html">Header</a> <a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>; <a name="l01629"></a>01629 <a name="l01630"></a>01630 <span class="comment">/* Load the original header from the blob. */</span> <a name="l01631"></a>01631 <a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__header.html#gd4e89e8b4dfddd373d742f3c429e8852">headerCopyLoad</a>(uh); <a name="l01632"></a>01632 <a name="l01633"></a>01633 <span class="comment">/* XXX this is headerCopy w/o headerReload() */</span> <a name="l01634"></a>01634 psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__header.html#gfd961198e411c9c7bc60c86ac30344cf">headerNew</a>(); <a name="l01635"></a>01635 <a name="l01636"></a>01636 <span class="comment">/*@-branchstate@*/</span> <a name="l01637"></a>01637 <span class="keywordflow">for</span> (hi = <a class="code" href="group__header.html#ge8e50611b6f7d3068797b678bc89787a">headerInitIterator</a>(<a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>); <a name="l01638"></a>01638 <a class="code" href="group__header.html#ge05c15009f53df6ce3283fc2748a2aa7">headerNextIterator</a>(hi, &tag, &type, &ptr, &count); <a name="l01639"></a>01639 ptr = <a class="code" href="group__header.html#ge7835c5c4504bf89e169fb7d34c6b521">headerFreeData</a>((<span class="keywordtype">void</span> *)ptr, type)) <a name="l01640"></a>01640 { <a name="l01641"></a>01641 <span class="keywordflow">if</span> (tag == <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b86ff788c46158c5caea21e340d390ae9">RPMTAG_ARCHIVESIZE</a>) <a name="l01642"></a>01642 noArchiveSize = 1; <a name="l01643"></a>01643 <span class="keywordflow">if</span> (ptr) (void) <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>, tag, type, ptr, count); <a name="l01644"></a>01644 } <a name="l01645"></a>01645 hi = <a class="code" href="group__header.html#g85c9f2c55c0cc724cded6d5ccd55fec3">headerFreeIterator</a>(hi); <a name="l01646"></a>01646 <span class="comment">/*@=branchstate@*/</span> <a name="l01647"></a>01647 <a name="l01648"></a>01648 <a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(<a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>); <a name="l01649"></a>01649 uh = hfd(uh, uht); <a name="l01650"></a>01650 } <span class="keywordflow">else</span> <a name="l01651"></a>01651 <span class="keywordflow">break</span>; <span class="comment">/* XXX shouldn't ever happen */</span> <a name="l01652"></a>01652 } <a name="l01653"></a>01653 <a name="l01654"></a>01654 <span class="comment">/* Retrieve type of payload compression. */</span> <a name="l01655"></a>01655 <span class="comment">/*@-nullstate@*/</span> <span class="comment">/* FIX: psm->oh may be NULL */</span> <a name="l01656"></a>01656 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75663b12a4fdde3fa9e30f9919aa881a6">PSM_RPMIO_FLAGS</a>); <a name="l01657"></a>01657 <span class="comment">/*@=nullstate@*/</span> <a name="l01658"></a>01658 <a name="l01659"></a>01659 <span class="comment">/* Write the lead section into the package. */</span> <a name="l01660"></a>01660 { <span class="keywordtype">int</span> archnum = -1; <a name="l01661"></a>01661 <span class="keywordtype">int</span> osnum = -1; <a name="l01662"></a>01662 <span class="keyword">struct </span><a class="code" href="structrpmlead.html">rpmlead</a> lead; <a name="l01663"></a>01663 <a name="l01664"></a>01664 <span class="preprocessor">#ifndef DYING</span> <a name="l01665"></a>01665 <span class="preprocessor"></span> <a class="code" href="group__rpmrc.html#gc69000b2e434fb3c4eaae0887829e08b">rpmGetArchInfo</a>(NULL, &archnum); <a name="l01666"></a>01666 <a class="code" href="group__rpmrc.html#g2ac53e53de5bbce584be8b01f9fc6bd2">rpmGetOsInfo</a>(NULL, &osnum); <a name="l01667"></a>01667 <span class="preprocessor">#endif</span> <a name="l01668"></a>01668 <span class="preprocessor"></span> <a name="l01669"></a>01669 memset(&lead, 0, <span class="keyword">sizeof</span>(lead)); <a name="l01670"></a>01670 <span class="comment">/* XXX Set package version conditioned on noDirTokens. */</span> <a name="l01671"></a>01671 lead.major = 3; <a name="l01672"></a>01672 lead.minor = 0; <a name="l01673"></a>01673 lead.type = <a class="code" href="rpmlib_8h.html#8e9c37a65297e5ffc0f203563ab9a3e6">RPMLEAD_BINARY</a>; <a name="l01674"></a>01674 lead.archnum = archnum; <a name="l01675"></a>01675 lead.osnum = osnum; <a name="l01676"></a>01676 lead.signature_type = <a class="code" href="group__signature.html#gg79af55ea6949058cea8ac4e967a4eb4318db96ffe5c787a97b239ca7dfc66ba8">RPMSIGTYPE_HEADERSIG</a>; <a name="l01677"></a>01677 <a name="l01678"></a>01678 strncpy(lead.name, <a class="code" href="rpmte_8c.html#53178d155e0da8f9a111d19bf4cdd279">rpmteNEVR</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>), <span class="keyword">sizeof</span>(lead.name)); <a name="l01679"></a>01679 <a name="l01680"></a>01680 rc = <a class="code" href="group__lead.html#g59b7cb8f92595d027adcde57a25d1d3a">writeLead</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, &lead); <a name="l01681"></a>01681 <span class="keywordflow">if</span> (rc != <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>) { <a name="l01682"></a>01682 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b9ec65e8ff63fd0c87f71cdf6bc8ed2cb">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"Unable to write package: %s\n"</span>), <a name="l01683"></a>01683 <a class="code" href="rpmio_8c.html#0ef7b73c1eec295cb5f873879b143423">Fstrerror</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>)); <a name="l01684"></a>01684 <span class="keywordflow">break</span>; <a name="l01685"></a>01685 } <a name="l01686"></a>01686 } <a name="l01687"></a>01687 <a name="l01688"></a>01688 <span class="comment">/* Write the signature section into the package. */</span> <a name="l01689"></a>01689 <span class="comment">/* XXX rpm-4.1 and later has archive size in signature header. */</span> <a name="l01690"></a>01690 { <a class="code" href="structheaderToken__s.html">Header</a> sigh = <a class="code" href="group__header.html#g0240750b808fc759dee76f3440194570">headerRegenSigHeader</a>(fi->h, noArchiveSize); <a name="l01691"></a>01691 <span class="comment">/* Reallocate the signature into one contiguous region. */</span> <a name="l01692"></a>01692 sigh = <a class="code" href="group__header.html#g13b71a58857a7620e472ef9527c171ad">headerReload</a>(sigh, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b74c03e02289fb0348a35ff24e333e331">RPMTAG_HEADERSIGNATURES</a>); <a name="l01693"></a>01693 <span class="keywordflow">if</span> (sigh == NULL) { <a name="l01694"></a>01694 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b9ec65e8ff63fd0c87f71cdf6bc8ed2cb">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"Unable to reload signature header\n"</span>)); <a name="l01695"></a>01695 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01696"></a>01696 <span class="keywordflow">break</span>; <a name="l01697"></a>01697 } <a name="l01698"></a>01698 rc = <a class="code" href="group__signature.html#g29c4083297ecdc3ffc62fa25a84ed084">rpmWriteSignature</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, sigh); <a name="l01699"></a>01699 sigh = <a class="code" href="group__signature.html#gfe211addadae046d1ae9b66fe80d6aa9">rpmFreeSignature</a>(sigh); <a name="l01700"></a>01700 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01701"></a>01701 } <a name="l01702"></a>01702 <a name="l01703"></a>01703 <span class="comment">/* Add remove transaction id to header. */</span> <a name="l01704"></a>01704 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> != NULL) <a name="l01705"></a>01705 { <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> tid = <a class="code" href="group__rpmts.html#gcc57dec2026120db7add45ef83859863">rpmtsGetTid</a>(ts); <a name="l01706"></a>01706 xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b4bc4d7cca6995ad5dc8ff168bdb94122">RPMTAG_REMOVETID</a>, <a name="l01707"></a>01707 <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed033cf2f10106384143d802ede9274dcc">RPM_INT32_TYPE</a>, &tid, 1); <a name="l01708"></a>01708 } <a name="l01709"></a>01709 <a name="l01710"></a>01710 <span class="comment">/* Write the metadata section into the package. */</span> <a name="l01711"></a>01711 rc = <a class="code" href="group__header.html#gcaf6c39a6b399ce1586f8dce2012c9f6">headerWrite</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>, <a class="code" href="group__header.html#gg2572591faf5430cdf28aaf9f70d74fa4ebb6d0af72ae9d4c607e81796dafa472">HEADER_MAGIC_YES</a>); <a name="l01712"></a>01712 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01713"></a>01713 } <a name="l01714"></a>01714 <span class="keywordflow">break</span>; <a name="l01715"></a>01715 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d73e1f2f8f8acc28503282257f4f4f2214">PSM_PROCESS</a>: <a name="l01716"></a>01716 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & RPMTRANS_FLAG_TEST) <span class="keywordflow">break</span>; <a name="l01717"></a>01717 <a name="l01718"></a>01718 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>) { <a name="l01719"></a>01719 <a name="l01720"></a>01720 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f47ef9385f5ecbc714a81aa2fe228f5bca">RPMTRANS_FLAG_JUSTDB</a>) <span class="keywordflow">break</span>; <a name="l01721"></a>01721 <a name="l01722"></a>01722 <span class="comment">/* XXX Synthesize callbacks for packages with no files. */</span> <a name="l01723"></a>01723 <span class="keywordflow">if</span> (<a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi) <= 0) { <a name="l01724"></a>01724 <span class="keywordtype">void</span> * ptr; <a name="l01725"></a>01725 ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, fi->te, <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c38099385a51f1d286f3988c48a9e011c">RPMCALLBACK_INST_START</a>, 0, 100); <a name="l01726"></a>01726 ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, fi->te, <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c4026f3225612cd54a779e8b535cd33b0">RPMCALLBACK_INST_PROGRESS</a>, 100, 100); <a name="l01727"></a>01727 <span class="keywordflow">break</span>; <a name="l01728"></a>01728 } <a name="l01729"></a>01729 <a name="l01730"></a>01730 <span class="comment">/* Retrieve type of payload compression. */</span> <a name="l01731"></a>01731 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75663b12a4fdde3fa9e30f9919aa881a6">PSM_RPMIO_FLAGS</a>); <a name="l01732"></a>01732 <a name="l01733"></a>01733 <span class="keywordflow">if</span> (<a class="code" href="rpmte_8c.html#dd93ead731725709fc15108ded07f799">rpmteFd</a>(fi->te) == NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l01734"></a>01734 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01735"></a>01735 <span class="keywordflow">break</span>; <a name="l01736"></a>01736 } <a name="l01737"></a>01737 <a name="l01738"></a>01738 <span class="comment">/*@-nullpass@*/</span> <span class="comment">/* LCL: fi->fd != NULL here. */</span> <a name="l01739"></a>01739 psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a> = <a class="code" href="rpmio_8c.html#179731508680532a4303c1220e7bdb2d">Fdopen</a>(<a class="code" href="rpmio_8c.html#7fdbfe3ae72584240fb4c41364667ed6">fdDup</a>(<a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(<a class="code" href="rpmte_8c.html#dd93ead731725709fc15108ded07f799">rpmteFd</a>(fi->te))), psm-><a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a>); <a name="l01740"></a>01740 <span class="comment">/*@=nullpass@*/</span> <a name="l01741"></a>01741 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a> == NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l01742"></a>01742 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01743"></a>01743 <span class="keywordflow">break</span>; <a name="l01744"></a>01744 } <a name="l01745"></a>01745 <a name="l01746"></a>01746 rc = <a class="code" href="fsm_8c.html#4e392c2eb31a72925861fa71125bc86c">fsmSetup</a>(fi->fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>, ts, fi, <a name="l01747"></a>01747 psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, NULL, &psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>); <a name="l01748"></a>01748 (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e8dbde80944b206dced013cd6da4de5865">RPMTS_OP_UNCOMPRESS</a>), <a name="l01749"></a>01749 <a class="code" href="group__rpmio.html#gca91d991ee3b190bb32f0b1aed7fb796">fdstat_op</a>(psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, <a class="code" href="group__rpmio.html#gg3f29a6d794c5c4d3283466f38802118184d3d23af13a1d2041439b1fbb993f17">FDSTAT_READ</a>)); <a name="l01750"></a>01750 (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e8a1b0a28f4a226d6ede631a48c893c699">RPMTS_OP_DIGEST</a>), <a name="l01751"></a>01751 <a class="code" href="group__rpmio.html#gca91d991ee3b190bb32f0b1aed7fb796">fdstat_op</a>(psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, <a class="code" href="group__rpmio.html#gg3f29a6d794c5c4d3283466f388021181f418a78e4290c0f2e2b0ab16abd2db4b">FDSTAT_DIGEST</a>)); <a name="l01752"></a>01752 xx = <a class="code" href="fsm_8c.html#551dd542cd4c715378a10394cc55625f">fsmTeardown</a>(fi->fsm); <a name="l01753"></a>01753 <a name="l01754"></a>01754 saveerrno = <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>; <span class="comment">/* XXX FIXME: Fclose with libio destroys errno */</span> <a name="l01755"></a>01755 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>); <a name="l01756"></a>01756 psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a> = NULL; <a name="l01757"></a>01757 <span class="comment">/*@-mods@*/</span> <a name="l01758"></a>01758 <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno; <span class="comment">/* XXX FIXME: Fclose with libio destroys errno */</span> <a name="l01759"></a>01759 <span class="comment">/*@=mods@*/</span> <a name="l01760"></a>01760 <a name="l01761"></a>01761 <span class="keywordflow">if</span> (!rc) <a name="l01762"></a>01762 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ae370b68dcc218d464a774109a20cf13">PSM_COMMIT</a>); <a name="l01763"></a>01763 <a name="l01764"></a>01764 <span class="comment">/* XXX make sure progress is closed out */</span> <a name="l01765"></a>01765 psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a> = <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c4026f3225612cd54a779e8b535cd33b0">RPMCALLBACK_INST_PROGRESS</a>; <a name="l01766"></a>01766 psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = (fi->archiveSize ? fi->archiveSize : 100); <a name="l01767"></a>01767 psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a>; <a name="l01768"></a>01768 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>); <a name="l01769"></a>01769 <a name="l01770"></a>01770 <span class="keywordflow">if</span> (rc) { <a name="l01771"></a>01771 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b05e85d625fc90337b752e2a75e782632">RPMERR_CPIO</a>, <a name="l01772"></a>01772 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"unpacking of archive failed%s%s: %s\n"</span>), <a name="l01773"></a>01773 (psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a> != NULL ? <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">" on file "</span>) : <span class="stringliteral">""</span>), <a name="l01774"></a>01774 (psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a> != NULL ? psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a> : <span class="stringliteral">""</span>), <a name="l01775"></a>01775 <a class="code" href="group__payload.html#g3da340e7b8a64b3a0957acf06140285a">cpioStrerror</a>(rc)); <a name="l01776"></a>01776 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01777"></a>01777 <a name="l01778"></a>01778 <span class="comment">/* XXX notify callback on error. */</span> <a name="l01779"></a>01779 psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a> = <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9cb46cb8c0f7b0322bc39a6e923b114c2b">RPMCALLBACK_UNPACK_ERROR</a>; <a name="l01780"></a>01780 psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = 0; <a name="l01781"></a>01781 psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = 0; <a name="l01782"></a>01782 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>); <a name="l01783"></a>01783 <a name="l01784"></a>01784 <span class="keywordflow">break</span>; <a name="l01785"></a>01785 } <a name="l01786"></a>01786 } <a name="l01787"></a>01787 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a>) { <a name="l01788"></a>01788 <span class="keywordtype">int</span> fc = <a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi); <a name="l01789"></a>01789 <a name="l01790"></a>01790 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f47ef9385f5ecbc714a81aa2fe228f5bca">RPMTRANS_FLAG_JUSTDB</a>) <span class="keywordflow">break</span>; <a name="l01791"></a>01791 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4fd960c1615b030b4ec62ebd40f332f43">RPMTRANS_FLAG_APPLYONLY</a>) <span class="keywordflow">break</span>; <a name="l01792"></a>01792 <a name="l01793"></a>01793 <span class="comment">/* XXX Synthesize callbacks for packages with no files. */</span> <a name="l01794"></a>01794 <span class="keywordflow">if</span> (<a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi) <= 0) { <a name="l01795"></a>01795 <span class="keywordtype">void</span> * ptr; <a name="l01796"></a>01796 ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, fi->te, <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c618773bdec54efaca4ea547139066202">RPMCALLBACK_UNINST_START</a>, 0, 100); <a name="l01797"></a>01797 ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, fi->te, <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9cddda527f7338b5542375f09e38f0d240">RPMCALLBACK_UNINST_STOP</a>, 0, 100); <a name="l01798"></a>01798 <span class="keywordflow">break</span>; <a name="l01799"></a>01799 } <a name="l01800"></a>01800 <a name="l01801"></a>01801 psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a> = <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c618773bdec54efaca4ea547139066202">RPMCALLBACK_UNINST_START</a>; <a name="l01802"></a>01802 psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = fc; <span class="comment">/* XXX W2DO? looks wrong. */</span> <a name="l01803"></a>01803 psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = fc; <a name="l01804"></a>01804 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>); <a name="l01805"></a>01805 <a name="l01806"></a>01806 rc = <a class="code" href="fsm_8c.html#4e392c2eb31a72925861fa71125bc86c">fsmSetup</a>(fi->fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d9fc895da99bddbc74811ae0df74d0d3">FSM_PKGERASE</a>, ts, fi, <a name="l01807"></a>01807 NULL, NULL, &psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>); <a name="l01808"></a>01808 xx = <a class="code" href="fsm_8c.html#551dd542cd4c715378a10394cc55625f">fsmTeardown</a>(fi->fsm); <a name="l01809"></a>01809 <a name="l01810"></a>01810 psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a> = <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9cddda527f7338b5542375f09e38f0d240">RPMCALLBACK_UNINST_STOP</a>; <a name="l01811"></a>01811 psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = 0; <span class="comment">/* XXX W2DO? looks wrong. */</span> <a name="l01812"></a>01812 psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = fc; <a name="l01813"></a>01813 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>); <a name="l01814"></a>01814 <a name="l01815"></a>01815 } <a name="l01816"></a>01816 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01817"></a>01817 <a class="code" href="rpmlib_8h.html#b8093e386e879383837c4a528d8b9bdc">fileAction</a> * actions = fi->actions; <a name="l01818"></a>01818 <a class="code" href="rpmlib_8h.html#b8093e386e879383837c4a528d8b9bdc">fileAction</a> action = fi->action; <a name="l01819"></a>01819 <a name="l01820"></a>01820 fi->action = <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0593e433874ed32187140e8fa952608896">FA_COPYOUT</a>; <a name="l01821"></a>01821 fi->actions = NULL; <a name="l01822"></a>01822 <a name="l01823"></a>01823 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> == NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l01824"></a>01824 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01825"></a>01825 <span class="keywordflow">break</span>; <a name="l01826"></a>01826 } <a name="l01827"></a>01827 <span class="comment">/*@-nullpass@*/</span> <span class="comment">/* FIX: fdDup mey return NULL. */</span> <a name="l01828"></a>01828 xx = <a class="code" href="rpmio_8c.html#640e13034aae4bdaad1b2172f7456c85">Fflush</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>); <a name="l01829"></a>01829 psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a> = <a class="code" href="rpmio_8c.html#179731508680532a4303c1220e7bdb2d">Fdopen</a>(<a class="code" href="rpmio_8c.html#7fdbfe3ae72584240fb4c41364667ed6">fdDup</a>(<a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>)), psm-><a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a>); <a name="l01830"></a>01830 <span class="comment">/*@=nullpass@*/</span> <a name="l01831"></a>01831 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a> == NULL) { <span class="comment">/* XXX can't happen */</span> <a name="l01832"></a>01832 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>; <a name="l01833"></a>01833 <span class="keywordflow">break</span>; <a name="l01834"></a>01834 } <a name="l01835"></a>01835 <a name="l01836"></a>01836 rc = <a class="code" href="fsm_8c.html#4e392c2eb31a72925861fa71125bc86c">fsmSetup</a>(fi->fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>, ts, fi, psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, <a name="l01837"></a>01837 NULL, &psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>); <a name="l01838"></a>01838 (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e87e0fe8ee0f9b01955f30c80e68b1acbe">RPMTS_OP_COMPRESS</a>), <a name="l01839"></a>01839 <a class="code" href="group__rpmio.html#gca91d991ee3b190bb32f0b1aed7fb796">fdstat_op</a>(psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, <a class="code" href="group__rpmio.html#gg3f29a6d794c5c4d3283466f3880211819593c6dfbeef1a48cd73037fccd950c3">FDSTAT_WRITE</a>)); <a name="l01840"></a>01840 (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e8a1b0a28f4a226d6ede631a48c893c699">RPMTS_OP_DIGEST</a>), <a name="l01841"></a>01841 <a class="code" href="group__rpmio.html#gca91d991ee3b190bb32f0b1aed7fb796">fdstat_op</a>(psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, <a class="code" href="group__rpmio.html#gg3f29a6d794c5c4d3283466f388021181f418a78e4290c0f2e2b0ab16abd2db4b">FDSTAT_DIGEST</a>)); <a name="l01842"></a>01842 xx = <a class="code" href="fsm_8c.html#551dd542cd4c715378a10394cc55625f">fsmTeardown</a>(fi->fsm); <a name="l01843"></a>01843 <a name="l01844"></a>01844 saveerrno = <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>; <span class="comment">/* XXX FIXME: Fclose with libio destroys errno */</span> <a name="l01845"></a>01845 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>); <a name="l01846"></a>01846 psm-><a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a> = NULL; <a name="l01847"></a>01847 <span class="comment">/*@-mods@*/</span> <a name="l01848"></a>01848 <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno; <a name="l01849"></a>01849 <span class="comment">/*@=mods@*/</span> <a name="l01850"></a>01850 <a name="l01851"></a>01851 <span class="comment">/* XXX make sure progress is closed out */</span> <a name="l01852"></a>01852 psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a> = <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c4026f3225612cd54a779e8b535cd33b0">RPMCALLBACK_INST_PROGRESS</a>; <a name="l01853"></a>01853 psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = (fi->archiveSize ? fi->archiveSize : 100); <a name="l01854"></a>01854 psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a>; <a name="l01855"></a>01855 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>); <a name="l01856"></a>01856 <a name="l01857"></a>01857 fi->action = action; <a name="l01858"></a>01858 fi->actions = actions; <a name="l01859"></a>01859 } <a name="l01860"></a>01860 <span class="keywordflow">break</span>; <a name="l01861"></a>01861 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74914e74f56c05b751af9208f7e97e84d">PSM_POST</a>: <a name="l01862"></a>01862 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & RPMTRANS_FLAG_TEST) <span class="keywordflow">break</span>; <a name="l01863"></a>01863 <a name="l01864"></a>01864 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>) { <a name="l01865"></a>01865 <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> installTime = (<a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a>) time(NULL); <a name="l01866"></a>01866 <span class="keywordtype">int</span> fc = <a class="code" href="rpmfi_8c.html#ba8c5854f395dd90779d0cd3f599ffc0">rpmfiFC</a>(fi); <a name="l01867"></a>01867 <a name="l01868"></a>01868 <span class="keywordflow">if</span> (fi->h == NULL) <span class="keywordflow">break</span>; <span class="comment">/* XXX can't happen */</span> <a name="l01869"></a>01869 <span class="keywordflow">if</span> (fi->fstates != NULL && fc > 0) <a name="l01870"></a>01870 xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b68cb1055c204dc409ac7b32090f5eba6">RPMTAG_FILESTATES</a>, <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fedef0515c385f44f8679ddce3dfd12900e">RPM_CHAR_TYPE</a>, <a name="l01871"></a>01871 fi->fstates, fc); <a name="l01872"></a>01872 <a name="l01873"></a>01873 xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b06f6d8e54fe5f6f85e540e1062c4f95a">RPMTAG_INSTALLTIME</a>, <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed033cf2f10106384143d802ede9274dcc">RPM_INT32_TYPE</a>, <a name="l01874"></a>01874 &installTime, 1); <a name="l01875"></a>01875 <a name="l01876"></a>01876 xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b8616258f9b57d7cba5b5078ed823e3a5">RPMTAG_INSTALLCOLOR</a>, <a class="code" href="group__header.html#gg24690e18a34d56e178edf27b5cc97fed033cf2f10106384143d802ede9274dcc">RPM_INT32_TYPE</a>, <a name="l01877"></a>01877 &tscolor, 1); <a name="l01878"></a>01878 <a name="l01879"></a>01879 <span class="comment">/*</span> <a name="l01880"></a>01880 <span class="comment"> * If this package has already been installed, remove it from</span> <a name="l01881"></a>01881 <span class="comment"> * the database before adding the new one.</span> <a name="l01882"></a>01882 <span class="comment"> */</span> <a name="l01883"></a>01883 <span class="keywordflow">if</span> (fi->record && !(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4fd960c1615b030b4ec62ebd40f332f43">RPMTRANS_FLAG_APPLYONLY</a>)) { <a name="l01884"></a>01884 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f7be35ae01ed37e6be9c2cf2a6bb7994">PSM_RPMDB_REMOVE</a>); <a name="l01885"></a>01885 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01886"></a>01886 } <a name="l01887"></a>01887 <a name="l01888"></a>01888 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d71165155666a84c2b8aec935c2920baa1">PSM_RPMDB_ADD</a>); <a name="l01889"></a>01889 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01890"></a>01890 <a name="l01891"></a>01891 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b9e949fbfd1262226cb793c74fa0f26f8">RPMTAG_POSTIN</a>; <a name="l01892"></a>01892 psm-><a class="code" href="structrpmpsm__s.html#395e28ea3a310dbef04bb67230f71674">progTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507be83e8977e9e8fb669e833e836d82ea8a">RPMTAG_POSTINPROG</a>; <a name="l01893"></a>01893 psm-><a class="code" href="structrpmpsm__s.html#485902a864333d1e0d4e09e9ca9bd8c7">sense</a> = <a class="code" href="rpmlib_8h.html#e48bd9834f11ab42752bb6f0f54ae8a35d313bd2d495d75892df5a1c69a8f3df">RPMSENSE_TRIGGERIN</a>; <a name="l01894"></a>01894 psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = 0; <a name="l01895"></a>01895 <a name="l01896"></a>01896 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4891a999fdb3e8cb16896d44c9a17b906">RPMTRANS_FLAG_NOPOST</a>)) { <a name="l01897"></a>01897 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d72b47b48e07162140677ec64ab7e01b3d">PSM_SCRIPT</a>); <a name="l01898"></a>01898 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01899"></a>01899 } <a name="l01900"></a>01900 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f44479b039b0f6b1f4ac9bfcd7172e18bd">RPMTRANS_FLAG_NOTRIGGERIN</a>)) { <a name="l01901"></a>01901 <span class="comment">/* Run triggers in other package(s) this package sets off. */</span> <a name="l01902"></a>01902 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d70b1528122057f7119cbb08ae287cf601">PSM_TRIGGERS</a>); <a name="l01903"></a>01903 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01904"></a>01904 <a name="l01905"></a>01905 <span class="comment">/* Run triggers in this package other package(s) set off. */</span> <a name="l01906"></a>01906 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ef4e9b3642fd5a2ef0d6a553dc39c1c2">PSM_IMMED_TRIGGERS</a>); <a name="l01907"></a>01907 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01908"></a>01908 } <a name="l01909"></a>01909 <a name="l01910"></a>01910 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & RPMTRANS_FLAG_APPLYONLY)) <a name="l01911"></a>01911 rc = <a class="code" href="psm_8c.html#a9aad7982964c0d14f59be018f1809e9">markReplacedFiles</a>(psm); <a name="l01912"></a>01912 <a name="l01913"></a>01913 } <a name="l01914"></a>01914 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a>) { <a name="l01915"></a>01915 <a name="l01916"></a>01916 psm-><a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2226eeadd4087c55510c19627e4b605a">RPMTAG_POSTUN</a>; <a name="l01917"></a>01917 psm-><a class="code" href="structrpmpsm__s.html#395e28ea3a310dbef04bb67230f71674">progTag</a> = <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b14a358e5b94609d2c02f58ac10c55515">RPMTAG_POSTUNPROG</a>; <a name="l01918"></a>01918 psm-><a class="code" href="structrpmpsm__s.html#485902a864333d1e0d4e09e9ca9bd8c7">sense</a> = <a class="code" href="rpmlib_8h.html#e48bd9834f11ab42752bb6f0f54ae8a363a315ee6a77ef8e88be6d96143dd4aa">RPMSENSE_TRIGGERPOSTUN</a>; <a name="l01919"></a>01919 psm-><a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a> = -1; <a name="l01920"></a>01920 <a name="l01921"></a>01921 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f46af548b3039685ad7bee6f4c0953caec">RPMTRANS_FLAG_NOPOSTUN</a>)) { <a name="l01922"></a>01922 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d72b47b48e07162140677ec64ab7e01b3d">PSM_SCRIPT</a>); <a name="l01923"></a>01923 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01924"></a>01924 } <a name="l01925"></a>01925 <a name="l01926"></a>01926 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f47f0b3f246d96f126e1dcb95401127de7">RPMTRANS_FLAG_NOTRIGGERPOSTUN</a>)) { <a name="l01927"></a>01927 <span class="comment">/* Run triggers in other package(s) this package sets off. */</span> <a name="l01928"></a>01928 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d70b1528122057f7119cbb08ae287cf601">PSM_TRIGGERS</a>); <a name="l01929"></a>01929 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>; <a name="l01930"></a>01930 } <a name="l01931"></a>01931 <a name="l01932"></a>01932 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4fd960c1615b030b4ec62ebd40f332f43">RPMTRANS_FLAG_APPLYONLY</a>)) <a name="l01933"></a>01933 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f7be35ae01ed37e6be9c2cf2a6bb7994">PSM_RPMDB_REMOVE</a>); <a name="l01934"></a>01934 } <a name="l01935"></a>01935 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01936"></a>01936 } <a name="l01937"></a>01937 <a name="l01938"></a>01938 <span class="comment">/* Restore root directory if changed. */</span> <a name="l01939"></a>01939 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d723af579e4a8301026aeabc1ccbabe2f4">PSM_CHROOT_OUT</a>); <a name="l01940"></a>01940 <span class="keywordflow">break</span>; <a name="l01941"></a>01941 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75d2e0d4cbe741e06a4931d9e44e7c7b5">PSM_UNDO</a>: <a name="l01942"></a>01942 <span class="keywordflow">break</span>; <a name="l01943"></a>01943 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d76b3d26ccca6373c1fb1af31bdc931512">PSM_FINI</a>: <a name="l01944"></a>01944 <span class="comment">/* Restore root directory if changed. */</span> <a name="l01945"></a>01945 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d723af579e4a8301026aeabc1ccbabe2f4">PSM_CHROOT_OUT</a>); <a name="l01946"></a>01946 <a name="l01947"></a>01947 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> != NULL) { <a name="l01948"></a>01948 saveerrno = <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>; <span class="comment">/* XXX FIXME: Fclose with libio destroys errno */</span> <a name="l01949"></a>01949 xx = <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>); <a name="l01950"></a>01950 psm-><a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> = NULL; <a name="l01951"></a>01951 <span class="comment">/*@-mods@*/</span> <a name="l01952"></a>01952 <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno; <a name="l01953"></a>01953 <span class="comment">/*@=mods@*/</span> <a name="l01954"></a>01954 } <a name="l01955"></a>01955 <a name="l01956"></a>01956 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01957"></a>01957 <span class="keywordflow">if</span> (!rc && ts && ts->notify == NULL) { <a name="l01958"></a>01958 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#bc625bbc38201faf1e40cd02196fcef4">RPMMESS_VERBOSE</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"Wrote: %s\n"</span>), <a name="l01959"></a>01959 (psm-><a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a> ? psm-><a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a> : <span class="stringliteral">"???"</span>)); <a name="l01960"></a>01960 } <a name="l01961"></a>01961 } <a name="l01962"></a>01962 <a name="l01963"></a>01963 <span class="keywordflow">if</span> (rc) { <a name="l01964"></a>01964 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>) <a name="l01965"></a>01965 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(<a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b05e85d625fc90337b752e2a75e782632">RPMERR_CPIO</a>, <a name="l01966"></a>01966 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s failed on file %s: %s\n"</span>), <a name="l01967"></a>01967 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>, <a class="code" href="group__payload.html#g3da340e7b8a64b3a0957acf06140285a">cpioStrerror</a>(rc)); <a name="l01968"></a>01968 <span class="keywordflow">else</span> <a name="l01969"></a>01969 <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(RPMERR_CPIO, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s failed: %s\n"</span>), <a name="l01970"></a>01970 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="group__payload.html#g3da340e7b8a64b3a0957acf06140285a">cpioStrerror</a>(rc)); <a name="l01971"></a>01971 <a name="l01972"></a>01972 <span class="comment">/* XXX notify callback on error. */</span> <a name="l01973"></a>01973 psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a> = <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c237249c1c79a6f22b5286ef74d2d1ebc">RPMCALLBACK_CPIO_ERROR</a>; <a name="l01974"></a>01974 psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = 0; <a name="l01975"></a>01975 psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = 0; <a name="l01976"></a>01976 <span class="comment">/*@-nullstate@*/</span> <span class="comment">/* FIX: psm->fd may be NULL. */</span> <a name="l01977"></a>01977 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>); <a name="l01978"></a>01978 <span class="comment">/*@=nullstate@*/</span> <a name="l01979"></a>01979 } <a name="l01980"></a>01980 <a name="l01981"></a>01981 <span class="comment">/*@-branchstate@*/</span> <a name="l01982"></a>01982 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a> || psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) { <a name="l01983"></a>01983 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a> != NULL) <a name="l01984"></a>01984 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>->h != NULL) <a name="l01985"></a>01985 psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>->h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>->h); <a name="l01986"></a>01986 <span class="keywordflow">if</span> (fi->h != NULL) <a name="l01987"></a>01987 fi->h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(fi->h); <a name="l01988"></a>01988 } <a name="l01989"></a>01989 <span class="comment">/*@=branchstate@*/</span> <a name="l01990"></a>01990 psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(psm-><a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>); <a name="l01991"></a>01991 psm-><a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm-><a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a>); <a name="l01992"></a>01992 psm-><a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm-><a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a>); <a name="l01993"></a>01993 psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>); <a name="l01994"></a>01994 <a name="l01995"></a>01995 fi->fgroup = hfd(fi->fgroup, -1); <a name="l01996"></a>01996 fi->fuser = hfd(fi->fuser, -1); <a name="l01997"></a>01997 fi->apath = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fi->apath); <a name="l01998"></a>01998 fi->fstates = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fi->fstates); <a name="l01999"></a>01999 <span class="keywordflow">break</span>; <a name="l02000"></a>02000 <a name="l02001"></a>02001 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d725258c7f6f5f6d989fe323c0ea76d827">PSM_PKGINSTALL</a>: <a name="l02002"></a>02002 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a>: <a name="l02003"></a>02003 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>: <a name="l02004"></a>02004 psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> = stage; <a name="l02005"></a>02005 psm-><a class="code" href="structrpmpsm__s.html#dd1afe1b5e692bea6b9c855c3cc665ca">rc</a> = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l02006"></a>02006 psm-><a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a> = <a class="code" href="psm_8c.html#124ab96768029486eaa8aebd819c65c0">pkgStageString</a>(stage); <a name="l02007"></a>02007 <a name="l02008"></a>02008 rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7fc3e65ce3928b03b067c19bcc175d10c">PSM_INIT</a>); <a name="l02009"></a>02009 <span class="keywordflow">if</span> (!rc) rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f3d01a8e44fea5579d09357559e96068">PSM_PRE</a>); <a name="l02010"></a>02010 <span class="keywordflow">if</span> (!rc) rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d73e1f2f8f8acc28503282257f4f4f2214">PSM_PROCESS</a>); <a name="l02011"></a>02011 <span class="keywordflow">if</span> (!rc) rc = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74914e74f56c05b751af9208f7e97e84d">PSM_POST</a>); <a name="l02012"></a>02012 xx = <a class="code" href="psm_8c.html#ffa055af6ad1cac9c61da7429481273b">rpmpsmNext</a>(psm, <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d76b3d26ccca6373c1fb1af31bdc931512">PSM_FINI</a>); <a name="l02013"></a>02013 <span class="keywordflow">break</span>; <a name="l02014"></a>02014 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f3dd14c2d7559bc4311cb595c271d402">PSM_PKGCOMMIT</a>: <a name="l02015"></a>02015 <span class="keywordflow">break</span>; <a name="l02016"></a>02016 <a name="l02017"></a>02017 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d742245f23de195cc384189e9415d6904b">PSM_CREATE</a>: <a name="l02018"></a>02018 <span class="keywordflow">break</span>; <a name="l02019"></a>02019 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d74fe4a4db8b040b6102f3941419485bc2">PSM_NOTIFY</a>: <a name="l02020"></a>02020 { <span class="keywordtype">void</span> * ptr; <a name="l02021"></a>02021 <span class="comment">/*@-nullpass@*/</span> <span class="comment">/* FIX: psm->te may be NULL */</span> <a name="l02022"></a>02022 ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>, psm-><a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a>, psm-><a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a>, psm-><a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a>); <a name="l02023"></a>02023 <span class="comment">/*@-nullpass@*/</span> <a name="l02024"></a>02024 } <span class="keywordflow">break</span>; <a name="l02025"></a>02025 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7823d137ee860408f0c932f26ed124d8f">PSM_DESTROY</a>: <a name="l02026"></a>02026 <span class="keywordflow">break</span>; <a name="l02027"></a>02027 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ae370b68dcc218d464a774109a20cf13">PSM_COMMIT</a>: <a name="l02028"></a>02028 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4b0ec2a51a8a728fe6508082fb0d3e512">RPMTRANS_FLAG_PKGCOMMIT</a>)) <span class="keywordflow">break</span>; <a name="l02029"></a>02029 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f4fd960c1615b030b4ec62ebd40f332f43">RPMTRANS_FLAG_APPLYONLY</a>) <span class="keywordflow">break</span>; <a name="l02030"></a>02030 <a name="l02031"></a>02031 rc = <a class="code" href="fsm_8c.html#4e392c2eb31a72925861fa71125bc86c">fsmSetup</a>(fi->fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729407950152b6bb79e018cd854d3b1b825b">FSM_PKGCOMMIT</a>, ts, fi, <a name="l02032"></a>02032 NULL, NULL, &psm-><a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>); <a name="l02033"></a>02033 xx = <a class="code" href="fsm_8c.html#551dd542cd4c715378a10394cc55625f">fsmTeardown</a>(fi->fsm); <a name="l02034"></a>02034 <span class="keywordflow">break</span>; <a name="l02035"></a>02035 <a name="l02036"></a>02036 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f993b9676fa428a4012916f6e79a4cb9">PSM_CHROOT_IN</a>: <a name="l02037"></a>02037 { <span class="keyword">const</span> <span class="keywordtype">char</span> * rootDir = <a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(ts); <a name="l02038"></a>02038 <span class="comment">/* Change root directory if requested and not already done. */</span> <a name="l02039"></a>02039 <span class="keywordflow">if</span> (rootDir != NULL && !(rootDir[0] == <span class="charliteral">'/'</span> && rootDir[1] == <span class="charliteral">'\0'</span>) <a name="l02040"></a>02040 && !<a class="code" href="group__rpmts.html#g1db773f0137abb1593a35a396eed168a">rpmtsChrootDone</a>(ts) && !psm-><a class="code" href="structrpmpsm__s.html#ec50126e16467ac579dc566911d78b9c">chrootDone</a>) <a name="l02041"></a>02041 { <a name="l02042"></a>02042 <span class="keyword">static</span> <span class="keywordtype">int</span> _pw_loaded = 0; <a name="l02043"></a>02043 <span class="keyword">static</span> <span class="keywordtype">int</span> _gr_loaded = 0; <a name="l02044"></a>02044 <a name="l02045"></a>02045 <span class="keywordflow">if</span> (!_pw_loaded) { <a name="l02046"></a>02046 (void)getpwnam(<span class="stringliteral">"root"</span>); <a name="l02047"></a>02047 endpwent(); <a name="l02048"></a>02048 _pw_loaded++; <a name="l02049"></a>02049 } <a name="l02050"></a>02050 <span class="keywordflow">if</span> (!_gr_loaded) { <a name="l02051"></a>02051 (void)getgrnam(<span class="stringliteral">"root"</span>); <a name="l02052"></a>02052 endgrent(); <a name="l02053"></a>02053 _gr_loaded++; <a name="l02054"></a>02054 } <a name="l02055"></a>02055 <a name="l02056"></a>02056 xx = chdir(<span class="stringliteral">"/"</span>); <a name="l02057"></a>02057 <span class="comment">/*@-superuser@*/</span> <a name="l02058"></a>02058 <span class="keywordflow">if</span> (rootDir != NULL && strcmp(rootDir, <span class="stringliteral">"/"</span>) && *rootDir == <span class="charliteral">'/'</span>) <a name="l02059"></a>02059 rc = chroot(rootDir); <a name="l02060"></a>02060 <span class="comment">/*@=superuser@*/</span> <a name="l02061"></a>02061 psm-><a class="code" href="structrpmpsm__s.html#ec50126e16467ac579dc566911d78b9c">chrootDone</a> = 1; <a name="l02062"></a>02062 (void) <a class="code" href="group__rpmts.html#g1b06d5545f2232201dc199bcbe9d0f04">rpmtsSetChrootDone</a>(ts, 1); <a name="l02063"></a>02063 } <a name="l02064"></a>02064 } <span class="keywordflow">break</span>; <a name="l02065"></a>02065 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d723af579e4a8301026aeabc1ccbabe2f4">PSM_CHROOT_OUT</a>: <a name="l02066"></a>02066 <span class="comment">/* Restore root directory if changed. */</span> <a name="l02067"></a>02067 <span class="keywordflow">if</span> (psm-><a class="code" href="structrpmpsm__s.html#ec50126e16467ac579dc566911d78b9c">chrootDone</a>) { <a name="l02068"></a>02068 <span class="keyword">const</span> <span class="keywordtype">char</span> * rootDir = <a class="code" href="group__rpmts.html#gdf9c9eb5ddc9ec497575bfc0335ace15">rpmtsRootDir</a>(ts); <a name="l02069"></a>02069 <span class="keyword">const</span> <span class="keywordtype">char</span> * currDir = <a class="code" href="group__rpmts.html#g4126dff567b54b5acae71c565075e3da">rpmtsCurrDir</a>(ts); <a name="l02070"></a>02070 <span class="comment">/*@-superuser@*/</span> <a name="l02071"></a>02071 <span class="keywordflow">if</span> (rootDir != NULL && strcmp(rootDir, <span class="stringliteral">"/"</span>) && *rootDir == <span class="charliteral">'/'</span>) <a name="l02072"></a>02072 rc = chroot(<span class="stringliteral">"."</span>); <a name="l02073"></a>02073 <span class="comment">/*@=superuser@*/</span> <a name="l02074"></a>02074 psm-><a class="code" href="structrpmpsm__s.html#ec50126e16467ac579dc566911d78b9c">chrootDone</a> = 0; <a name="l02075"></a>02075 (void) <a class="code" href="group__rpmts.html#g1b06d5545f2232201dc199bcbe9d0f04">rpmtsSetChrootDone</a>(ts, 0); <a name="l02076"></a>02076 <span class="keywordflow">if</span> (currDir != NULL) <span class="comment">/* XXX can't happen */</span> <a name="l02077"></a>02077 xx = chdir(currDir); <a name="l02078"></a>02078 } <a name="l02079"></a>02079 <span class="keywordflow">break</span>; <a name="l02080"></a>02080 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d72b47b48e07162140677ec64ab7e01b3d">PSM_SCRIPT</a>: <span class="comment">/* Run current package scriptlets. */</span> <a name="l02081"></a>02081 rc = <a class="code" href="psm_8c.html#9de1f2da649cf43349935f1dc84292c1">runInstScript</a>(psm); <a name="l02082"></a>02082 <span class="keywordflow">break</span>; <a name="l02083"></a>02083 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d70b1528122057f7119cbb08ae287cf601">PSM_TRIGGERS</a>: <a name="l02084"></a>02084 <span class="comment">/* Run triggers in other package(s) this package sets off. */</span> <a name="l02085"></a>02085 rc = <a class="code" href="psm_8c.html#7de58142a72a3ddf82cfbde1d5353d7d">runTriggers</a>(psm); <a name="l02086"></a>02086 <span class="keywordflow">break</span>; <a name="l02087"></a>02087 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7ef4e9b3642fd5a2ef0d6a553dc39c1c2">PSM_IMMED_TRIGGERS</a>: <a name="l02088"></a>02088 <span class="comment">/* Run triggers in this package other package(s) set off. */</span> <a name="l02089"></a>02089 rc = <a class="code" href="psm_8c.html#26f2ebfa7d7fb2d60d05f24e43896b90">runImmedTriggers</a>(psm); <a name="l02090"></a>02090 <span class="keywordflow">break</span>; <a name="l02091"></a>02091 <a name="l02092"></a>02092 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75663b12a4fdde3fa9e30f9919aa881a6">PSM_RPMIO_FLAGS</a>: <a name="l02093"></a>02093 { <span class="keyword">const</span> <span class="keywordtype">char</span> * payload_compressor = NULL; <a name="l02094"></a>02094 <span class="keywordtype">char</span> * t; <a name="l02095"></a>02095 <a name="l02096"></a>02096 <span class="comment">/*@-branchstate@*/</span> <a name="l02097"></a>02097 <span class="keywordflow">if</span> (!hge(fi->h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2fb185e4da76f4495f79bae39a6fd90d">RPMTAG_PAYLOADCOMPRESSOR</a>, NULL, <a name="l02098"></a>02098 (<span class="keywordtype">void</span> **) &payload_compressor, NULL)) <a name="l02099"></a>02099 payload_compressor = <span class="stringliteral">"gzip"</span>; <a name="l02100"></a>02100 <span class="comment">/*@=branchstate@*/</span> <a name="l02101"></a>02101 psm-><a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a> = t = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(<span class="keyword">sizeof</span>(<span class="stringliteral">"w9.gzdio"</span>)); <a name="l02102"></a>02102 *t = <span class="charliteral">'\0'</span>; <a name="l02103"></a>02103 t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, ((psm-><a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7bce40fc905933619b53f045e6c2c31a3">PSM_PKGSAVE</a>) ? <span class="stringliteral">"w9"</span> : <span class="stringliteral">"r"</span>)); <a name="l02104"></a>02104 <span class="keywordflow">if</span> (!strcmp(payload_compressor, <span class="stringliteral">"gzip"</span>)) <a name="l02105"></a>02105 t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, <span class="stringliteral">".gzdio"</span>); <a name="l02106"></a>02106 <span class="keywordflow">if</span> (!strcmp(payload_compressor, <span class="stringliteral">"bzip2"</span>)) <a name="l02107"></a>02107 t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, <span class="stringliteral">".bzdio"</span>); <a name="l02108"></a>02108 rc = <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a>; <a name="l02109"></a>02109 } <span class="keywordflow">break</span>; <a name="l02110"></a>02110 <a name="l02111"></a>02111 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d75bfc410902ed4c46f8a85ad5c04d7f32">PSM_RPMDB_LOAD</a>: <a name="l02112"></a>02112 assert(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> == NULL); <a name="l02113"></a>02113 psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmts.html#g16ebec8beff205af120f86b2b6c7e25d">rpmtsInitIterator</a>(ts, <a class="code" href="rpmlib_8h.html#39fcc4d1b52ef92e63e74b0f13ded353">RPMDBI_PACKAGES</a>, <a name="l02114"></a>02114 &fi->record, <span class="keyword">sizeof</span>(fi->record)); <a name="l02115"></a>02115 <a name="l02116"></a>02116 fi->h = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>); <a name="l02117"></a>02117 <span class="keywordflow">if</span> (fi->h != NULL) <a name="l02118"></a>02118 fi->h = <a class="code" href="group__header.html#g4f07e8040ed3195e374a44919ffe97c2">headerLink</a>(fi->h); <a name="l02119"></a>02119 <a name="l02120"></a>02120 psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(psm-><a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>); <a name="l02121"></a>02121 rc = (fi->h != NULL ? <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e801b6a502fb02cfd2c16380fa6ac52902d4">RPMRC_OK</a> : <a class="code" href="rpmlib_8h.html#a30b10f32f3a5e820ec05d099993e8012e6125219f145fbb73353bc6ccac5cfc">RPMRC_FAIL</a>); <a name="l02122"></a>02122 <span class="keywordflow">break</span>; <a name="l02123"></a>02123 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d71165155666a84c2b8aec935c2920baa1">PSM_RPMDB_ADD</a>: <a name="l02124"></a>02124 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & RPMTRANS_FLAG_TEST) <span class="keywordflow">break</span>; <a name="l02125"></a>02125 <span class="keywordflow">if</span> (fi->h == NULL) <span class="keywordflow">break</span>; <span class="comment">/* XXX can't happen */</span> <a name="l02126"></a>02126 (void) <a class="code" href="group__rpmio.html#g7f69caae88f9572093fc8b0adf8ecf65">rpmswEnter</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e84d802f91d5b76c20daf5dd1f579883e0">RPMTS_OP_DBADD</a>), 0); <a name="l02127"></a>02127 <span class="keywordflow">if</span> (!(<a class="code" href="group__rpmts.html#g47b09cd4427cbb6c23d124e6dad07f81">rpmtsVSFlags</a>(ts) & <a class="code" href="rpmts_8h.html#081c96e55d490b5e99505eda7e93602daa6d0b979fd5881394e98f2912cff11f">RPMVSF_NOHDRCHK</a>)) <a name="l02128"></a>02128 rc = <a class="code" href="group__rpmdb.html#g3ecc67fc1e93747c6314cb6a0fc05197">rpmdbAdd</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), <a class="code" href="group__rpmts.html#gcc57dec2026120db7add45ef83859863">rpmtsGetTid</a>(ts), fi->h, <a name="l02129"></a>02129 ts, <a class="code" href="package_8c.html#46cbd8d07696edbd85f72addf868bedd">headerCheck</a>); <a name="l02130"></a>02130 <span class="keywordflow">else</span> <a name="l02131"></a>02131 rc = <a class="code" href="group__rpmdb.html#g3ecc67fc1e93747c6314cb6a0fc05197">rpmdbAdd</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), <a class="code" href="group__rpmts.html#gcc57dec2026120db7add45ef83859863">rpmtsGetTid</a>(ts), fi->h, <a name="l02132"></a>02132 NULL, NULL); <a name="l02133"></a>02133 <a name="l02134"></a>02134 <span class="comment">/* Set the database instance so consumers (i.e. rpmtsRun())</span> <a name="l02135"></a>02135 <span class="comment"> * can add this to a rollback transaction.</span> <a name="l02136"></a>02136 <span class="comment"> */</span> <a name="l02137"></a>02137 <a class="code" href="rpmte_8c.html#b4d1a7b49d3935236f567bb3fc38f776">rpmteSetDBInstance</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>, <a class="code" href="psm_8c.html#eee80dc922ecd4ac747fb5144e7ab638">myinstall_instance</a>); <a name="l02138"></a>02138 <a name="l02139"></a>02139 <span class="comment">/*</span> <a name="l02140"></a>02140 <span class="comment"> * If the score exists and this is not a rollback or autorollback</span> <a name="l02141"></a>02141 <span class="comment"> * then lets check off installed for this package.</span> <a name="l02142"></a>02142 <span class="comment"> */</span> <a name="l02143"></a>02143 <span class="keywordflow">if</span> (<a class="code" href="rpmts_8c.html#f8a6938a2063c15dd3cc7d78bbc0745f">rpmtsGetScore</a>(ts) != NULL && <a name="l02144"></a>02144 <a class="code" href="rpmts_8c.html#0ecab570b23d1701f7adebd4591ee145">rpmtsGetType</a>(ts) != <a class="code" href="rpmts_8h.html#df8d91cfe26784d7698c0a7ff9d7c5a4b85324ec78df9059f2de60763a73c394">RPMTRANS_TYPE_ROLLBACK</a> && <a name="l02145"></a>02145 <a class="code" href="rpmts_8c.html#0ecab570b23d1701f7adebd4591ee145">rpmtsGetType</a>(ts) != <a class="code" href="rpmts_8h.html#df8d91cfe26784d7698c0a7ff9d7c5a4290f32ddd88d0da7de23261f4200fcd8">RPMTRANS_TYPE_AUTOROLLBACK</a>) <a name="l02146"></a>02146 { <a name="l02147"></a>02147 <span class="comment">/* Get the score, if its not NULL, get the appropriate</span> <a name="l02148"></a>02148 <span class="comment"> * score entry.</span> <a name="l02149"></a>02149 <span class="comment"> */</span> <a name="l02150"></a>02150 rpmtsScore score = <a class="code" href="rpmts_8c.html#f8a6938a2063c15dd3cc7d78bbc0745f">rpmtsGetScore</a>(ts); <a name="l02151"></a>02151 <span class="keywordflow">if</span> (score != NULL) { <a name="l02152"></a>02152 rpmtsScoreEntry se; <a name="l02153"></a>02153 <span class="comment">/* OK, we got a real score so lets get the appropriate</span> <a name="l02154"></a>02154 <span class="comment"> * score entry.</span> <a name="l02155"></a>02155 <span class="comment"> */</span> <a name="l02156"></a>02156 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a name="l02157"></a>02157 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"Attempting to mark %s as installed in score board(%u).\n"</span>), <a name="l02158"></a>02158 <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>), (<span class="keywordtype">unsigned</span>) score); <a name="l02159"></a>02159 se = <a class="code" href="rpmts_8c.html#769d1d67118a174f004cc9144ff19548">rpmtsScoreGetEntry</a>(score, <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l02160"></a>02160 <span class="keywordflow">if</span> (se != NULL) se->installed = 1; <a name="l02161"></a>02161 } <a name="l02162"></a>02162 } <a name="l02163"></a>02163 (void) <a class="code" href="group__rpmio.html#g59c7d4152875cee4e893b5a27ce6b02a">rpmswExit</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e84d802f91d5b76c20daf5dd1f579883e0">RPMTS_OP_DBADD</a>), 0); <a name="l02164"></a>02164 <span class="keywordflow">break</span>; <a name="l02165"></a>02165 <span class="keywordflow">case</span> <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7f7be35ae01ed37e6be9c2cf2a6bb7994">PSM_RPMDB_REMOVE</a>: <a name="l02166"></a>02166 <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) & RPMTRANS_FLAG_TEST) <span class="keywordflow">break</span>; <a name="l02167"></a>02167 (void) <a class="code" href="group__rpmio.html#g7f69caae88f9572093fc8b0adf8ecf65">rpmswEnter</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e805da8ae6b82fd3208443c6b90c95e070">RPMTS_OP_DBREMOVE</a>), 0); <a name="l02168"></a>02168 rc = <a class="code" href="group__rpmdb.html#g82aaf2d4daa20c89318a3025eff5a2b6">rpmdbRemove</a>(<a class="code" href="group__rpmts.html#ge89623057eedd0d767dbd4e8d24badd4">rpmtsGetRdb</a>(ts), <a class="code" href="group__rpmts.html#gcc57dec2026120db7add45ef83859863">rpmtsGetTid</a>(ts), fi->record, <a name="l02169"></a>02169 NULL, NULL); <a name="l02170"></a>02170 <a name="l02171"></a>02171 <span class="comment">/*</span> <a name="l02172"></a>02172 <span class="comment"> * If the score exists and this is not a rollback or autorollback</span> <a name="l02173"></a>02173 <span class="comment"> * then lets check off erased for this package.</span> <a name="l02174"></a>02174 <span class="comment"> */</span> <a name="l02175"></a>02175 <span class="keywordflow">if</span> (<a class="code" href="rpmts_8c.html#f8a6938a2063c15dd3cc7d78bbc0745f">rpmtsGetScore</a>(ts) != NULL && <a name="l02176"></a>02176 <a class="code" href="rpmts_8c.html#0ecab570b23d1701f7adebd4591ee145">rpmtsGetType</a>(ts) != <a class="code" href="rpmts_8h.html#df8d91cfe26784d7698c0a7ff9d7c5a4b85324ec78df9059f2de60763a73c394">RPMTRANS_TYPE_ROLLBACK</a> && <a name="l02177"></a>02177 <a class="code" href="rpmts_8c.html#0ecab570b23d1701f7adebd4591ee145">rpmtsGetType</a>(ts) != <a class="code" href="rpmts_8h.html#df8d91cfe26784d7698c0a7ff9d7c5a4290f32ddd88d0da7de23261f4200fcd8">RPMTRANS_TYPE_AUTOROLLBACK</a>) <a name="l02178"></a>02178 { <a name="l02179"></a>02179 <span class="comment">/* Get the score, if its not NULL, get the appropriate</span> <a name="l02180"></a>02180 <span class="comment"> * score entry.</span> <a name="l02181"></a>02181 <span class="comment"> */</span> <a name="l02182"></a>02182 rpmtsScore score = <a class="code" href="rpmts_8c.html#f8a6938a2063c15dd3cc7d78bbc0745f">rpmtsGetScore</a>(ts); <a name="l02183"></a>02183 <a name="l02184"></a>02184 <span class="keywordflow">if</span> (score != NULL) { <span class="comment">/* XXX: Can't happen */</span> <a name="l02185"></a>02185 rpmtsScoreEntry se; <a name="l02186"></a>02186 <span class="comment">/* OK, we got a real score so lets get the appropriate</span> <a name="l02187"></a>02187 <span class="comment"> * score entry.</span> <a name="l02188"></a>02188 <span class="comment"> */</span> <a name="l02189"></a>02189 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <a name="l02190"></a>02190 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"Attempting to mark %s as erased in score board(0x%x).\n"</span>), <a name="l02191"></a>02191 <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>), (<span class="keywordtype">unsigned</span>) score); <a name="l02192"></a>02192 se = <a class="code" href="rpmts_8c.html#769d1d67118a174f004cc9144ff19548">rpmtsScoreGetEntry</a>(score, <a class="code" href="rpmte_8c.html#16f587927a8643fc2bf4a0407688f366">rpmteN</a>(psm-><a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)); <a name="l02193"></a>02193 <span class="keywordflow">if</span> (se != NULL) se->erased = 1; <a name="l02194"></a>02194 } <a name="l02195"></a>02195 } <a name="l02196"></a>02196 <a name="l02197"></a>02197 (void) <a class="code" href="group__rpmio.html#g59c7d4152875cee4e893b5a27ce6b02a">rpmswExit</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(ts, <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e805da8ae6b82fd3208443c6b90c95e070">RPMTS_OP_DBREMOVE</a>), 0); <a name="l02198"></a>02198 <span class="keywordflow">break</span>; <a name="l02199"></a>02199 <a name="l02200"></a>02200 <span class="keywordflow">default</span>: <a name="l02201"></a>02201 <span class="keywordflow">break</span>; <a name="l02202"></a>02202 <span class="comment">/*@i@*/</span> } <a name="l02203"></a>02203 <span class="comment">/*@=branchstate@*/</span> <a name="l02204"></a>02204 <a name="l02205"></a>02205 <span class="comment">/*@-nullstate@*/</span> <span class="comment">/* FIX: psm->oh and psm->fi->h may be NULL. */</span> <a name="l02206"></a>02206 <span class="keywordflow">return</span> rc; <a name="l02207"></a>02207 <span class="comment">/*@=nullstate@*/</span> <a name="l02208"></a>02208 } <a name="l02209"></a>02209 <span class="comment">/*@=bounds =nullpass@*/</span> </pre></div><hr size="1"><address style="align: right;"><small>Generated on 1 Oct 2013 for rpm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address> </body> </html>