Sophie

Sophie

distrib > CentOS > 5 > x86_64 > by-pkgid > 67e32647b06c0323bf90c6b54a6438d1 > files > 488

rpm-apidocs-4.4.2.3-34.el5.x86_64.rpm

<!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&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;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 &lt;<a class="code" href="rpmio__internal_8h.html">rpmio_internal.h</a>&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;<a class="code" href="rpmlib_8h.html">rpmlib.h</a>&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;<a class="code" href="rpmmacro_8h.html">rpmmacro.h</a>&gt;</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;<a class="code" href="rpmurl_8h.html">rpmurl.h</a>&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;rpmlua.h&gt;</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-&gt;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-&gt;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> **) &amp;epochOne, NULL))
<a name="l00069"></a>00069         epochOne = &amp;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> **) &amp;epochTwo, NULL))
<a name="l00071"></a>00071         epochTwo = &amp;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 &lt; *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 &gt; *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> **) &amp;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> **) &amp;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> **) &amp;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> **) &amp;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-&gt;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-&gt;<a class="code" href="structtagMacro.html#3eab10c4f4108b2876421332d947558e">macroname</a> != NULL; tagm++) {
<a name="l00131"></a>00131         <span class="keywordflow">if</span> (!hge(h, tagm-&gt;tag, &amp;type, (<span class="keywordtype">void</span> **) &amp;<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-&gt;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-&gt;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-&gt;<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-&gt;<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-&gt;hge;
<a name="l00170"></a>00170     sharedFileInfo replaced = fi-&gt;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) &gt; 0 &amp;&amp; fi-&gt;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-&gt;otherPkg; sfi++) {
<a name="l00183"></a>00183         <span class="keywordflow">if</span> (prev &amp;&amp; prev == sfi-&gt;otherPkg)
<a name="l00184"></a>00184             <span class="keywordflow">continue</span>;
<a name="l00185"></a>00185         prev = sfi-&gt;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-&gt;otherPkg; sfi++) {
<a name="l00195"></a>00195         <span class="keywordflow">if</span> (prev &amp;&amp; prev == sfi-&gt;otherPkg)
<a name="l00196"></a>00196             <span class="keywordflow">continue</span>;
<a name="l00197"></a>00197         prev = sfi-&gt;otherPkg;
<a name="l00198"></a>00198         offsets[num++] = sfi-&gt;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> **)&amp;secStates, &amp;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-&gt;otherPkg &amp;&amp; sfi-&gt;otherPkg == prev) {
<a name="l00219"></a>00219             assert(sfi-&gt;otherFileNum &lt; count);
<a name="l00220"></a>00220             <span class="keywordflow">if</span> (secStates[sfi-&gt;otherFileNum] != <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9fa28e91fc9058fd09126436afcedd8596f">RPMFILE_STATE_REPLACED</a>) {
<a name="l00221"></a>00221                 secStates[sfi-&gt;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 = &amp;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-&gt;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>, &amp;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-&gt;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-&gt;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-&gt;h may be null */</span>
<a name="l00303"></a>00303     fi-&gt;te-&gt;h = <a class="code" href="group__header.html#g4f07e8040ed3195e374a44919ffe97c2">headerLink</a>(fi-&gt;h);
<a name="l00304"></a>00304 <span class="comment">/*@=nullpass@*/</span>
<a name="l00305"></a>00305     fi-&gt;te-&gt;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-&gt;hge;
<a name="l00307"></a>00307     hfd = fi-&gt;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-&gt;h);
<a name="l00310"></a>00310 
<a name="l00311"></a>00311     psm-&gt;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-&gt;te = fi-&gt;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-&gt;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-&gt;fmd5s = hfd(fi-&gt;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-&gt;fmapflags = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fi-&gt;fmapflags);
<a name="l00327"></a>00327     fi-&gt;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-&gt;uid = getuid();
<a name="l00330"></a>00330     fi-&gt;gid = getgid();
<a name="l00331"></a>00331     fi-&gt;astriplen = 0;
<a name="l00332"></a>00332     fi-&gt;striplen = 0;
<a name="l00333"></a>00333 
<a name="l00334"></a>00334     <span class="keywordflow">for</span> (i = 0; i &lt; fi-&gt;fc; i++)
<a name="l00335"></a>00335         fi-&gt;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-&gt;fc;
<a name="l00338"></a>00338 
<a name="l00339"></a>00339     if (fi-&gt;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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bea94338039b3e67d9ece3f8c8875c7fc">RPMTAG_BASENAMES</a>, &amp;fi-&gt;apath, NULL);
<a name="l00341"></a>00341 
<a name="l00342"></a>00342         if (<a class="code" href="group__header.html#g0f25e23afbd3fb4799d579080fbb0942">headerIsEntry</a>(fi-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507ba1dbb68c610b969dbb5598bdf44a12c7">RPMTAG_COOKIE</a>))
<a name="l00343"></a>00343             for (i = 0; i &lt; fi-&gt;fc; i++)
<a name="l00344"></a>00344                 <span class="keywordflow">if</span> (fi-&gt;fflags[i] &amp; <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>-&gt;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 &lt; <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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>-&gt;apath[i];
<a name="l00351"></a>00351             t += strlen(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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 &lt; fi-&gt;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>-&gt;dnl = hfd(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dnl, -1);
<a name="l00377"></a>00377 
<a name="l00378"></a>00378         <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dc = 2;
<a name="l00379"></a>00379         <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dnl = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dc * <span class="keyword">sizeof</span>(*<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dnl)
<a name="l00380"></a>00380                         + <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;fc * <span class="keyword">sizeof</span>(*<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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>-&gt;dil = (<span class="keywordtype">int</span> *)(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dnl + <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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>-&gt;dil, 0, <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;fc * <span class="keyword">sizeof</span>(*<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dil));
<a name="l00386"></a>00386         <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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>-&gt;dnl[0] = t = (<span class="keywordtype">char</span> *)(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;dil + <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;fc);
<a name="l00389"></a>00389         <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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>-&gt;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>-&gt;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-&gt;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-&gt;fi-&gt;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 &amp;&amp; specFile &amp;&amp; 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-&gt;fi = <a class="code" href="rpmfi_8c.html#a57c23e38b8fcd2028d94e0e5f22367e">rpmfiFree</a>(psm-&gt;fi);
<a name="l00422"></a>00422     psm-&gt;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>-&gt;te-&gt;h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;te-&gt;h);
<a name="l00429"></a>00429         <span class="keywordflow">if</span> (<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;te-&gt;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>-&gt;te-&gt;fd);
<a name="l00431"></a>00431         <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;te-&gt;fd = NULL;
<a name="l00432"></a>00432         <a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a>-&gt;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-&gt;ts = <a class="code" href="group__rpmts.html#g5315165a6e80a0c71dbe5eb07dd18f58">rpmtsFree</a>(psm-&gt;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-&gt;<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>(&amp;psm-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>);
<a name="l00485"></a>00485     msecs = psm-&gt;<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>), &amp;psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, (<span class="keywordtype">unsigned</span>)psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a>, psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> != <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb973ae4c44ec1f58f57377961d4e88d2">RPMTAG_PREIN</a> &amp;&amp;
<a name="l00500"></a>00500                      psm-&gt;<a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a> != <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b7e8404eedc1a985e64340e25c2f74615">RPMTAG_PREUN</a> &amp;&amp;
<a name="l00501"></a>00501                      psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a>, psm-&gt;<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-&gt;<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-&gt;<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, &amp;n, &amp;v, &amp;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 &gt;= 0) {
<a name="l00534"></a>00534             <span class="comment">/*@-superuser -noeffect @*/</span>
<a name="l00535"></a>00535             <span class="keywordflow">if</span> (rootDir != NULL &amp;&amp; strcmp(rootDir, <span class="stringliteral">"/"</span>) &amp;&amp; *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 &lt; progArgc &amp;&amp; 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 &gt;= 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 &gt;= 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 &gt;= 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 &amp;&amp; strcmp(rootDir, <span class="stringliteral">"/"</span>) &amp;&amp; *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-&gt;<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-&gt;<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-&gt;hge;
<a name="l00636"></a>00636     <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi-&gt;hfd ? fi-&gt;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 &amp;&amp; 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, &amp;n, &amp;v, &amp;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> **) &amp;a, NULL);
<a name="l00661"></a>00661 
<a name="l00662"></a>00662     <span class="keywordflow">if</span> (progArgv &amp;&amp; strcmp(progArgv[0], <span class="stringliteral">"&lt;lua&gt;"</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 &lt;lua&gt; scriptlet.\n"</span>),
<a name="l00666"></a>00666                 psm-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-&gt;<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-&gt;<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 &amp;&amp; progArgv != NULL &amp;&amp; psm-&gt;<a class="code" href="structrpmpsm__s.html#0af58685c1524abefa73fb132229913f">unorderedSuccessor</a>) {
<a name="l00680"></a>00680         <span class="keywordflow">if</span> (ldconfig_done &amp;&amp; !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-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), n, v, r, a,
<a name="l00692"></a>00692                 (psm-&gt;<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 &amp;&amp; !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 &amp;&amp; a[0] == <span class="charliteral">'i'</span> &amp;&amp; a[1] != <span class="charliteral">'\0'</span> &amp;&amp; a[2] == <span class="charliteral">'8'</span> &amp;&amp; a[3] == <span class="charliteral">'6'</span>)
<a name="l00710"></a>00710      &amp;&amp; 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>, &amp;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 -&gt; /emul/ia32, ick. */</span>
<a name="l00721"></a>00721         <span class="keywordflow">if</span> (newPath != NULL &amp;&amp; *newPath != <span class="charliteral">'\0'</span>
<a name="l00722"></a>00722          &amp;&amp; strlen(newPath) &gt;= (<span class="keyword">sizeof</span>(<span class="stringliteral">"/emul/i386"</span>)-1)
<a name="l00723"></a>00723          &amp;&amp; newPath[0] == <span class="charliteral">'/'</span> &amp;&amp; newPath[1] == <span class="charliteral">'e'</span> &amp;&amp; newPath[2] == <span class="charliteral">'m'</span>
<a name="l00724"></a>00724          &amp;&amp; newPath[3] == <span class="charliteral">'u'</span> &amp;&amp; newPath[4] == <span class="charliteral">'l'</span> &amp;&amp; newPath[5] == <span class="charliteral">'/'</span>
<a name="l00725"></a>00725          &amp;&amp; newPath[6] == <span class="charliteral">'i'</span> &amp;&amp; newPath[8] == <span class="charliteral">'8'</span> &amp;&amp; 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>, &amp;ipt, (<span class="keywordtype">void</span> **) &amp;prefixes, &amp;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> **) &amp;oldPrefix, NULL)) {
<a name="l00743"></a>00743         prefixes = &amp;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 &lt; numPrefixes; i++) {
<a name="l00752"></a>00752         len = strlen(prefixes[i]);
<a name="l00753"></a>00753         <span class="keywordflow">if</span> (len &gt; 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>), &amp;fn, &amp;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>)) {
<a name="l00763"></a>00763             <span class="keywordflow">if</span> (prefixes != NULL &amp;&amp; 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>() &amp;&amp;
<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 &amp;&amp; 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) &amp;&amp; rootDir != NULL &amp;&amp;
<a name="l00783"></a>00783                 !(rootDir[0] == <span class="charliteral">'/'</span> &amp;&amp; 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 &gt;= 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 &gt;= 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>(&amp;psm-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>);
<a name="l00821"></a>00821     <span class="keywordflow">if</span> (psm-&gt;<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 &lt; 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 &amp; 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 &gt; STDERR_FILENO &amp;&amp; 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 &gt; STDERR_FILENO &amp;&amp; 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 &amp;&amp; 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 &lt; 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-&gt;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) &amp;&amp;
<a name="l00896"></a>00896                 !(rootDir[0] == <span class="charliteral">'/'</span> &amp;&amp; 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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a> &gt;= 0 &amp;&amp; !strcmp(argv[0], <span class="stringliteral">"/usr/sbin/glibc_post_upgrade"</span>) &amp;&amp; WEXITSTATUS(psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#be51908cc11dfab4176ca2f1ba39d8ba">reaped</a> &lt; 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-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#8f30ac4a445872588abad49c384b92e8">child</a>, psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#f7921b4d021f1f06ccefde88d06b3143">sq</a>.<a class="code" href="structrpmsqElem.html#6a4ffd880d84a6717338f3c660411645">status</a>) || WEXITSTATUS(psm-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;hge;
<a name="l00998"></a>00998     <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi-&gt;hfd ? fi-&gt;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-&gt;h, psm-&gt;<a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>, &amp;stt, (<span class="keywordtype">void</span> **) &amp;script, NULL);
<a name="l01012"></a>01012     xx = hge(fi-&gt;h, psm-&gt;<a class="code" href="structrpmpsm__s.html#395e28ea3a310dbef04bb67230f71674">progTag</a>, &amp;ptt, (<span class="keywordtype">void</span> **) &amp;progArgv, &amp;progArgc);
<a name="l01013"></a>01013     <span class="keywordflow">if</span> (progArgv == NULL &amp;&amp; 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 &amp;&amp; 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-&gt;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-&gt;h, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#0a834d4faa1a25d049c4bb4af1905b5b">scriptTag</a>), progArgc, argv,
<a name="l01027"></a>01027                 script, psm-&gt;<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-&gt;<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-&gt;<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-&gt;hge;
<a name="l01056"></a>01056     <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi-&gt;hfd ? fi-&gt;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, &amp;sourceName, NULL, NULL);
<a name="l01068"></a>01068     xx = <a class="code" href="group__header.html#g50514667473d848fc998df421ca3ce12">headerNVR</a>(triggeredH, &amp;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)) &gt;= 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 &amp; psm-&gt;<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>, &amp;tit,
<a name="l01096"></a>01096                        (<span class="keywordtype">void</span> **) &amp;triggerIndices, NULL) &amp;&amp;
<a name="l01097"></a>01097                 hge(triggeredH, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b1fe18964738003cafe10d95640a800a8">RPMTAG_TRIGGERSCRIPTS</a>, &amp;tst,
<a name="l01098"></a>01098                        (<span class="keywordtype">void</span> **) &amp;triggerScripts, NULL) &amp;&amp;
<a name="l01099"></a>01099                 hge(triggeredH, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2e4278f900fe835410b559f730504cbf">RPMTAG_TRIGGERSCRIPTPROG</a>, &amp;tpt,
<a name="l01100"></a>01100                        (<span class="keywordtype">void</span> **) &amp;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 &lt; 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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a>;
<a name="l01165"></a>01165     <span class="keywordflow">if</span> (numPackage &lt; 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 &amp;&amp; fi-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#b4a69df3fe826ebbfeb06b67ce6811e9">countCorrection</a>;
<a name="l01172"></a>01172 
<a name="l01173"></a>01173         psm-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;<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-&gt;hge;
<a name="l01198"></a>01198     <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi-&gt;hfd ? fi-&gt;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-&gt;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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2a0e9d0f76ad91d779cbbb219e4227c5">RPMTAG_TRIGGERNAME</a>, &amp;tnt,
<a name="l01210"></a>01210                         (<span class="keywordtype">void</span> **) &amp;triggerNames, &amp;numTriggers) &amp;&amp;
<a name="l01211"></a>01211                 hge(fi-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b262569abd4cb1b37cfded2646c66758c">RPMTAG_TRIGGERINDEX</a>, &amp;tit,
<a name="l01212"></a>01212                         (<span class="keywordtype">void</span> **) &amp;triggerIndices, &amp;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 &lt; 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-&gt;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> &amp;&amp; msg != NULL)
<a name="l01288"></a>01288 fprintf(stderr, <span class="stringliteral">"--&gt; psm %p -- %d %s at %s:%u\n"</span>, psm, psm-&gt;<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-&gt;<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-&gt;<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> &amp;&amp; msg != NULL)
<a name="l01301"></a>01301 fprintf(stderr, <span class="stringliteral">"--&gt; psm %p ++ %d %s at %s:%u\n"</span>, psm, psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#f1b440c33fcf9e7cee1e6f99930d8fbe">nrefs</a> &gt; 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-&gt;<a class="code" href="structrpmpsm__s.html#d5a2877767cafc2f13e9584211fd6918">fi</a> = <a class="code" href="rpmfi_8c.html#a57c23e38b8fcd2028d94e0e5f22367e">rpmfiFree</a>(psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a> = <a class="code" href="rpmte_8c.html#811bf4f0099b3d587035b1cf27e11f3b">rpmteFree</a>(psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#b17dc709e9943bb645177f1c0bc87983">ts</a> = <a class="code" href="group__rpmts.html#g5315165a6e80a0c71dbe5eb07dd18f58">rpmtsFree</a>(psm-&gt;<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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;<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-&gt;<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-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;hge;
<a name="l01389"></a>01389     <a class="code" href="rpmlib_8h.html#0a7d6730794fa9c039746b53d216bda6">HFD_t</a> hfd = (fi-&gt;hfd ? fi-&gt;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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="rpmte_8c.html#53178d155e0da8f9a111d19bf4cdd279">rpmteNEVR</a>(psm-&gt;<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) &amp; <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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>));
<a name="l01409"></a>01409         <span class="keywordflow">if</span> (psm-&gt;<a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a> &lt; 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 &amp;&amp;
<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> &amp;&amp;
<a name="l01425"></a>01425             (psm-&gt;<a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> &amp; ~(<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-&gt;<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 &amp;&amp; se-&gt;installed &amp;&amp;
<a name="l01450"></a>01450                     !se-&gt;erased &amp;&amp;
<a name="l01451"></a>01451                     (se-&gt;te_types &amp; (<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#9e1e7ad4a9921f6c45d9b28f13fffad5">scriptArg</a> = psm-&gt;<a class="code" href="structrpmpsm__s.html#1a711e3012b2f1d82d3266d462b43f78">npkgs_installed</a> + 1;
<a name="l01460"></a>01460 
<a name="l01461"></a>01461 assert(psm-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> == NULL);
<a name="l01462"></a>01462             psm-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>)) != NULL) {
<a name="l01477"></a>01477                 fi-&gt;record = <a class="code" href="group__rpmdb.html#g4fefb65ede996aa0edcc80286ca640d1">rpmdbGetIteratorOffset</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>);
<a name="l01478"></a>01478                 psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(psm-&gt;<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-&gt;fstates == NULL &amp;&amp; fc &gt; 0) {
<a name="l01486"></a>01486                 fi-&gt;fstates = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(<span class="keyword">sizeof</span>(*fi-&gt;fstates) * fc);
<a name="l01487"></a>01487                 memset(fi-&gt;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) &amp; <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 &lt;= 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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bdfd62abbdbbb66a3260b55022d8bca2a">RPMTAG_DEFAULTPREFIX</a>, NULL, (<span class="keywordtype">void</span> **) &amp;p, NULL);
<a name="l01500"></a>01500                 fi-&gt;striplen = (xx ? strlen(p) + 1 : 1);
<a name="l01501"></a>01501             }
<a name="l01502"></a>01502             fi-&gt;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-&gt;mapflags &amp; <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-&gt;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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b4fd37665b40d306e860e1ef01eca9e66">RPMTAG_ORIGBASENAMES</a>, &amp;fi-&gt;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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bea94338039b3e67d9ece3f8c8875c7fc">RPMTAG_BASENAMES</a>, &amp;fi-&gt;apath, NULL);
<a name="l01509"></a>01509         
<a name="l01510"></a>01510             <span class="keywordflow">if</span> (fi-&gt;fuser == NULL)
<a name="l01511"></a>01511                 xx = hge(fi-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b5f365f44d1f93645ecb3740a8029b9b2">RPMTAG_FILEUSERNAME</a>, NULL,
<a name="l01512"></a>01512                                 (<span class="keywordtype">void</span> **) &amp;fi-&gt;fuser, NULL);
<a name="l01513"></a>01513             <span class="keywordflow">if</span> (fi-&gt;fgroup == NULL)
<a name="l01514"></a>01514                 xx = hge(fi-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bb71c2ec302ffe1c46835859a71b9673d">RPMTAG_FILEGROUPNAME</a>, NULL,
<a name="l01515"></a>01515                                 (<span class="keywordtype">void</span> **) &amp;fi-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a> || psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#9e1e7ad4a9921f6c45d9b28f13fffad5">scriptArg</a> = psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>)
<a name="l01525"></a>01525 psm-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>-&gt;h = <a class="code" href="group__header.html#g4f07e8040ed3195e374a44919ffe97c2">headerLink</a>(fi-&gt;h);
<a name="l01526"></a>01526         }
<a name="l01527"></a>01527         <span class="keywordflow">if</span> (psm-&gt;<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-&gt;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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a>, &amp;psm-&gt;<a class="code" href="structrpmpsm__s.html#573071814b347959a850853fc4bcb9dd">pkgfn</a>);
<a name="l01539"></a>01539                 psm-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> = <a class="code" href="rpmio_8c.html#2eb611bd97d6d937d2296bcecd83ee31">Fopen</a>(psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a> == NULL || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(psm-&gt;<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) &amp; 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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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) &amp; <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) &amp; <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-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, <a class="code" href="psm_8c.html#5b7a0479893c233582d06b144842c660">tag2sln</a>(psm-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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) &amp; <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) &amp; <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-&gt;<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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507bbf199b0f74f4a4704e89b424c76ac4db">RPMTAG_HEADERIMMUTABLE</a>, &amp;uht, &amp;uh, &amp;uhc)) {
<a name="l01620"></a>01620                     psm-&gt;<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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b6357cd75999a2729d1dbfec1798d4645">RPMTAG_HEADERIMAGE</a>, &amp;uht, &amp;uh, &amp;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-&gt;<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, &amp;tag, &amp;type, &amp;ptr, &amp;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-&gt;<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-&gt;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, &amp;archnum);
<a name="l01666"></a>01666                 <a class="code" href="group__rpmrc.html#g2ac53e53de5bbce584be8b01f9fc6bd2">rpmGetOsInfo</a>(NULL, &amp;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(&amp;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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, &amp;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-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;<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>, &amp;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-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>, psm-&gt;<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) &amp; RPMTRANS_FLAG_TEST)        <span class="keywordflow">break</span>;
<a name="l01717"></a>01717 
<a name="l01718"></a>01718         <span class="keywordflow">if</span> (psm-&gt;<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) &amp; <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) &lt;= 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-&gt;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-&gt;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-&gt;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-&gt;fd != NULL here. */</span>
<a name="l01739"></a>01739             psm-&gt;<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-&gt;te))), psm-&gt;<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-&gt;<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-&gt;fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>, ts, fi,
<a name="l01747"></a>01747                         psm-&gt;<a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>, NULL, &amp;psm-&gt;<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-&gt;<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-&gt;<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-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>);
<a name="l01756"></a>01756             psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = (fi-&gt;archiveSize ? fi-&gt;archiveSize : 100);
<a name="l01767"></a>01767             psm-&gt;<a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a> != NULL ? psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = 0;
<a name="l01781"></a>01781                 psm-&gt;<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-&gt;<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) &amp; <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) &amp; <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) &lt;= 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-&gt;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-&gt;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-&gt;<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-&gt;<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-&gt;<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-&gt;fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d9fc895da99bddbc74811ae0df74d0d3">FSM_PKGERASE</a>, ts, fi,
<a name="l01807"></a>01807                         NULL, NULL, &amp;psm-&gt;<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-&gt;fsm);
<a name="l01809"></a>01809 
<a name="l01810"></a>01810             psm-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;actions;
<a name="l01818"></a>01818             <a class="code" href="rpmlib_8h.html#b8093e386e879383837c4a528d8b9bdc">fileAction</a> action = fi-&gt;action;
<a name="l01819"></a>01819 
<a name="l01820"></a>01820             fi-&gt;action = <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0593e433874ed32187140e8fa952608896">FA_COPYOUT</a>;
<a name="l01821"></a>01821             fi-&gt;actions = NULL;
<a name="l01822"></a>01822 
<a name="l01823"></a>01823             <span class="keywordflow">if</span> (psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>);
<a name="l01829"></a>01829             psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>)), psm-&gt;<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-&gt;<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-&gt;fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>, ts, fi, psm-&gt;<a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>,
<a name="l01837"></a>01837                         NULL, &amp;psm-&gt;<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-&gt;<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-&gt;<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-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#11aed32b693a6f7d8f01d733898db687">cfd</a>);
<a name="l01846"></a>01846             psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = (fi-&gt;archiveSize ? fi-&gt;archiveSize : 100);
<a name="l01854"></a>01854             psm-&gt;<a class="code" href="structrpmpsm__s.html#716c1c3e87557aec640fbfc6a95ee4b9">total</a> = psm-&gt;<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-&gt;action = action;
<a name="l01858"></a>01858             fi-&gt;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) &amp; RPMTRANS_FLAG_TEST)        <span class="keywordflow">break</span>;
<a name="l01863"></a>01863 
<a name="l01864"></a>01864         <span class="keywordflow">if</span> (psm-&gt;<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-&gt;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-&gt;fstates != NULL &amp;&amp; fc &gt; 0)
<a name="l01870"></a>01870                 xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(fi-&gt;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-&gt;fstates, fc);
<a name="l01872"></a>01872 
<a name="l01873"></a>01873             xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(fi-&gt;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                                 &amp;installTime, 1);
<a name="l01875"></a>01875 
<a name="l01876"></a>01876             xx = <a class="code" href="group__header.html#ged20ae7d7819321a4fde398cc57f7a20">headerAddEntry</a>(fi-&gt;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                                 &amp;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-&gt;record &amp;&amp; !(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) &amp; <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-&gt;<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-&gt;<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-&gt;<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-&gt;<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) &amp; <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) &amp; <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) &amp; 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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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) &amp; <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) &amp; <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) &amp; <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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#904cc4a864aed1c586ea5b256bc07c53">fd</a>);
<a name="l01950"></a>01950             psm-&gt;<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-&gt;<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 &amp;&amp; ts &amp;&amp; ts-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a> ? psm-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#613f9498bb333858b9b458eba841b9ad">stepName</a>, psm-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a> = 0;
<a name="l01975"></a>01975             psm-&gt;<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-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> == <a class="code" href="psm_8h.html#0ced6b6fa32894adef8c31e27933b3d7c431fa38ba71bf6d192b45c82c154bcd">PSM_PKGERASE</a> || psm-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a> != NULL)
<a name="l01984"></a>01984 <span class="keywordflow">if</span> (psm-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>-&gt;h != NULL)
<a name="l01985"></a>01985 psm-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>-&gt;h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>-&gt;h);
<a name="l01986"></a>01986             <span class="keywordflow">if</span> (fi-&gt;h != NULL)
<a name="l01987"></a>01987                 fi-&gt;h = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(fi-&gt;h);
<a name="l01988"></a>01988         }
<a name="l01989"></a>01989 <span class="comment">/*@=branchstate@*/</span>
<a name="l01990"></a>01990         psm-&gt;<a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a> = <a class="code" href="group__header.html#g09a8fc9b59462af8d6fb08636feff7f9">headerFree</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#6138a8129246667b0e19525adba1aa1e">oh</a>);
<a name="l01991"></a>01991         psm-&gt;<a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#0051f5acf400ecf4f1cee04fbacbf19b">pkgURL</a>);
<a name="l01992"></a>01992         psm-&gt;<a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#46926c160f2eaf72273727466f298204">rpmio_flags</a>);
<a name="l01993"></a>01993         psm-&gt;<a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#92c3429774c3e5eb534aa2ee1f1511af">failedFile</a>);
<a name="l01994"></a>01994 
<a name="l01995"></a>01995         fi-&gt;fgroup = hfd(fi-&gt;fgroup, -1);
<a name="l01996"></a>01996         fi-&gt;fuser = hfd(fi-&gt;fuser, -1);
<a name="l01997"></a>01997         fi-&gt;apath = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fi-&gt;apath);
<a name="l01998"></a>01998         fi-&gt;fstates = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fi-&gt;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-&gt;<a class="code" href="structrpmpsm__s.html#bb1818f85f60249b66fa59b47d69d781">goal</a> = stage;
<a name="l02005"></a>02005         psm-&gt;<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-&gt;<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-&gt;te may be NULL */</span>
<a name="l02022"></a>02022         ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, psm-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>, psm-&gt;<a class="code" href="structrpmpsm__s.html#fef0771f9eba6ddf5899e579b4f2c08f">what</a>, psm-&gt;<a class="code" href="structrpmpsm__s.html#0aca59dd9511428796e84ea0e92294fd">amount</a>, psm-&gt;<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) &amp; <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) &amp; <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-&gt;fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729407950152b6bb79e018cd854d3b1b825b">FSM_PKGCOMMIT</a>, ts, fi,
<a name="l02032"></a>02032                         NULL, NULL, &amp;psm-&gt;<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-&gt;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 &amp;&amp; !(rootDir[0] == <span class="charliteral">'/'</span> &amp;&amp; rootDir[1] == <span class="charliteral">'\0'</span>)
<a name="l02040"></a>02040          &amp;&amp; !<a class="code" href="group__rpmts.html#g1db773f0137abb1593a35a396eed168a">rpmtsChrootDone</a>(ts) &amp;&amp; !psm-&gt;<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 &amp;&amp; strcmp(rootDir, <span class="stringliteral">"/"</span>) &amp;&amp; *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-&gt;<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-&gt;<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 &amp;&amp; strcmp(rootDir, <span class="stringliteral">"/"</span>) &amp;&amp; *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-&gt;<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-&gt;h, <a class="code" href="rpmlib_8h.html#342756dddb61d125ae851a8b1ab0507b2fb185e4da76f4495f79bae39a6fd90d">RPMTAG_PAYLOADCOMPRESSOR</a>, NULL,
<a name="l02098"></a>02098                             (<span class="keywordtype">void</span> **) &amp;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-&gt;<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> == NULL);
<a name="l02113"></a>02113         psm-&gt;<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                                 &amp;fi-&gt;record, <span class="keyword">sizeof</span>(fi-&gt;record));
<a name="l02115"></a>02115 
<a name="l02116"></a>02116         fi-&gt;h = <a class="code" href="group__rpmdb.html#ga20413aa4018cf32e700decc7dba83f3">rpmdbNextIterator</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>);
<a name="l02117"></a>02117         <span class="keywordflow">if</span> (fi-&gt;h != NULL)
<a name="l02118"></a>02118             fi-&gt;h = <a class="code" href="group__header.html#g4f07e8040ed3195e374a44919ffe97c2">headerLink</a>(fi-&gt;h);
<a name="l02119"></a>02119 
<a name="l02120"></a>02120         psm-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a> = <a class="code" href="group__rpmdb.html#g7d328106a65ab43bbef20b9897e463a4">rpmdbFreeIterator</a>(psm-&gt;<a class="code" href="structrpmpsm__s.html#be004bba545defd4ba1faf6216a05399">mi</a>);
<a name="l02121"></a>02121         rc = (fi-&gt;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) &amp; RPMTRANS_FLAG_TEST)        <span class="keywordflow">break</span>;
<a name="l02125"></a>02125         <span class="keywordflow">if</span> (fi-&gt;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) &amp; <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-&gt;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-&gt;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-&gt;<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 &amp;&amp;
<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> &amp;&amp;
<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>));
<a name="l02160"></a>02160                 <span class="keywordflow">if</span> (se != NULL) se-&gt;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) &amp; 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-&gt;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 &amp;&amp;
<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> &amp;&amp;
<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-&gt;<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-&gt;<a class="code" href="structrpmpsm__s.html#bf0ceeec9fc865bce4b5e391ecea5dc1">te</a>));
<a name="l02193"></a>02193                 <span class="keywordflow">if</span> (se != NULL) se-&gt;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-&gt;oh and psm-&gt;fi-&gt;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&nbsp;
<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>