Sophie

Sophie

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

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/fsm.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/fsm.c</h1><a href="fsm_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 
<a name="l00011"></a>00011 <span class="preprocessor">#include "<a class="code" href="cpio_8h.html">cpio.h</a>"</span>
<a name="l00012"></a>00012 
<a name="l00013"></a>00013 <span class="preprocessor">#include "<a class="code" href="fsm_8h.html">fsm.h</a>"</span>
<a name="l00014"></a><a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">00014</a> <span class="preprocessor">#define fsmUNSAFE       fsmStage</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="rpmerr_8h.html">rpmerr.h</a>"</span>
<a name="l00017"></a>00017 
<a name="l00018"></a><a class="code" href="fsm_8c.html#82b275be9a2fad806a974a3ff209339c">00018</a> <span class="preprocessor">#define _RPMFI_INTERNAL</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="rpmfi_8h.html">rpmfi.h</a>"</span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="rpmte_8h.html">rpmte.h</a>"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="rpmts_8h.html">rpmts.h</a>"</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="rpmsq_8h.html">rpmsq.h</a>"</span>
<a name="l00023"></a>00023 
<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="ugid_8h.html">ugid.h</a>"</span>               <span class="comment">/* XXX unameToUid() and gnameToGid() */</span>
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="comment">/*@access FD_t @*/</span>      <span class="comment">/* XXX void ptr args */</span>
<a name="l00029"></a>00029 <span class="comment">/*@access FSMI_t @*/</span>
<a name="l00030"></a>00030 <span class="comment">/*@access FSM_t @*/</span>
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="comment">/*@access rpmfi @*/</span>
<a name="l00033"></a>00033 
<a name="l00034"></a><a class="code" href="fsm_8c.html#96e4041c4047f3298ec98d081530508b">00034</a> <span class="preprocessor">#define alloca_strdup(_s)       strcpy(alloca(strlen(_s)+1), (_s))</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a><a class="code" href="fsm_8c.html#9b942ca18a8a0e130336141caa86e173">00036</a> <span class="preprocessor">#define _FSM_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="poptALL_8c.html#a9d80721d6d496e7e799ad3926f7a44b">00038</a> <span class="keywordtype">int</span> <a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> = <a class="code" href="fsm_8c.html#9b942ca18a8a0e130336141caa86e173">_FSM_DEBUG</a>;
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 <span class="comment">/*@-exportheadervar@*/</span>
<a name="l00041"></a>00041 <span class="comment">/*@unchecked@*/</span>
<a name="l00042"></a><a class="code" href="poptALL_8c.html#8f971a68b642a3aafd8b8aa003b41801">00042</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#8f971a68b642a3aafd8b8aa003b41801">_fsm_threads</a> = 0;
<a name="l00043"></a>00043 <span class="comment">/*@=exportheadervar@*/</span>
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="comment">/* XXX Failure to remove is not (yet) cause for failure. */</span>
<a name="l00046"></a>00046 <span class="comment">/*@-exportlocal -exportheadervar@*/</span>
<a name="l00047"></a>00047 <span class="comment">/*@unchecked@*/</span>
<a name="l00048"></a><a class="code" href="fsm_8c.html#8e500a66ce12fd92fa66ccf54983587a">00048</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#8e500a66ce12fd92fa66ccf54983587a">strict_erasures</a> = 0;
<a name="l00049"></a>00049 <span class="comment">/*@=exportlocal =exportheadervar@*/</span>
<a name="l00050"></a>00050 
<a name="l00051"></a><a class="code" href="fsm_8h.html#012360970ce27aba0a76bd965088a9a4">00051</a> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> <a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(<span class="keyword">const</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm) {
<a name="l00052"></a>00052     <span class="keyword">const</span> <a class="code" href="structfsmIterator__s.html">FSMI_t</a> iter = fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a>;
<a name="l00053"></a>00053     <span class="comment">/*@-compdef -refcounttrans -retexpose -usereleased @*/</span>
<a name="l00054"></a>00054     <span class="keywordflow">return</span> (iter ? iter-&gt;<a class="code" href="structfsmIterator__s.html#d446fbd2ff2d592beae0dd4ddb38afd6">ts</a> : NULL);
<a name="l00055"></a>00055     <span class="comment">/*@=compdef =refcounttrans =retexpose =usereleased @*/</span>
<a name="l00056"></a>00056 }
<a name="l00057"></a>00057 
<a name="l00058"></a><a class="code" href="fsm_8h.html#b6b97fa567ec99a3f190fb6d5f725842">00058</a> <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(<span class="keyword">const</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00059"></a>00059 {
<a name="l00060"></a>00060     <span class="keyword">const</span> <a class="code" href="structfsmIterator__s.html">FSMI_t</a> iter = fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a>;
<a name="l00061"></a>00061     <span class="comment">/*@-compdef -refcounttrans -retexpose -usereleased @*/</span>
<a name="l00062"></a>00062     <span class="keywordflow">return</span> (iter ? iter-&gt;<a class="code" href="structfsmIterator__s.html#838ac90dd86861c2579e1f9a47a3fa77">fi</a> : NULL);
<a name="l00063"></a>00063     <span class="comment">/*@=compdef =refcounttrans =retexpose =usereleased @*/</span>
<a name="l00064"></a>00064 }
<a name="l00065"></a>00065 
<a name="l00066"></a><a class="code" href="fsm_8c.html#17b9a7cfb962b5d9f01642d7195b1d87">00066</a> <span class="preprocessor">#define SUFFIX_RPMORIG  ".rpmorig"</span>
<a name="l00067"></a><a class="code" href="fsm_8c.html#2901c16f2478fdc01294aa99122becbf">00067</a> <span class="preprocessor"></span><span class="preprocessor">#define SUFFIX_RPMSAVE  ".rpmsave"</span>
<a name="l00068"></a><a class="code" href="fsm_8c.html#66b201a82f16f0fea02c0407277dba21">00068</a> <span class="preprocessor"></span><span class="preprocessor">#define SUFFIX_RPMNEW   ".rpmnew"</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span>
<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="comment">/*@only@*/</span><span class="comment">/*@null@*/</span>
<a name="l00079"></a><a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">00079</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm,
<a name="l00080"></a>00080                 <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keyword">struct</span> stat * st,
<a name="l00081"></a>00081                 <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * subdir,
<a name="l00082"></a>00082                 <span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * suffix)
<a name="l00083"></a>00083         <span class="comment">/*@uses fsm-&gt;dirName, fsm-&gt;baseName */</span>
<a name="l00084"></a>00084         <span class="comment">/*@*/</span>
<a name="l00085"></a>00085 {
<a name="l00086"></a>00086     <span class="keyword">const</span> <span class="keywordtype">char</span> * s = NULL;
<a name="l00087"></a>00087 
<a name="l00088"></a>00088     <span class="keywordflow">if</span> (fsm) {
<a name="l00089"></a>00089         <span class="keywordtype">int</span> nb;
<a name="l00090"></a>00090         <span class="keywordtype">char</span> * t;
<a name="l00091"></a>00091         nb = strlen(fsm-&gt;<a class="code" href="structfsm__s.html#f56d13e88623d0dff6ff5bbf48565ac3">dirName</a>) +
<a name="l00092"></a>00092             (st &amp;&amp; !S_ISDIR(st-&gt;st_mode) ? (subdir ? strlen(subdir) : 0) : 0) +
<a name="l00093"></a>00093             (st &amp;&amp; !S_ISDIR(st-&gt;st_mode) ? (suffix ? strlen(suffix) : 0) : 0) +
<a name="l00094"></a>00094             strlen(fsm-&gt;<a class="code" href="structfsm__s.html#83669964cbfc18b6bb0505e6f92705f4">baseName</a>) + 1;
<a name="l00095"></a>00095 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00096"></a>00096         s = t = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(nb);
<a name="l00097"></a>00097         t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, fsm-&gt;<a class="code" href="structfsm__s.html#f56d13e88623d0dff6ff5bbf48565ac3">dirName</a>);
<a name="l00098"></a>00098         <span class="keywordflow">if</span> (st &amp;&amp; !S_ISDIR(st-&gt;st_mode))
<a name="l00099"></a>00099             <span class="keywordflow">if</span> (subdir) t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, subdir);
<a name="l00100"></a>00100         t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, fsm-&gt;<a class="code" href="structfsm__s.html#83669964cbfc18b6bb0505e6f92705f4">baseName</a>);
<a name="l00101"></a>00101         <span class="keywordflow">if</span> (st &amp;&amp; !S_ISDIR(st-&gt;st_mode))
<a name="l00102"></a>00102             <span class="keywordflow">if</span> (suffix) t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, suffix);
<a name="l00103"></a>00103 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00104"></a>00104     }
<a name="l00105"></a>00105     <span class="keywordflow">return</span> s;
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107 
<a name="l00113"></a><a class="code" href="group__payload.html#gf6048f287f1b47ae5a4fb15e524b1e5a">00113</a> <span class="keyword">static</span> <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> * <a class="code" href="group__payload.html#gf6048f287f1b47ae5a4fb15e524b1e5a">mapFreeIterator</a>(<span class="comment">/*@only@*/</span><span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> * p)
<a name="l00114"></a>00114         <span class="comment">/*@globals fileSystem @*/</span>
<a name="l00115"></a>00115         <span class="comment">/*@modifies fileSystem @*/</span>
<a name="l00116"></a>00116 {
<a name="l00117"></a>00117     <a class="code" href="structfsmIterator__s.html">FSMI_t</a> iter = p;
<a name="l00118"></a>00118     <span class="keywordflow">if</span> (iter) {
<a name="l00119"></a>00119 <span class="comment">/*@-internalglobs@*/</span> <span class="comment">/* XXX rpmswExit() */</span>
<a name="l00120"></a>00120         iter-&gt;<a class="code" href="structfsmIterator__s.html#d446fbd2ff2d592beae0dd4ddb38afd6">ts</a> = <a class="code" href="group__rpmts.html#g5315165a6e80a0c71dbe5eb07dd18f58">rpmtsFree</a>(iter-&gt;<a class="code" href="structfsmIterator__s.html#d446fbd2ff2d592beae0dd4ddb38afd6">ts</a>);
<a name="l00121"></a>00121 <span class="comment">/*@=internalglobs@*/</span>
<a name="l00122"></a>00122         iter-&gt;<a class="code" href="structfsmIterator__s.html#838ac90dd86861c2579e1f9a47a3fa77">fi</a> = <a class="code" href="rpmfi_8h.html#b9027e2e34b71a3ace76f0f701d2ac5f">rpmfiUnlink</a>(iter-&gt;<a class="code" href="structfsmIterator__s.html#838ac90dd86861c2579e1f9a47a3fa77">fi</a>, <span class="stringliteral">"mapIterator"</span>);
<a name="l00123"></a>00123     }
<a name="l00124"></a>00124     <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(p);
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126 
<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keywordtype">void</span> *
<a name="l00134"></a><a class="code" href="group__payload.html#gafd355724cb7d0f444824822692d5f46">00134</a> <a class="code" href="group__payload.html#gafd355724cb7d0f444824822692d5f46">mapInitIterator</a>(<a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts, <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi)
<a name="l00135"></a>00135         <span class="comment">/*@modifies ts, fi @*/</span>
<a name="l00136"></a>00136 {
<a name="l00137"></a>00137     <a class="code" href="structfsmIterator__s.html">FSMI_t</a> iter = NULL;
<a name="l00138"></a>00138 
<a name="l00139"></a>00139     iter = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(1, <span class="keyword">sizeof</span>(*iter));
<a name="l00140"></a>00140     iter-&gt;ts = <a class="code" href="rpmts_8h.html#ff6f4de19581560802e96cdfc0d3d5fd">rpmtsLink</a>(ts, <span class="stringliteral">"mapIterator"</span>);
<a name="l00141"></a>00141     iter-&gt;fi = <a class="code" href="rpmfi_8h.html#efe18edd3c3508fb257dfcf4db2776e5">rpmfiLink</a>(fi, <span class="stringliteral">"mapIterator"</span>);
<a name="l00142"></a>00142     iter-&gt;reverse = (<a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e50589af969c1fa71419e740b4b3445039bf7e">TR_REMOVED</a> &amp;&amp; fi-&gt;action != <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0593e433874ed32187140e8fa952608896">FA_COPYOUT</a>);
<a name="l00143"></a>00143     iter-&gt;i = (iter-&gt;reverse ? (fi-&gt;fc - 1) : 0);
<a name="l00144"></a>00144     iter-&gt;isave = iter-&gt;i;
<a name="l00145"></a>00145     <span class="keywordflow">return</span> iter;
<a name="l00146"></a>00146 }
<a name="l00147"></a>00147 
<a name="l00153"></a><a class="code" href="group__payload.html#ga7183acf4a59ef41601e463783676246">00153</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#ga7183acf4a59ef41601e463783676246">mapNextIterator</a>(<span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> * a)
<a name="l00154"></a>00154         <span class="comment">/*@*/</span>
<a name="l00155"></a>00155 {
<a name="l00156"></a>00156     <a class="code" href="structfsmIterator__s.html">FSMI_t</a> iter = a;
<a name="l00157"></a>00157     <span class="keywordtype">int</span> i = -1;
<a name="l00158"></a>00158 
<a name="l00159"></a>00159     <span class="keywordflow">if</span> (iter) {
<a name="l00160"></a>00160         <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = iter-&gt;<a class="code" href="structfsmIterator__s.html#838ac90dd86861c2579e1f9a47a3fa77">fi</a>;
<a name="l00161"></a>00161         <span class="keywordflow">if</span> (iter-&gt;<a class="code" href="structfsmIterator__s.html#fb2b8000036a7dafa45a41351455fb23">reverse</a>) {
<a name="l00162"></a>00162             <span class="keywordflow">if</span> (iter-&gt;<a class="code" href="structfsmIterator__s.html#e73e19ce383af739032543744440d19b">i</a> &gt;= 0)   i = iter-&gt;<a class="code" href="structfsmIterator__s.html#e73e19ce383af739032543744440d19b">i</a>--;
<a name="l00163"></a>00163         } <span class="keywordflow">else</span> {
<a name="l00164"></a>00164             <span class="keywordflow">if</span> (iter-&gt;<a class="code" href="structfsmIterator__s.html#e73e19ce383af739032543744440d19b">i</a> &lt; fi-&gt;fc)       i = iter-&gt;<a class="code" href="structfsmIterator__s.html#e73e19ce383af739032543744440d19b">i</a>++;
<a name="l00165"></a>00165         }
<a name="l00166"></a>00166         iter-&gt;<a class="code" href="structfsmIterator__s.html#b23ad3eee551c961c533b6c500cf2758">isave</a> = i;
<a name="l00167"></a>00167     }
<a name="l00168"></a>00168     <span class="keywordflow">return</span> i;
<a name="l00169"></a>00169 }
<a name="l00170"></a>00170 
<a name="l00173"></a>00173 <span class="comment">/*@-boundsread@*/</span>
<a name="l00174"></a><a class="code" href="group__payload.html#g80c1b9f97eead750f3ba30e55306a39d">00174</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#g80c1b9f97eead750f3ba30e55306a39d">cpioStrCmp</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> * a, <span class="keyword">const</span> <span class="keywordtype">void</span> * b)
<a name="l00175"></a>00175         <span class="comment">/*@*/</span>
<a name="l00176"></a>00176 {
<a name="l00177"></a>00177     <span class="keyword">const</span> <span class="keywordtype">char</span> * afn = *(<span class="keyword">const</span> <span class="keywordtype">char</span> **)a;
<a name="l00178"></a>00178     <span class="keyword">const</span> <span class="keywordtype">char</span> * bfn = *(<span class="keyword">const</span> <span class="keywordtype">char</span> **)b;
<a name="l00179"></a>00179 
<a name="l00180"></a>00180     <span class="comment">/* XXX Some 4+ year old rpm packages have basename only in payloads. */</span>
<a name="l00181"></a>00181 <span class="preprocessor">#ifdef  VERY_OLD_BUGGY_RPM_PACKAGES</span>
<a name="l00182"></a>00182 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (strchr(afn, <span class="charliteral">'/'</span>) == NULL)
<a name="l00183"></a>00183         bfn = strrchr(bfn, <span class="charliteral">'/'</span>) + 1;
<a name="l00184"></a>00184 <span class="preprocessor">#endif</span>
<a name="l00185"></a>00185 <span class="preprocessor"></span>
<a name="l00186"></a>00186     <span class="comment">/* Match rpm-4.0 payloads with ./ prefixes. */</span>
<a name="l00187"></a>00187     <span class="keywordflow">if</span> (afn[0] == <span class="charliteral">'.'</span> &amp;&amp; afn[1] == <span class="charliteral">'/'</span>) afn += 2;
<a name="l00188"></a>00188     <span class="keywordflow">if</span> (bfn[0] == <span class="charliteral">'.'</span> &amp;&amp; bfn[1] == <span class="charliteral">'/'</span>) bfn += 2;
<a name="l00189"></a>00189 
<a name="l00190"></a>00190     <span class="comment">/* If either path is absolute, make it relative. */</span>
<a name="l00191"></a>00191     <span class="keywordflow">if</span> (afn[0] == <span class="charliteral">'/'</span>)  afn += 1;
<a name="l00192"></a>00192     <span class="keywordflow">if</span> (bfn[0] == <span class="charliteral">'/'</span>)  bfn += 1;
<a name="l00193"></a>00193 
<a name="l00194"></a>00194     <span class="keywordflow">return</span> strcmp(afn, bfn);
<a name="l00195"></a>00195 }
<a name="l00196"></a>00196 <span class="comment">/*@=boundsread@*/</span>
<a name="l00197"></a>00197 
<a name="l00204"></a>00204 <span class="comment">/*@-boundsread@*/</span>
<a name="l00205"></a><a class="code" href="group__payload.html#gb4270d10f988273a8e00eb95c17835c2">00205</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#gb4270d10f988273a8e00eb95c17835c2">mapFind</a>(<span class="comment">/*@null@*/</span> <a class="code" href="structfsmIterator__s.html">FSMI_t</a> iter, <span class="keyword">const</span> <span class="keywordtype">char</span> * fsmPath)
<a name="l00206"></a>00206         <span class="comment">/*@modifies iter @*/</span>
<a name="l00207"></a>00207 {
<a name="l00208"></a>00208     <span class="keywordtype">int</span> ix = -1;
<a name="l00209"></a>00209 
<a name="l00210"></a>00210     <span class="keywordflow">if</span> (iter) {
<a name="l00211"></a>00211         <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = iter-&gt;<a class="code" href="structfsmIterator__s.html#838ac90dd86861c2579e1f9a47a3fa77">fi</a>;
<a name="l00212"></a>00212         <span class="keywordflow">if</span> (fi &amp;&amp; fi-&gt;fc &gt; 0 &amp;&amp; fi-&gt;apath &amp;&amp; fsmPath &amp;&amp; *fsmPath) {
<a name="l00213"></a>00213             <span class="keyword">const</span> <span class="keywordtype">char</span> ** p = NULL;
<a name="l00214"></a>00214 
<a name="l00215"></a>00215 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00216"></a>00216             <span class="keywordflow">if</span> (fi-&gt;apath != NULL)
<a name="l00217"></a>00217                 p = bsearch(&amp;fsmPath, fi-&gt;apath, fi-&gt;fc, <span class="keyword">sizeof</span>(fsmPath),
<a name="l00218"></a>00218                         <a class="code" href="group__payload.html#g80c1b9f97eead750f3ba30e55306a39d">cpioStrCmp</a>);
<a name="l00219"></a>00219 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00220"></a>00220             <span class="keywordflow">if</span> (p) {
<a name="l00221"></a>00221                 iter-&gt;<a class="code" href="structfsmIterator__s.html#e73e19ce383af739032543744440d19b">i</a> = p - fi-&gt;apath;
<a name="l00222"></a>00222                 ix = <a class="code" href="group__payload.html#ga7183acf4a59ef41601e463783676246">mapNextIterator</a>(iter);
<a name="l00223"></a>00223             }
<a name="l00224"></a>00224         }
<a name="l00225"></a>00225     }
<a name="l00226"></a>00226     <span class="keywordflow">return</span> ix;
<a name="l00227"></a>00227 }
<a name="l00228"></a>00228 <span class="comment">/*@=boundsread@*/</span>
<a name="l00229"></a>00229 
<a name="l00233"></a><a class="code" href="structdnli__s.html">00233</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structdnli__s.html">dnli_s</a> {
<a name="l00234"></a><a class="code" href="structdnli__s.html#3be89efcb0f3062e3158aaeff829a459">00234</a>     <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> <a class="code" href="structdnli__s.html#3be89efcb0f3062e3158aaeff829a459">fi</a>;
<a name="l00235"></a>00235 <span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span>
<a name="l00236"></a><a class="code" href="structdnli__s.html#b947c79ee3953fd276d470e637f52ed8">00236</a>     <span class="keywordtype">char</span> * <a class="code" href="structdnli__s.html#b947c79ee3953fd276d470e637f52ed8">active</a>;
<a name="l00237"></a><a class="code" href="structdnli__s.html#cc8364438ca438ef24b5ffb58c080373">00237</a>     <span class="keywordtype">int</span> <a class="code" href="structdnli__s.html#cc8364438ca438ef24b5ffb58c080373">reverse</a>;
<a name="l00238"></a><a class="code" href="structdnli__s.html#d1a1d43f99693d8c69c67c6716f3be9c">00238</a>     <span class="keywordtype">int</span> <a class="code" href="structdnli__s.html#d1a1d43f99693d8c69c67c6716f3be9c">isave</a>;
<a name="l00239"></a><a class="code" href="structdnli__s.html#62aa9cbf24b6b0420376c6da5edf02a8">00239</a>     <span class="keywordtype">int</span> <a class="code" href="structdnli__s.html#62aa9cbf24b6b0420376c6da5edf02a8">i</a>;
<a name="l00240"></a>00240 } * <a class="code" href="structdnli__s.html">DNLI_t</a>;
<a name="l00241"></a>00241 
<a name="l00247"></a><a class="code" href="group__payload.html#ga88c46f5ccce701871cea31e493fda3a">00247</a> <span class="keyword">static</span> <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> * <a class="code" href="group__payload.html#ga88c46f5ccce701871cea31e493fda3a">dnlFreeIterator</a>(<span class="comment">/*@only@*/</span><span class="comment">/*@null@*/</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * a)
<a name="l00248"></a>00248         <span class="comment">/*@modifies a @*/</span>
<a name="l00249"></a>00249 {
<a name="l00250"></a>00250     <span class="keywordflow">if</span> (a) {
<a name="l00251"></a>00251         <a class="code" href="structdnli__s.html">DNLI_t</a> dnli = (<span class="keywordtype">void</span> *)a;
<a name="l00252"></a>00252         <span class="keywordflow">if</span> (dnli-&gt;<a class="code" href="structdnli__s.html#b947c79ee3953fd276d470e637f52ed8">active</a>) free(dnli-&gt;<a class="code" href="structdnli__s.html#b947c79ee3953fd276d470e637f52ed8">active</a>);
<a name="l00253"></a>00253     }
<a name="l00254"></a>00254     <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(a);
<a name="l00255"></a>00255 }
<a name="l00256"></a>00256 
<a name="l00259"></a><a class="code" href="group__payload.html#g00a5e255447a1dc73b348e88f757f305">00259</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#g00a5e255447a1dc73b348e88f757f305">dnlCount</a>(<span class="comment">/*@null@*/</span> <span class="keyword">const</span> <a class="code" href="structdnli__s.html">DNLI_t</a> dnli)
<a name="l00260"></a>00260         <span class="comment">/*@*/</span>
<a name="l00261"></a>00261 {
<a name="l00262"></a>00262     <span class="keywordflow">return</span> (dnli ? dnli-&gt;<a class="code" href="structdnli__s.html#3be89efcb0f3062e3158aaeff829a459">fi</a>-&gt;dc : 0);
<a name="l00263"></a>00263 }
<a name="l00264"></a>00264 
<a name="l00267"></a><a class="code" href="group__payload.html#gd02a66adc2074ff3e72f743768b92c58">00267</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#gd02a66adc2074ff3e72f743768b92c58">dnlIndex</a>(<span class="comment">/*@null@*/</span> <span class="keyword">const</span> <a class="code" href="structdnli__s.html">DNLI_t</a> dnli)
<a name="l00268"></a>00268         <span class="comment">/*@*/</span>
<a name="l00269"></a>00269 {
<a name="l00270"></a>00270     <span class="keywordflow">return</span> (dnli ? dnli-&gt;<a class="code" href="structdnli__s.html#d1a1d43f99693d8c69c67c6716f3be9c">isave</a> : -1);
<a name="l00271"></a>00271 }
<a name="l00272"></a>00272 
<a name="l00279"></a>00279 <span class="comment">/*@-boundsread@*/</span>
<a name="l00280"></a>00280 <span class="comment">/*@-usereleased@*/</span>
<a name="l00281"></a>00281 <span class="keyword">static</span> <span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span>
<a name="l00282"></a><a class="code" href="group__payload.html#g819567140e097649a5bdbd07e0befa57">00282</a> <span class="keywordtype">void</span> * <a class="code" href="group__payload.html#g819567140e097649a5bdbd07e0befa57">dnlInitIterator</a>(<span class="comment">/*@special@*/</span> <span class="keyword">const</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm,
<a name="l00283"></a>00283                 <span class="keywordtype">int</span> <a class="code" href="merge_8c.html#418487752a9b9a1497617db75cb34920">reverse</a>)
<a name="l00284"></a>00284         <span class="comment">/*@uses fsm-&gt;iter @*/</span> 
<a name="l00285"></a>00285         <span class="comment">/*@*/</span>
<a name="l00286"></a>00286 {
<a name="l00287"></a>00287     <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l00288"></a>00288     <a class="code" href="structdnli__s.html">DNLI_t</a> dnli;
<a name="l00289"></a>00289     <span class="keywordtype">int</span> i, j;
<a name="l00290"></a>00290 
<a name="l00291"></a>00291     <span class="keywordflow">if</span> (fi == NULL)
<a name="l00292"></a>00292         <span class="keywordflow">return</span> NULL;
<a name="l00293"></a>00293     dnli = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(1, <span class="keyword">sizeof</span>(*dnli));
<a name="l00294"></a>00294     dnli-&gt;fi = fi;
<a name="l00295"></a>00295     dnli-&gt;reverse = reverse;
<a name="l00296"></a>00296     <span class="comment">/*@-branchstate@*/</span>
<a name="l00297"></a>00297     dnli-&gt;i = (reverse ? fi-&gt;dc : 0);
<a name="l00298"></a>00298     <span class="comment">/*@=branchstate@*/</span>
<a name="l00299"></a>00299 
<a name="l00300"></a>00300     <span class="keywordflow">if</span> (fi-&gt;dc) {
<a name="l00301"></a>00301         dnli-&gt;active = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(fi-&gt;dc, <span class="keyword">sizeof</span>(*dnli-&gt;active));
<a name="l00302"></a>00302 
<a name="l00303"></a>00303         <span class="comment">/* Identify parent directories not skipped. */</span>
<a name="l00304"></a>00304 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00305"></a>00305         <span class="keywordflow">for</span> (i = 0; i &lt; fi-&gt;fc; i++)
<a name="l00306"></a>00306             <span class="keywordflow">if</span> (!<a class="code" href="rpmlib_8h.html#6fd020fd77b1ebad016a59c753d33966">XFA_SKIPPING</a>(fi-&gt;actions[i])) dnli-&gt;active[fi-&gt;dil[i]] = 1;
<a name="l00307"></a>00307 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00308"></a>00308 
<a name="l00309"></a>00309         <span class="comment">/* Exclude parent directories that are explicitly included. */</span>
<a name="l00310"></a>00310         for (i = 0; i &lt; fi-&gt;fc; i++) {
<a name="l00311"></a>00311             <span class="keywordtype">int</span> dil, dnlen, bnlen;
<a name="l00312"></a>00312 
<a name="l00313"></a>00313             <span class="keywordflow">if</span> (!S_ISDIR(fi-&gt;fmodes[i]))
<a name="l00314"></a>00314                 <span class="keywordflow">continue</span>;
<a name="l00315"></a>00315 
<a name="l00316"></a>00316             dil = fi-&gt;dil[i];
<a name="l00317"></a>00317             dnlen = strlen(fi-&gt;dnl[dil]);
<a name="l00318"></a>00318             bnlen = strlen(fi-&gt;bnl[i]);
<a name="l00319"></a>00319 
<a name="l00320"></a>00320             for (j = 0; j &lt; fi-&gt;dc; j++) {
<a name="l00321"></a>00321                 <span class="keyword">const</span> <span class="keywordtype">char</span> * dnl;
<a name="l00322"></a>00322                 <span class="keywordtype">int</span> jlen;
<a name="l00323"></a>00323 
<a name="l00324"></a>00324                 <span class="keywordflow">if</span> (!dnli-&gt;active[j] || j == dil)
<a name="l00325"></a>00325                     <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l00326"></a>00326                 dnl = fi-&gt;dnl[j];
<a name="l00327"></a>00327                 jlen = strlen(dnl);
<a name="l00328"></a>00328                 <span class="keywordflow">if</span> (jlen != (dnlen+bnlen+1))
<a name="l00329"></a>00329                     <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l00330"></a>00330                 <span class="keywordflow">if</span> (strncmp(dnl, fi-&gt;dnl[dil], dnlen))
<a name="l00331"></a>00331                     <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l00332"></a>00332                 if (strncmp(dnl+dnlen, fi-&gt;bnl[i], bnlen))
<a name="l00333"></a>00333                     <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l00334"></a>00334                 if (dnl[dnlen+bnlen] != <span class="charliteral">'/'</span> || dnl[dnlen+bnlen+1] != <span class="charliteral">'\0'</span>)
<a name="l00335"></a>00335                     <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l00336"></a>00336                 <span class="comment">/* This directory is included in the package. */</span>
<a name="l00337"></a>00337 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00338"></a>00338                 dnli-&gt;active[j] = 0;
<a name="l00339"></a>00339 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00340"></a>00340                 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l00341"></a>00341             }
<a name="l00342"></a>00342         }
<a name="l00343"></a>00343 
<a name="l00344"></a>00344         <span class="comment">/* Print only once per package. */</span>
<a name="l00345"></a>00345         <span class="keywordflow">if</span> (!reverse) {
<a name="l00346"></a>00346             j = 0;
<a name="l00347"></a>00347             <span class="keywordflow">for</span> (i = 0; i &lt; fi-&gt;dc; i++) {
<a name="l00348"></a>00348                 <span class="keywordflow">if</span> (!dnli-&gt;active[i]) <span class="keywordflow">continue</span>;
<a name="l00349"></a>00349                 if (j == 0) {
<a name="l00350"></a>00350                     j = 1;
<a name="l00351"></a>00351                     <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>,
<a name="l00352"></a>00352         <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"========== Directories not explicitly included in package:\n"</span>));
<a name="l00353"></a>00353                 }
<a name="l00354"></a>00354                 <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">"%10d %s\n"</span>), i, fi-&gt;dnl[i]);
<a name="l00355"></a>00355             }
<a name="l00356"></a>00356             <span class="keywordflow">if</span> (j)
<a name="l00357"></a>00357                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <span class="stringliteral">"==========\n"</span>);
<a name="l00358"></a>00358         }
<a name="l00359"></a>00359     }
<a name="l00360"></a>00360     <span class="keywordflow">return</span> dnli;
<a name="l00361"></a>00361 }
<a name="l00362"></a>00362 <span class="comment">/*@=usereleased@*/</span>
<a name="l00363"></a>00363 <span class="comment">/*@=boundsread@*/</span>
<a name="l00364"></a>00364 
<a name="l00370"></a>00370 <span class="comment">/*@-boundsread@*/</span>
<a name="l00371"></a>00371 <span class="keyword">static</span> <span class="comment">/*@observer@*/</span> <span class="comment">/*@null@*/</span>
<a name="l00372"></a><a class="code" href="group__payload.html#ge4cbacf9e236ea1335a65a61f1c729ec">00372</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="group__payload.html#ge4cbacf9e236ea1335a65a61f1c729ec">dnlNextIterator</a>(<span class="comment">/*@null@*/</span> <a class="code" href="structdnli__s.html">DNLI_t</a> dnli)
<a name="l00373"></a>00373         <span class="comment">/*@modifies dnli @*/</span>
<a name="l00374"></a>00374 {
<a name="l00375"></a>00375     <span class="keyword">const</span> <span class="keywordtype">char</span> * dn = NULL;
<a name="l00376"></a>00376 
<a name="l00377"></a>00377     <span class="keywordflow">if</span> (dnli) {
<a name="l00378"></a>00378         <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = dnli-&gt;<a class="code" href="structdnli__s.html#3be89efcb0f3062e3158aaeff829a459">fi</a>;
<a name="l00379"></a>00379         <span class="keywordtype">int</span> i = -1;
<a name="l00380"></a>00380 
<a name="l00381"></a>00381         <span class="keywordflow">if</span> (dnli-&gt;<a class="code" href="structdnli__s.html#b947c79ee3953fd276d470e637f52ed8">active</a>)
<a name="l00382"></a>00382         <span class="keywordflow">do</span> {
<a name="l00383"></a>00383             i = (!dnli-&gt;<a class="code" href="structdnli__s.html#cc8364438ca438ef24b5ffb58c080373">reverse</a> ? dnli-&gt;<a class="code" href="structdnli__s.html#62aa9cbf24b6b0420376c6da5edf02a8">i</a>++ : --dnli-&gt;<a class="code" href="structdnli__s.html#62aa9cbf24b6b0420376c6da5edf02a8">i</a>);
<a name="l00384"></a>00384         } <span class="keywordflow">while</span> (i &gt;= 0 &amp;&amp; i &lt; fi-&gt;dc &amp;&amp; !dnli-&gt;<a class="code" href="structdnli__s.html#b947c79ee3953fd276d470e637f52ed8">active</a>[i]);
<a name="l00385"></a>00385 
<a name="l00386"></a>00386         <span class="keywordflow">if</span> (i &gt;= 0 &amp;&amp; i &lt; fi-&gt;dc)
<a name="l00387"></a>00387             dn = fi-&gt;dnl[i];
<a name="l00388"></a>00388         <span class="keywordflow">else</span>
<a name="l00389"></a>00389             i = -1;
<a name="l00390"></a>00390         dnli-&gt;<a class="code" href="structdnli__s.html#d1a1d43f99693d8c69c67c6716f3be9c">isave</a> = i;
<a name="l00391"></a>00391     }
<a name="l00392"></a>00392     <span class="keywordflow">return</span> dn;
<a name="l00393"></a>00393 }
<a name="l00394"></a>00394 <span class="comment">/*@=boundsread@*/</span>
<a name="l00395"></a>00395 
<a name="l00396"></a><a class="code" href="fsm_8c.html#612982e74423db59799dad97e0b2e24a">00396</a> <span class="keyword">static</span> <span class="keywordtype">void</span> * <a class="code" href="fsm_8c.html#612982e74423db59799dad97e0b2e24a">fsmThread</a>(<span class="keywordtype">void</span> * arg)
<a name="l00397"></a>00397         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l00398"></a>00398         <span class="comment">/*@modifies arg, fileSystem, internalState @*/</span>
<a name="l00399"></a>00399 {
<a name="l00400"></a>00400     <a class="code" href="structfsm__s.html">FSM_t</a> fsm = arg;
<a name="l00401"></a>00401 <span class="comment">/*@-unqualifiedtrans@*/</span>
<a name="l00402"></a>00402     <span class="keywordflow">return</span> ((<span class="keywordtype">void</span> *) <a class="code" href="fsm_8c.html#626f755bcfc50db6dacad7a70fa9e8ce">fsmStage</a>(fsm, fsm-&gt;<a class="code" href="structfsm__s.html#c043f5ddc160561df30dc1a56ac1eb6b">nstage</a>));
<a name="l00403"></a>00403 <span class="comment">/*@=unqualifiedtrans@*/</span>
<a name="l00404"></a>00404 }
<a name="l00405"></a>00405 
<a name="l00406"></a><a class="code" href="fsm_8h.html#f909332db721f99355cd7d4193f61449">00406</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm, <a class="code" href="fsm_8h.html#871643d0529d0b4be7d5286074388f09">fileStage</a> nstage)
<a name="l00407"></a>00407         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l00408"></a>00408         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l00409"></a>00409 {
<a name="l00410"></a>00410     fsm-&gt;<a class="code" href="structfsm__s.html#c043f5ddc160561df30dc1a56ac1eb6b">nstage</a> = nstage;
<a name="l00411"></a>00411     <span class="keywordflow">if</span> (<a class="code" href="fsm_8c.html#8f971a68b642a3aafd8b8aa003b41801">_fsm_threads</a>)
<a name="l00412"></a>00412         <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="fsm_8c.html#612982e74423db59799dad97e0b2e24a">fsmThread</a>, fsm) );
<a name="l00413"></a>00413     <span class="keywordflow">return</span> <a class="code" href="fsm_8c.html#626f755bcfc50db6dacad7a70fa9e8ce">fsmStage</a>(fsm, fsm-&gt;<a class="code" href="structfsm__s.html#c043f5ddc160561df30dc1a56ac1eb6b">nstage</a>);
<a name="l00414"></a>00414 }
<a name="l00415"></a>00415 
<a name="l00421"></a>00421 <span class="comment">/*@-boundsread@*/</span>
<a name="l00422"></a><a class="code" href="group__payload.html#g234a1494479726d05ed09cc31a813862">00422</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#g234a1494479726d05ed09cc31a813862">saveHardLink</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00423"></a>00423         <span class="comment">/*@uses fsm-&gt;links, fsm-&gt;ix, fsm-&gt;sb, fsm-&gt;goal, fsm-&gt;nsuffix @*/</span>
<a name="l00424"></a>00424         <span class="comment">/*@defines fsm-&gt;li @*/</span>
<a name="l00425"></a>00425         <span class="comment">/*@releases fsm-&gt;path @*/</span>
<a name="l00426"></a>00426         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l00427"></a>00427         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l00428"></a>00428 {
<a name="l00429"></a>00429     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l00430"></a>00430     <span class="keywordtype">int</span> rc = 0;
<a name="l00431"></a>00431     <span class="keywordtype">int</span> ix = -1;
<a name="l00432"></a>00432     <span class="keywordtype">int</span> j;
<a name="l00433"></a>00433 
<a name="l00434"></a>00434     <span class="comment">/* Find hard link set. */</span>
<a name="l00435"></a>00435     <span class="comment">/*@-branchstate@*/</span>
<a name="l00436"></a>00436     <span class="keywordflow">for</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>) {
<a name="l00437"></a>00437         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a>.st_ino == st-&gt;st_ino &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a>.st_dev == st-&gt;st_dev)
<a name="l00438"></a>00438             <span class="keywordflow">break</span>;
<a name="l00439"></a>00439     }
<a name="l00440"></a>00440     <span class="comment">/*@=branchstate@*/</span>
<a name="l00441"></a>00441 
<a name="l00442"></a>00442     <span class="comment">/* New hard link encountered, add new link to set. */</span>
<a name="l00443"></a>00443 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00444"></a>00444     <span class="comment">/*@-branchstate@*/</span>
<a name="l00445"></a>00445     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> == NULL) {
<a name="l00446"></a>00446         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(1, <span class="keyword">sizeof</span>(*fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>));
<a name="l00447"></a>00447         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = NULL;
<a name="l00448"></a>00448         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a> = *st;      <span class="comment">/* structure assignment */</span>
<a name="l00449"></a>00449         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#cf5ee06f642ac02bc3200a83a949f2a3">nlink</a> = st-&gt;st_nlink;
<a name="l00450"></a>00450         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#ce33deaa48e61131f0446f31b3af9904">linkIndex</a> = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l00451"></a>00451         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#6ff70805440e93e562aed13b756e3d59">createdPath</a> = -1;
<a name="l00452"></a>00452 
<a name="l00453"></a>00453         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a> = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(st-&gt;st_nlink, <span class="keyword">sizeof</span>(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[0]));
<a name="l00454"></a>00454         memset(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>, -1, (st-&gt;st_nlink * <span class="keyword">sizeof</span>(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[0])));
<a name="l00455"></a>00455         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#ce761bad8cdba501f3747bf2275f5899">nsuffix</a> = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(st-&gt;st_nlink, <span class="keyword">sizeof</span>(*fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#ce761bad8cdba501f3747bf2275f5899">nsuffix</a>));
<a name="l00456"></a>00456 
<a name="l00457"></a>00457         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>)
<a name="l00458"></a>00458             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a> = st-&gt;st_nlink;
<a name="l00459"></a>00459         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l00460"></a>00460             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a> = 0;
<a name="l00461"></a>00461 
<a name="l00462"></a>00462         <span class="comment">/*@-kepttrans@*/</span>
<a name="l00463"></a>00463         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>;
<a name="l00464"></a>00464         <span class="comment">/*@=kepttrans@*/</span>
<a name="l00465"></a>00465         fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>;
<a name="l00466"></a>00466     }
<a name="l00467"></a>00467     <span class="comment">/*@=branchstate@*/</span>
<a name="l00468"></a>00468 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00469"></a>00469 
<a name="l00470"></a>00470     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>) --fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>;
<a name="l00471"></a>00471 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00472"></a>00472     fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>] = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l00473"></a>00473     <span class="comment">/*@-observertrans -dependenttrans@*/</span>
<a name="l00474"></a>00474     fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#ce761bad8cdba501f3747bf2275f5899">nsuffix</a>[fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>] = fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>;
<a name="l00475"></a>00475     <span class="comment">/*@=observertrans =dependenttrans@*/</span>
<a name="l00476"></a>00476 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00477"></a>00477     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>++;
<a name="l00478"></a>00478 
<a name="l00479"></a>00479     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>)
<a name="l00480"></a>00480         <span class="keywordflow">return</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a> &gt; 0);
<a name="l00481"></a>00481 
<a name="l00482"></a>00482     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> != <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l00483"></a>00483         <span class="keywordflow">return</span> 0;
<a name="l00484"></a>00484 
<a name="l00485"></a>00485     <span class="keywordflow">if</span> (!(st-&gt;st_size || fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a> == st-&gt;st_nlink))
<a name="l00486"></a>00486         <span class="keywordflow">return</span> 1;
<a name="l00487"></a>00487 
<a name="l00488"></a>00488     <span class="comment">/* Here come the bits, time to choose a non-skipped file name. */</span>
<a name="l00489"></a>00489     {   <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l00490"></a>00490 
<a name="l00491"></a>00491         <span class="keywordflow">for</span> (j = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a> - 1; j &gt;= 0; j--) {
<a name="l00492"></a>00492             ix = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[j];
<a name="l00493"></a>00493             <span class="keywordflow">if</span> (ix &lt; 0 || <a class="code" href="rpmlib_8h.html#6fd020fd77b1ebad016a59c753d33966">XFA_SKIPPING</a>(fi-&gt;actions[ix]))
<a name="l00494"></a>00494                 <span class="keywordflow">continue</span>;
<a name="l00495"></a>00495             <span class="keywordflow">break</span>;
<a name="l00496"></a>00496         }
<a name="l00497"></a>00497     }
<a name="l00498"></a>00498 
<a name="l00499"></a>00499     <span class="comment">/* Are all links skipped or not encountered yet? */</span>
<a name="l00500"></a>00500     <span class="keywordflow">if</span> (ix &lt; 0 || j &lt; 0)
<a name="l00501"></a>00501         <span class="keywordflow">return</span> 1;       <span class="comment">/* XXX W2DO? */</span>
<a name="l00502"></a>00502 
<a name="l00503"></a>00503     <span class="comment">/* Save the non-skipped file name and map index. */</span>
<a name="l00504"></a>00504     fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#ce33deaa48e61131f0446f31b3af9904">linkIndex</a> = j;
<a name="l00505"></a>00505     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l00506"></a>00506     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = ix;
<a name="l00507"></a>00507     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>);
<a name="l00508"></a>00508     <span class="keywordflow">return</span> rc;
<a name="l00509"></a>00509 }
<a name="l00510"></a>00510 <span class="comment">/*@=boundsread@*/</span>
<a name="l00511"></a>00511 
<a name="l00517"></a><a class="code" href="group__payload.html#ga479b9142b4b1eed186eb48229f21f0a">00517</a> <span class="keyword">static</span> <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> * <a class="code" href="group__payload.html#ga479b9142b4b1eed186eb48229f21f0a">freeHardLink</a>(<span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span> <span class="keyword">struct</span> <a class="code" href="structhardLink__s.html">hardLink_s</a> * li)
<a name="l00518"></a>00518         <span class="comment">/*@modifies li @*/</span>
<a name="l00519"></a>00519 {
<a name="l00520"></a>00520     <span class="keywordflow">if</span> (li) {
<a name="l00521"></a>00521         li-&gt;<a class="code" href="structhardLink__s.html#ce761bad8cdba501f3747bf2275f5899">nsuffix</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(li-&gt;<a class="code" href="structhardLink__s.html#ce761bad8cdba501f3747bf2275f5899">nsuffix</a>);       <span class="comment">/* XXX elements are shared */</span>
<a name="l00522"></a>00522         li-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(li-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>);
<a name="l00523"></a>00523     }
<a name="l00524"></a>00524     <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(li);
<a name="l00525"></a>00525 }
<a name="l00526"></a>00526 
<a name="l00527"></a><a class="code" href="fsm_8h.html#aa17bc27959dee0854f76c48fd1e80b1">00527</a> <a class="code" href="structfsm__s.html">FSM_t</a> <a class="code" href="fsm_8c.html#aa17bc27959dee0854f76c48fd1e80b1">newFSM</a>(<span class="keywordtype">void</span>)
<a name="l00528"></a>00528 {
<a name="l00529"></a>00529     <a class="code" href="structfsm__s.html">FSM_t</a> fsm = <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(1, <span class="keyword">sizeof</span>(*fsm));
<a name="l00530"></a>00530     <span class="keywordflow">return</span> fsm;
<a name="l00531"></a>00531 }
<a name="l00532"></a>00532 
<a name="l00533"></a><a class="code" href="fsm_8h.html#983050dd15ffaa0086c7285e10df0e59">00533</a> <a class="code" href="structfsm__s.html">FSM_t</a> <a class="code" href="fsm_8c.html#983050dd15ffaa0086c7285e10df0e59">freeFSM</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00534"></a>00534 {
<a name="l00535"></a>00535     <span class="keywordflow">if</span> (fsm) {
<a name="l00536"></a>00536         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l00537"></a>00537         <span class="comment">/*@-branchstate@*/</span>
<a name="l00538"></a>00538         <span class="keywordflow">while</span> ((fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>) != NULL) {
<a name="l00539"></a>00539             fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>;
<a name="l00540"></a>00540             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = NULL;
<a name="l00541"></a>00541             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = <a class="code" href="group__payload.html#ga479b9142b4b1eed186eb48229f21f0a">freeHardLink</a>(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>);
<a name="l00542"></a>00542         }
<a name="l00543"></a>00543         <span class="comment">/*@=branchstate@*/</span>
<a name="l00544"></a>00544         fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>);
<a name="l00545"></a>00545         fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>);
<a name="l00546"></a>00546         fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a> = <a class="code" href="group__payload.html#gf6048f287f1b47ae5a4fb15e524b1e5a">mapFreeIterator</a>(fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a>);
<a name="l00547"></a>00547     }
<a name="l00548"></a>00548     <span class="keywordflow">return</span> <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm);
<a name="l00549"></a>00549 }
<a name="l00550"></a>00550 
<a name="l00551"></a><a class="code" href="fsm_8h.html#4e392c2eb31a72925861fa71125bc86c">00551</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#4e392c2eb31a72925861fa71125bc86c">fsmSetup</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm, <a class="code" href="fsm_8h.html#871643d0529d0b4be7d5286074388f09">fileStage</a> goal,
<a name="l00552"></a>00552                 <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts, <span class="keyword">const</span> <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi, <a class="code" href="struct__FD__s.html">FD_t</a> cfd,
<a name="l00553"></a>00553                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> * archiveSize, <span class="keyword">const</span> <span class="keywordtype">char</span> ** failedFile)
<a name="l00554"></a>00554 {
<a name="l00555"></a>00555     size_t pos = 0;
<a name="l00556"></a>00556     <span class="keywordtype">int</span> rc, ec = 0;
<a name="l00557"></a>00557 
<a name="l00558"></a>00558     fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> = goal;
<a name="l00559"></a>00559     <span class="keywordflow">if</span> (cfd != NULL) {
<a name="l00560"></a>00560         fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a> = <a class="code" href="rpmio_8h.html#3b340d609e3e1e97820090866983ab03">fdLink</a>(cfd, <span class="stringliteral">"persist (fsm)"</span>);
<a name="l00561"></a>00561         pos = <a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a>);
<a name="l00562"></a>00562         <a class="code" href="group__rpmio.html#g0e285724c7c920e460d9197f9396c69f">fdSetCpioPos</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a>, 0);
<a name="l00563"></a>00563     }
<a name="l00564"></a>00564     fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a> = <a class="code" href="group__payload.html#gafd355724cb7d0f444824822692d5f46">mapInitIterator</a>(ts, fi);
<a name="l00565"></a>00565 
<a name="l00566"></a>00566     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> || fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>) {
<a name="l00567"></a>00567         <span class="keywordtype">void</span> * ptr;
<a name="l00568"></a>00568         fi-&gt;archivePos = 0;
<a name="l00569"></a>00569         ptr = <a class="code" href="rpmts_8c.html#0a6512ba9da24d7fe31f7113e7ae2176">rpmtsNotify</a>(ts, fi-&gt;te,
<a name="l00570"></a>00570                 <a class="code" href="rpmmessages_8h.html#0b0bcfeb24a793c3aa0e84bb98539a9c38099385a51f1d286f3988c48a9e011c">RPMCALLBACK_INST_START</a>, fi-&gt;archivePos, fi-&gt;archiveSize);
<a name="l00571"></a>00571     }
<a name="l00572"></a>00572 
<a name="l00573"></a>00573 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00574"></a>00574     <span class="comment">/*@-assignexpose@*/</span>
<a name="l00575"></a>00575     fsm-&gt;<a class="code" href="structfsm__s.html#7bfc22da32bacd344f3ce17168a60d7f">archiveSize</a> = archiveSize;
<a name="l00576"></a>00576     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#7bfc22da32bacd344f3ce17168a60d7f">archiveSize</a>)
<a name="l00577"></a>00577         *fsm-&gt;<a class="code" href="structfsm__s.html#7bfc22da32bacd344f3ce17168a60d7f">archiveSize</a> = 0;
<a name="l00578"></a>00578     fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = failedFile;
<a name="l00579"></a>00579     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a>)
<a name="l00580"></a>00580         *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = NULL;
<a name="l00581"></a>00581     <span class="comment">/*@=assignexpose@*/</span>
<a name="l00582"></a>00582 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00583"></a>00583 
<a name="l00584"></a>00584     memset(fsm-&gt;<a class="code" href="structfsm__s.html#f6a9f7c89c0d8697f9040e29f01ef21d">sufbuf</a>, 0, <span class="keyword">sizeof</span>(fsm-&gt;<a class="code" href="structfsm__s.html#f6a9f7c89c0d8697f9040e29f01ef21d">sufbuf</a>));
<a name="l00585"></a>00585     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) {
<a name="l00586"></a>00586         <span class="keywordflow">if</span> (ts &amp;&amp; <a class="code" href="group__rpmts.html#gcc57dec2026120db7add45ef83859863">rpmtsGetTid</a>(ts) != -1)
<a name="l00587"></a>00587             sprintf(fsm-&gt;<a class="code" href="structfsm__s.html#f6a9f7c89c0d8697f9040e29f01ef21d">sufbuf</a>, <span class="stringliteral">";%08x"</span>, (<span class="keywordtype">unsigned</span>)<a class="code" href="group__rpmts.html#gcc57dec2026120db7add45ef83859863">rpmtsGetTid</a>(ts));
<a name="l00588"></a>00588     }
<a name="l00589"></a>00589 
<a name="l00590"></a>00590     ec = fsm-&gt;<a class="code" href="structfsm__s.html#626b109f0f6ccce9f827924763317fb4">rc</a> = 0;
<a name="l00591"></a>00591     rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294658be9c2849ae06a71d0f67f21c30701">FSM_CREATE</a>);
<a name="l00592"></a>00592     <span class="keywordflow">if</span> (rc &amp;&amp; !ec) ec = rc;
<a name="l00593"></a>00593 
<a name="l00594"></a>00594     rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a>);
<a name="l00595"></a>00595     <span class="keywordflow">if</span> (rc &amp;&amp; !ec) ec = rc;
<a name="l00596"></a>00596 
<a name="l00597"></a>00597 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00598"></a>00598     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#7bfc22da32bacd344f3ce17168a60d7f">archiveSize</a> &amp;&amp; ec == 0)
<a name="l00599"></a>00599         *fsm-&gt;<a class="code" href="structfsm__s.html#7bfc22da32bacd344f3ce17168a60d7f">archiveSize</a> = (<a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a>) - pos);
<a name="l00600"></a>00600 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00601"></a>00601 
<a name="l00602"></a>00602 <span class="comment">/*@-nullstate@*/</span> <span class="comment">/* FIX: *fsm-&gt;failedFile may be NULL */</span>
<a name="l00603"></a>00603    <span class="keywordflow">return</span> ec;
<a name="l00604"></a>00604 <span class="comment">/*@=nullstate@*/</span>
<a name="l00605"></a>00605 }
<a name="l00606"></a>00606 
<a name="l00607"></a><a class="code" href="fsm_8h.html#551dd542cd4c715378a10394cc55625f">00607</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#551dd542cd4c715378a10394cc55625f">fsmTeardown</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00608"></a>00608 {
<a name="l00609"></a>00609     <span class="keywordtype">int</span> rc = fsm-&gt;<a class="code" href="structfsm__s.html#626b109f0f6ccce9f827924763317fb4">rc</a>;
<a name="l00610"></a>00610 
<a name="l00611"></a>00611     <span class="keywordflow">if</span> (!rc)
<a name="l00612"></a>00612         rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672944ade9682e02bb1050772b89001ef877c">FSM_DESTROY</a>);
<a name="l00613"></a>00613 
<a name="l00614"></a>00614     fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a> = <a class="code" href="group__payload.html#gf6048f287f1b47ae5a4fb15e524b1e5a">mapFreeIterator</a>(fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a>);
<a name="l00615"></a>00615     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a> != NULL) {
<a name="l00616"></a>00616         fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a> = <a class="code" href="rpmio_8h.html#1f90185e68a3afb3a6aa4be2b997361b">fdFree</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a>, <span class="stringliteral">"persist (fsm)"</span>);
<a name="l00617"></a>00617         fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a> = NULL;
<a name="l00618"></a>00618     }
<a name="l00619"></a>00619     fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = NULL;
<a name="l00620"></a>00620     <span class="keywordflow">return</span> rc;
<a name="l00621"></a>00621 }
<a name="l00622"></a>00622 
<a name="l00623"></a><a class="code" href="fsm_8c.html#74f123ef66d7e0c0f021ad48deb22409">00623</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#74f123ef66d7e0c0f021ad48deb22409">fsmMapFContext</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00624"></a>00624         <span class="comment">/*@modifies fsm @*/</span>
<a name="l00625"></a>00625 {
<a name="l00626"></a>00626     <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = <a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm);
<a name="l00627"></a>00627     <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l00628"></a>00628     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l00629"></a>00629 
<a name="l00630"></a>00630     <span class="comment">/*</span>
<a name="l00631"></a>00631 <span class="comment">     * Find file security context (if not disabled).</span>
<a name="l00632"></a>00632 <span class="comment">     */</span>
<a name="l00633"></a>00633     fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> = NULL;
<a name="l00634"></a>00634     <span class="keywordflow">if</span> (ts != NULL &amp;&amp; <a class="code" href="group__rpmts.html#g05e5e58b25c9bb474d70000c9b24697c">rpmtsSELinuxEnabled</a>(ts) == 1 &amp;&amp;
<a name="l00635"></a>00635         !(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) &amp; <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f49168e0906450a1d6e075a8ffe4d5fbbe">RPMTRANS_FLAG_NOCONTEXTS</a>))
<a name="l00636"></a>00636     {
<a name="l00637"></a>00637         <a class="code" href="system_8h.html#647738b0bfa7922b9a114414112237d1">security_context_t</a> scon = NULL;
<a name="l00638"></a>00638 
<a name="l00639"></a>00639         <span class="keywordflow">if</span> ( matchpathcon(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, st-&gt;st_mode, &amp;scon) == 0 &amp;&amp; scon != NULL) {
<a name="l00640"></a>00640             <span class="comment">/* Get file security context from patterns. */</span>
<a name="l00641"></a>00641             fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> = scon;
<a name="l00642"></a>00642         } <span class="keywordflow">else</span> {
<a name="l00643"></a>00643             <span class="keywordtype">int</span> i = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l00644"></a>00644 
<a name="l00645"></a>00645             <span class="comment">/* Get file security context from package. */</span>
<a name="l00646"></a>00646             <span class="keywordflow">if</span> (fi &amp;&amp; i &gt;= 0 &amp;&amp; i &lt; fi-&gt;fc) {
<a name="l00647"></a>00647                 fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> = (fi-&gt;fcontexts ? fi-&gt;fcontexts[i] : NULL);
<a name="l00648"></a>00648                 <span class="keywordflow">return</span> 1;
<a name="l00649"></a>00649             }
<a name="l00650"></a>00650         }
<a name="l00651"></a>00651     }
<a name="l00652"></a>00652     <span class="keywordflow">return</span> 0;
<a name="l00653"></a>00653 }
<a name="l00654"></a>00654 
<a name="l00655"></a><a class="code" href="fsm_8h.html#1fa1b739f246cc53943a6d879f32b30f">00655</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#1fa1b739f246cc53943a6d879f32b30f">fsmMapPath</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00656"></a>00656 {
<a name="l00657"></a>00657     <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);   <span class="comment">/* XXX const except for fstates */</span>
<a name="l00658"></a>00658     <span class="keywordtype">int</span> rc = 0;
<a name="l00659"></a>00659     <span class="keywordtype">int</span> i;
<a name="l00660"></a>00660 
<a name="l00661"></a>00661     fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a> = NULL;
<a name="l00662"></a>00662     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = NULL;
<a name="l00663"></a>00663     fsm-&gt;<a class="code" href="structfsm__s.html#4ee56e57c102518e320e98072e508815">astriplen</a> = 0;
<a name="l00664"></a>00664     fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a> = <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0554058e6c6b3c417ce53eafb0fe7f6806">FA_UNKNOWN</a>;
<a name="l00665"></a>00665     fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> = 0;
<a name="l00666"></a>00666 
<a name="l00667"></a>00667     i = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l00668"></a>00668     <span class="keywordflow">if</span> (fi &amp;&amp; i &gt;= 0 &amp;&amp; i &lt; fi-&gt;fc) {
<a name="l00669"></a>00669 
<a name="l00670"></a>00670 <span class="comment">/*@-boundsread@*/</span>
<a name="l00671"></a>00671         fsm-&gt;<a class="code" href="structfsm__s.html#4ee56e57c102518e320e98072e508815">astriplen</a> = fi-&gt;astriplen;
<a name="l00672"></a>00672         fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a> = (fi-&gt;actions ? fi-&gt;actions[i] : fi-&gt;action);
<a name="l00673"></a>00673         fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> = (fi-&gt;fflags ? fi-&gt;fflags[i] : fi-&gt;flags);
<a name="l00674"></a>00674         fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> = (fi-&gt;fmapflags ? fi-&gt;fmapflags[i] : fi-&gt;mapflags);
<a name="l00675"></a>00675 
<a name="l00676"></a>00676         <span class="comment">/* src rpms have simple base name in payload. */</span>
<a name="l00677"></a>00677         fsm-&gt;<a class="code" href="structfsm__s.html#f56d13e88623d0dff6ff5bbf48565ac3">dirName</a> = fi-&gt;dnl[fi-&gt;dil[i]];
<a name="l00678"></a>00678         fsm-&gt;<a class="code" href="structfsm__s.html#83669964cbfc18b6bb0505e6f92705f4">baseName</a> = fi-&gt;bnl[i];
<a name="l00679"></a>00679 <span class="comment">/*@=boundsread@*/</span>
<a name="l00680"></a>00680 
<a name="l00681"></a>00681 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00682"></a>00682         <span class="keywordflow">switch</span> (fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a>) {
<a name="l00683"></a>00683         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05a2c1302ed618813615e8eda133074b3a">FA_SKIP</a>:
<a name="l00684"></a>00684             <span class="keywordflow">break</span>;
<a name="l00685"></a>00685         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0554058e6c6b3c417ce53eafb0fe7f6806">FA_UNKNOWN</a>:
<a name="l00686"></a>00686             <span class="keywordflow">break</span>;
<a name="l00687"></a>00687 
<a name="l00688"></a>00688         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0593e433874ed32187140e8fa952608896">FA_COPYOUT</a>:
<a name="l00689"></a>00689             <span class="keywordflow">break</span>;
<a name="l00690"></a>00690         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc055fed1ade77dfbb3db4d937a94498263b">FA_COPYIN</a>:
<a name="l00691"></a>00691         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc053f832bbad26488d6441a3d0589da2784">FA_CREATE</a>:
<a name="l00692"></a>00692 assert(<a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>);
<a name="l00693"></a>00693             <span class="keywordflow">break</span>;
<a name="l00694"></a>00694 
<a name="l00695"></a>00695         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc056a60e7a49164b8c0e4fcec71c0e1fd32">FA_SKIPNSTATE</a>:
<a name="l00696"></a>00696             <span class="keywordflow">if</span> (fi-&gt;fstates &amp;&amp; <a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>)
<a name="l00697"></a>00697                 fi-&gt;fstates[i] = <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9fa2b9bc63b8b01b9011d7704cfde0cf937">RPMFILE_STATE_NOTINSTALLED</a>;
<a name="l00698"></a>00698             <span class="keywordflow">break</span>;
<a name="l00699"></a>00699 
<a name="l00700"></a>00700         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05fa3c5366b8f18737a117930a4cbd4521">FA_SKIPNETSHARED</a>:
<a name="l00701"></a>00701             <span class="keywordflow">if</span> (fi-&gt;fstates &amp;&amp; <a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>)
<a name="l00702"></a>00702                 fi-&gt;fstates[i] = <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9fa2d0460c216f3ba14ff538290a35cc797">RPMFILE_STATE_NETSHARED</a>;
<a name="l00703"></a>00703             <span class="keywordflow">break</span>;
<a name="l00704"></a>00704 
<a name="l00705"></a>00705         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05b96dcf93168dd6d766f3ddfc22c62606">FA_SKIPCOLOR</a>:
<a name="l00706"></a>00706             <span class="keywordflow">if</span> (fi-&gt;fstates &amp;&amp; <a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>)
<a name="l00707"></a>00707                 fi-&gt;fstates[i] = <a class="code" href="rpmlib_8h.html#a38383fe1e8e46c7c4a072c45cbaa9faefeb1ba92f4f2bc42746cf90a3001dbd">RPMFILE_STATE_WRONGCOLOR</a>;
<a name="l00708"></a>00708             <span class="keywordflow">break</span>;
<a name="l00709"></a>00709 
<a name="l00710"></a>00710         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc051a5a5b499a264b1bcc214b1e9498c8fe">FA_BACKUP</a>:
<a name="l00711"></a>00711             <span class="keywordflow">if</span> (!(fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> &amp; <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f45c053b71f9ee21f35ed6452d86d76b4">RPMFILE_GHOST</a>)) <span class="comment">/* XXX Don't if %ghost file. */</span>
<a name="l00712"></a>00712             <span class="keywordflow">switch</span> (<a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te)) {
<a name="l00713"></a>00713             <span class="keywordflow">case</span> <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>:
<a name="l00714"></a>00714                 fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a> = <a class="code" href="fsm_8c.html#17b9a7cfb962b5d9f01642d7195b1d87">SUFFIX_RPMORIG</a>;
<a name="l00715"></a>00715                 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l00716"></a>00716             <span class="keywordflow">case</span> <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e50589af969c1fa71419e740b4b3445039bf7e">TR_REMOVED</a>:
<a name="l00717"></a>00717                 fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a> = <a class="code" href="fsm_8c.html#2901c16f2478fdc01294aa99122becbf">SUFFIX_RPMSAVE</a>;
<a name="l00718"></a>00718                 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l00719"></a>00719             }
<a name="l00720"></a>00720             <span class="keywordflow">break</span>;
<a name="l00721"></a>00721 
<a name="l00722"></a>00722         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05bc34912fb3e174c7ae2f4d94b671b0b0">FA_ALTNAME</a>:
<a name="l00723"></a>00723 assert(<a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>);
<a name="l00724"></a>00724             <span class="keywordflow">if</span> (!(fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> &amp; <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f45c053b71f9ee21f35ed6452d86d76b4">RPMFILE_GHOST</a>)) <span class="comment">/* XXX Don't if %ghost file. */</span>
<a name="l00725"></a>00725                 fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = <a class="code" href="fsm_8c.html#66b201a82f16f0fea02c0407277dba21">SUFFIX_RPMNEW</a>;
<a name="l00726"></a>00726             <span class="keywordflow">break</span>;
<a name="l00727"></a>00727 
<a name="l00728"></a>00728         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc058ad2065d928238a93bcb2db6c9c64a22">FA_SAVE</a>:
<a name="l00729"></a>00729 assert(<a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e505895d3834be137fb27a37fbb35c4d7d7823">TR_ADDED</a>);
<a name="l00730"></a>00730             <span class="keywordflow">if</span> (!(fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> &amp; <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f45c053b71f9ee21f35ed6452d86d76b4">RPMFILE_GHOST</a>)) <span class="comment">/* XXX Don't if %ghost file. */</span>
<a name="l00731"></a>00731                 fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a> = <a class="code" href="fsm_8c.html#2901c16f2478fdc01294aa99122becbf">SUFFIX_RPMSAVE</a>;
<a name="l00732"></a>00732             <span class="keywordflow">break</span>;
<a name="l00733"></a>00733         <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05f3aaace1f9e55323fb68a8b7064a720f">FA_ERASE</a>:
<a name="l00734"></a>00734 <span class="preprocessor">#if 0   </span><span class="comment">/* XXX is this a genhdlist fix? */</span>
<a name="l00735"></a>00735             assert(<a class="code" href="rpmte_8c.html#3e60aa541a83c82b027cad431cb03983">rpmteType</a>(fi-&gt;te) == <a class="code" href="group__rpmte.html#ggbaf1a00ee80e3bfa2d3f9a83b8e50589af969c1fa71419e740b4b3445039bf7e">TR_REMOVED</a>);
<a name="l00736"></a>00736 <span class="preprocessor">#endif</span>
<a name="l00737"></a>00737 <span class="preprocessor"></span>            <span class="comment">/*</span>
<a name="l00738"></a>00738 <span class="comment">             * XXX TODO: %ghost probably shouldn't be removed, but that changes</span>
<a name="l00739"></a>00739 <span class="comment">             * legacy rpm behavior.</span>
<a name="l00740"></a>00740 <span class="comment">             */</span>
<a name="l00741"></a>00741             <span class="keywordflow">break</span>;
<a name="l00742"></a>00742         <span class="keywordflow">default</span>:
<a name="l00743"></a>00743             <span class="keywordflow">break</span>;
<a name="l00744"></a>00744         }
<a name="l00745"></a>00745 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00746"></a>00746 
<a name="l00747"></a>00747         <span class="keywordflow">if</span> ((fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd18471069c02aa3087b79a4d8b08e785d">CPIO_MAP_PATH</a>) || fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>) {
<a name="l00748"></a>00748             <span class="keyword">const</span> <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l00749"></a>00749             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l00750"></a>00750             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, fsm-&gt;<a class="code" href="structfsm__s.html#e126a594c296468627bb24bd3252bd2c">subdir</a>,
<a name="l00751"></a>00751                 (fsm-&gt;<a class="code" href="structfsm__s.html#a4b937a0d3f331e89162ca65a0d8ce44">suffix</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#a4b937a0d3f331e89162ca65a0d8ce44">suffix</a> : fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>));
<a name="l00752"></a>00752         }
<a name="l00753"></a>00753     }
<a name="l00754"></a>00754     <span class="keywordflow">return</span> rc;
<a name="l00755"></a>00755 }
<a name="l00756"></a>00756 
<a name="l00757"></a><a class="code" href="fsm_8h.html#2876465dd3c700394ab363ba2e96e8f9">00757</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#2876465dd3c700394ab363ba2e96e8f9">fsmMapAttrs</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00758"></a>00758 {
<a name="l00759"></a>00759     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l00760"></a>00760     <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l00761"></a>00761     <span class="keywordtype">int</span> i = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l00762"></a>00762 
<a name="l00763"></a>00763     <span class="keywordflow">if</span> (fi &amp;&amp; i &gt;= 0 &amp;&amp; i &lt; fi-&gt;fc) {
<a name="l00764"></a>00764         mode_t perms = (S_ISDIR(st-&gt;st_mode) ? fi-&gt;dperms : fi-&gt;fperms);
<a name="l00765"></a>00765         mode_t finalMode = (fi-&gt;fmodes ? fi-&gt;fmodes[i] : perms);
<a name="l00766"></a>00766         dev_t finalRdev = (fi-&gt;frdevs ? fi-&gt;frdevs[i] : 0);
<a name="l00767"></a>00767         <a class="code" href="header_8h.html#e5c5e6fe946fcce0d2156db86ffffa8a">int_32</a> finalMtime = (fi-&gt;fmtimes ? fi-&gt;fmtimes[i] : 0);
<a name="l00768"></a>00768         uid_t uid = fi-&gt;uid;
<a name="l00769"></a>00769         gid_t gid = fi-&gt;gid;
<a name="l00770"></a>00770 
<a name="l00771"></a>00771         <span class="keywordflow">if</span> (fi-&gt;fuser &amp;&amp; <a class="code" href="ugid_8c.html#deef09986d46cedf92013ee9a4beb4a0">unameToUid</a>(fi-&gt;fuser[i], &amp;uid)) {
<a name="l00772"></a>00772             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l00773"></a>00773                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#dd380de8b2f203516cc1ab9475e31da5">RPMMESS_WARNING</a>,
<a name="l00774"></a>00774                     <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"user %s does not exist - using root\n"</span>), fi-&gt;fuser[i]);
<a name="l00775"></a>00775             uid = 0;
<a name="l00776"></a>00776             finalMode &amp;= ~S_ISUID;      <span class="comment">/* turn off suid bit */</span>
<a name="l00777"></a>00777         }
<a name="l00778"></a>00778 
<a name="l00779"></a>00779         <span class="keywordflow">if</span> (fi-&gt;fgroup &amp;&amp; <a class="code" href="ugid_8c.html#b16ffdc01a5000e14a299127870e6290">gnameToGid</a>(fi-&gt;fgroup[i], &amp;gid)) {
<a name="l00780"></a>00780             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l00781"></a>00781                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#dd380de8b2f203516cc1ab9475e31da5">RPMMESS_WARNING</a>,
<a name="l00782"></a>00782                     <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"group %s does not exist - using root\n"</span>), fi-&gt;fgroup[i]);
<a name="l00783"></a>00783             gid = 0;
<a name="l00784"></a>00784             finalMode &amp;= ~S_ISGID;      <span class="comment">/* turn off sgid bit */</span>
<a name="l00785"></a>00785         }
<a name="l00786"></a>00786 
<a name="l00787"></a>00787         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddef02065506b7158e59001c2404d06628">CPIO_MAP_MODE</a>)
<a name="l00788"></a>00788             st-&gt;st_mode = (st-&gt;st_mode &amp; S_IFMT) | (finalMode &amp; ~S_IFMT);
<a name="l00789"></a>00789         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd33fd9b35d8fd0243d25134c6177e9e12">CPIO_MAP_TYPE</a>) {
<a name="l00790"></a>00790             st-&gt;st_mode = (st-&gt;st_mode &amp; ~S_IFMT) | (finalMode &amp; S_IFMT);
<a name="l00791"></a>00791             <span class="keywordflow">if</span> ((S_ISCHR(st-&gt;st_mode) || S_ISBLK(st-&gt;st_mode))
<a name="l00792"></a>00792             &amp;&amp; st-&gt;st_nlink == 0)
<a name="l00793"></a>00793                 st-&gt;st_nlink = 1;
<a name="l00794"></a>00794             st-&gt;st_rdev = finalRdev;
<a name="l00795"></a>00795             st-&gt;st_mtime = finalMtime;
<a name="l00796"></a>00796         }
<a name="l00797"></a>00797         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddc943ea0fc6cf3a1ba2f0f01d57f22970">CPIO_MAP_UID</a>)
<a name="l00798"></a>00798             st-&gt;st_uid = uid;
<a name="l00799"></a>00799         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd5e58caae4ba0cdfbef976abd18035efd">CPIO_MAP_GID</a>)
<a name="l00800"></a>00800             st-&gt;st_gid = gid;
<a name="l00801"></a>00801 
<a name="l00802"></a>00802         {   <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = <a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm);
<a name="l00803"></a>00803 
<a name="l00804"></a>00804             <span class="comment">/*</span>
<a name="l00805"></a>00805 <span class="comment">             * Set file md5 (if not disabled).</span>
<a name="l00806"></a>00806 <span class="comment">             */</span>
<a name="l00807"></a>00807             <span class="keywordflow">if</span> (ts != NULL &amp;&amp; !(<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) &amp; <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f40bbf056fb445aab762a35b92933efc93">RPMTRANS_FLAG_NOMD5</a>)) {
<a name="l00808"></a>00808                 fsm-&gt;<a class="code" href="structfsm__s.html#836c2b676cbe76668685c7f5900552c2">fmd5sum</a> = (fi-&gt;fmd5s ? fi-&gt;fmd5s[i] : NULL);
<a name="l00809"></a>00809                 fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a> = (fi-&gt;md5s ? (fi-&gt;md5s + (16 * i)) : NULL);
<a name="l00810"></a>00810             } <span class="keywordflow">else</span> {
<a name="l00811"></a>00811                 fsm-&gt;<a class="code" href="structfsm__s.html#836c2b676cbe76668685c7f5900552c2">fmd5sum</a> = NULL;
<a name="l00812"></a>00812                 fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a> = NULL;
<a name="l00813"></a>00813             }
<a name="l00814"></a>00814         }
<a name="l00815"></a>00815 
<a name="l00816"></a>00816     }
<a name="l00817"></a>00817     <span class="keywordflow">return</span> 0;
<a name="l00818"></a>00818 }
<a name="l00819"></a>00819 
<a name="l00825"></a>00825 <span class="comment">/*@-compdef@*/</span>
<a name="l00826"></a><a class="code" href="group__payload.html#g4dac852bc38a7b7c56816ea4ced13caf">00826</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#g4dac852bc38a7b7c56816ea4ced13caf">expandRegular</a>(<span class="comment">/*@special@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l00827"></a>00827         <span class="comment">/*@uses fsm-&gt;fmd5sum, fsm-&gt;md5sum, fsm-&gt;sb, fsm-&gt;wfd  @*/</span>
<a name="l00828"></a>00828         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l00829"></a>00829         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l00830"></a>00830 {
<a name="l00831"></a>00831     <span class="keyword">const</span> <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l00832"></a>00832     <span class="keywordtype">int</span> <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> = st-&gt;st_size;
<a name="l00833"></a>00833     <span class="keywordtype">int</span> rc = 0;
<a name="l00834"></a>00834 
<a name="l00835"></a>00835     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729415867d9a592522dcdf1e949ff96b584d">FSM_WOPEN</a>);
<a name="l00836"></a>00836     <span class="keywordflow">if</span> (rc)
<a name="l00837"></a>00837         <span class="keywordflow">goto</span> exit;
<a name="l00838"></a>00838 
<a name="l00839"></a>00839     <span class="keywordflow">if</span> (st-&gt;st_size &gt; 0 &amp;&amp; (fsm-&gt;<a class="code" href="structfsm__s.html#836c2b676cbe76668685c7f5900552c2">fmd5sum</a> != NULL || fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a> != NULL))
<a name="l00840"></a>00840         <a class="code" href="group__rpmio.html#g878d57d802b1361c491a415c1e0dcad1">fdInitDigest</a>(fsm-&gt;<a class="code" href="structfsm__s.html#a62b7b48eaafc4817477a6121b6fb77c">wfd</a>, <a class="code" href="rpmpgp_8h.html#8d48cf9c33d66a07d2fee34b0875d54ed06371dade65fdf985086d1461218820">PGPHASHALGO_MD5</a>, 0);
<a name="l00841"></a>00841 
<a name="l00842"></a>00842     <span class="keywordflow">while</span> (left) {
<a name="l00843"></a>00843 
<a name="l00844"></a>00844         fsm-&gt;<a class="code" href="structfsm__s.html#5ed33054e05c86f39dbaff7013bded82">wrlen</a> = (left &gt; fsm-&gt;<a class="code" href="structfsm__s.html#3d80e5ea24aac7cb3be04a6521655122">wrsize</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#3d80e5ea24aac7cb3be04a6521655122">wrsize</a> : left);
<a name="l00845"></a>00845         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294aaad57b40c4c929dc9b6b21dd08d2094">FSM_DREAD</a>);
<a name="l00846"></a>00846         <span class="keywordflow">if</span> (rc)
<a name="l00847"></a>00847             <span class="keywordflow">goto</span> exit;
<a name="l00848"></a>00848 
<a name="l00849"></a>00849         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294a25d13047b5a7d78b1505e62c621176d">FSM_WRITE</a>);
<a name="l00850"></a>00850         <span class="keywordflow">if</span> (rc)
<a name="l00851"></a>00851             <span class="keywordflow">goto</span> exit;
<a name="l00852"></a>00852 
<a name="l00853"></a>00853         left -= fsm-&gt;<a class="code" href="structfsm__s.html#c0e8e3367adbe4e2412b5c3a68938ddc">wrnb</a>;
<a name="l00854"></a>00854 
<a name="l00855"></a>00855         <span class="comment">/* don't call this with fileSize == fileComplete */</span>
<a name="l00856"></a>00856         <span class="keywordflow">if</span> (!rc &amp;&amp; left)
<a name="l00857"></a>00857             (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948efc4f3fd8dab222270ff37c99d6b9ed">FSM_NOTIFY</a>);
<a name="l00858"></a>00858     }
<a name="l00859"></a>00859 
<a name="l00860"></a>00860     <span class="keywordflow">if</span> (st-&gt;st_size &gt; 0 &amp;&amp; (fsm-&gt;<a class="code" href="structfsm__s.html#836c2b676cbe76668685c7f5900552c2">fmd5sum</a> || fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a>)) {
<a name="l00861"></a>00861         <span class="keywordtype">void</span> * md5sum = NULL;
<a name="l00862"></a>00862         <span class="keywordtype">int</span> asAscii = (fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a> == NULL ? 1 : 0);
<a name="l00863"></a>00863 
<a name="l00864"></a>00864         (void) <a class="code" href="rpmio_8c.html#640e13034aae4bdaad1b2172f7456c85">Fflush</a>(fsm-&gt;<a class="code" href="structfsm__s.html#a62b7b48eaafc4817477a6121b6fb77c">wfd</a>);
<a name="l00865"></a>00865         <a class="code" href="group__rpmio.html#g8d5709df4f16a8765b457613e3093e1e">fdFiniDigest</a>(fsm-&gt;<a class="code" href="structfsm__s.html#a62b7b48eaafc4817477a6121b6fb77c">wfd</a>, <a class="code" href="rpmpgp_8h.html#8d48cf9c33d66a07d2fee34b0875d54ed06371dade65fdf985086d1461218820">PGPHASHALGO_MD5</a>, &amp;md5sum, NULL, asAscii);
<a name="l00866"></a>00866 
<a name="l00867"></a>00867         <span class="keywordflow">if</span> (md5sum == NULL) {
<a name="l00868"></a>00868             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414ecb28d09e65c824a9b9ee25d11d3e574">CPIOERR_MD5SUM_MISMATCH</a>;
<a name="l00869"></a>00869             <span class="keywordflow">goto</span> exit;
<a name="l00870"></a>00870         }
<a name="l00871"></a>00871 
<a name="l00872"></a>00872         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a> != NULL) {
<a name="l00873"></a>00873             <span class="keywordflow">if</span> (memcmp(md5sum, fsm-&gt;<a class="code" href="structfsm__s.html#2cfc2bdfa4a8d202526d67c2818ae9d8">md5sum</a>, 16))
<a name="l00874"></a>00874                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414ecb28d09e65c824a9b9ee25d11d3e574">CPIOERR_MD5SUM_MISMATCH</a>;
<a name="l00875"></a>00875         } <span class="keywordflow">else</span> {
<a name="l00876"></a>00876             <span class="keywordflow">if</span> (strcmp(md5sum, fsm-&gt;<a class="code" href="structfsm__s.html#836c2b676cbe76668685c7f5900552c2">fmd5sum</a>))
<a name="l00877"></a>00877                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414ecb28d09e65c824a9b9ee25d11d3e574">CPIOERR_MD5SUM_MISMATCH</a>;
<a name="l00878"></a>00878         }
<a name="l00879"></a>00879         md5sum = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(md5sum);
<a name="l00880"></a>00880     }
<a name="l00881"></a>00881 
<a name="l00882"></a>00882 exit:
<a name="l00883"></a>00883     (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b045cdb07ec8a86b21c4604d6361c957">FSM_WCLOSE</a>);
<a name="l00884"></a>00884     <span class="keywordflow">return</span> rc;
<a name="l00885"></a>00885 }
<a name="l00886"></a>00886 <span class="comment">/*@=compdef@*/</span>
<a name="l00887"></a>00887 
<a name="l00894"></a>00894 <span class="comment">/*@-compdef -compmempass@*/</span>
<a name="l00895"></a><a class="code" href="group__payload.html#gd04e184175efa348a0acfd8be35f5bc3">00895</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#gd04e184175efa348a0acfd8be35f5bc3">writeFile</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm, <span class="keywordtype">int</span> writeData)
<a name="l00896"></a>00896         <span class="comment">/*@uses fsm-&gt;path, fsm-&gt;opath, fsm-&gt;sb, fsm-&gt;osb, fsm-&gt;cfd @*/</span>
<a name="l00897"></a>00897         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l00898"></a>00898         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l00899"></a>00899 {
<a name="l00900"></a>00900     <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l00901"></a>00901     <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmtool_8c.html#64e16b80bb063a3a2954e2ac7be534cb">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>;
<a name="l00902"></a>00902     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l00903"></a>00903     <span class="keyword">struct </span>stat * ost = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#d2f2360821625adf23378dda004b168a">osb</a>;
<a name="l00904"></a>00904     <span class="keywordtype">char</span> * symbuf = NULL;
<a name="l00905"></a>00905     <span class="keywordtype">int</span> <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>;
<a name="l00906"></a>00906     <span class="keywordtype">int</span> xx;
<a name="l00907"></a>00907     <span class="keywordtype">int</span> rc;
<a name="l00908"></a>00908 
<a name="l00909"></a>00909     st-&gt;st_size = (writeData ? ost-&gt;st_size : 0);
<a name="l00910"></a>00910 
<a name="l00911"></a>00911     <span class="comment">/*@-branchstate@*/</span>
<a name="l00912"></a>00912     <span class="keywordflow">if</span> (S_ISDIR(st-&gt;st_mode)) {
<a name="l00913"></a>00913         st-&gt;st_size = 0;
<a name="l00914"></a>00914     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(st-&gt;st_mode)) {
<a name="l00915"></a>00915         <span class="comment">/*</span>
<a name="l00916"></a>00916 <span class="comment">         * While linux puts the size of a symlink in the st_size field,</span>
<a name="l00917"></a>00917 <span class="comment">         * I don't think that's a specified standard.</span>
<a name="l00918"></a>00918 <span class="comment">         */</span>
<a name="l00919"></a>00919         <span class="comment">/* XXX NUL terminated result in fsm-&gt;rdbuf, len in fsm-&gt;rdnb. */</span>
<a name="l00920"></a>00920         rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294654b792bc388bafe51e94dbb1415bfe5">FSM_READLINK</a>);
<a name="l00921"></a>00921         <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l00922"></a>00922         st-&gt;st_size = fsm-&gt;<a class="code" href="structfsm__s.html#5f7fc7df5ae41829134e440f07c6d451">rdnb</a>;
<a name="l00923"></a>00923         symbuf = <a class="code" href="fsm_8c.html#96e4041c4047f3298ec98d081530508b">alloca_strdup</a>(fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a>);     <span class="comment">/* XXX save readlink return. */</span>
<a name="l00924"></a>00924     }
<a name="l00925"></a>00925     <span class="comment">/*@=branchstate@*/</span>
<a name="l00926"></a>00926 
<a name="l00927"></a>00927     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddb21aaad8020727b2c6ec5b579157947e">CPIO_MAP_ABSOLUTE</a>) {
<a name="l00928"></a>00928 <span class="comment">/*@-boundswrite@*/</span>
<a name="l00929"></a>00929         <span class="keywordtype">int</span> nb = strlen(fsm-&gt;<a class="code" href="structfsm__s.html#f56d13e88623d0dff6ff5bbf48565ac3">dirName</a>) + strlen(fsm-&gt;<a class="code" href="structfsm__s.html#83669964cbfc18b6bb0505e6f92705f4">baseName</a>) + <span class="keyword">sizeof</span>(<span class="stringliteral">"."</span>);
<a name="l00930"></a>00930         <span class="keywordtype">char</span> * t = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(nb);
<a name="l00931"></a>00931         *t = <span class="charliteral">'\0'</span>;
<a name="l00932"></a>00932         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = t;
<a name="l00933"></a>00933         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5ddb6536ff5ccb2adfd3832a0681e6fef65">CPIO_MAP_ADDDOT</a>)
<a name="l00934"></a>00934             *t++ = <span class="charliteral">'.'</span>;
<a name="l00935"></a>00935         t = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(t, fsm-&gt;<a class="code" href="structfsm__s.html#f56d13e88623d0dff6ff5bbf48565ac3">dirName</a>), fsm-&gt;<a class="code" href="structfsm__s.html#83669964cbfc18b6bb0505e6f92705f4">baseName</a>);
<a name="l00936"></a>00936 <span class="comment">/*@=boundswrite@*/</span>
<a name="l00937"></a>00937     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd18471069c02aa3087b79a4d8b08e785d">CPIO_MAP_PATH</a>) {
<a name="l00938"></a>00938         <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l00939"></a>00939         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> =
<a name="l00940"></a>00940             (fi-&gt;apath ? fi-&gt;apath[fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>] + fi-&gt;striplen : fi-&gt;bnl[fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>]);
<a name="l00941"></a>00941     }
<a name="l00942"></a>00942 
<a name="l00943"></a>00943     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294509d07d14f3ce1a4b22381ca6e5e7cb9">FSM_HWRITE</a>);
<a name="l00944"></a>00944     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l00945"></a>00945     <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l00946"></a>00946 
<a name="l00947"></a>00947     <span class="keywordflow">if</span> (writeData &amp;&amp; S_ISREG(st-&gt;st_mode)) {
<a name="l00948"></a>00948 <span class="preprocessor">#ifdef HAVE_MMAP</span>
<a name="l00949"></a>00949 <span class="preprocessor"></span>        <span class="keywordtype">char</span> * rdbuf = NULL;
<a name="l00950"></a>00950         <span class="keywordtype">void</span> * mapped = (<span class="keywordtype">void</span> *)-1;
<a name="l00951"></a>00951         size_t nmapped;
<a name="l00952"></a>00952 <span class="preprocessor">#endif</span>
<a name="l00953"></a>00953 <span class="preprocessor"></span>
<a name="l00954"></a>00954         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294274ca5be69e660b97cb75e8c557e2b4e">FSM_ROPEN</a>);
<a name="l00955"></a>00955         <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l00956"></a>00956 
<a name="l00957"></a>00957         <span class="comment">/* XXX unbuffered mmap generates *lots* of fdio debugging */</span>
<a name="l00958"></a>00958 <span class="preprocessor">#ifdef HAVE_MMAP</span>
<a name="l00959"></a>00959 <span class="preprocessor"></span>        nmapped = 0;
<a name="l00960"></a>00960         mapped = mmap(NULL, st-&gt;st_size, PROT_READ, MAP_SHARED, <a class="code" href="rpmio_8c.html#ca02cbbacaad7e321e419900030f4fbf">Fileno</a>(fsm-&gt;<a class="code" href="structfsm__s.html#fd853e1fec9acf91b2aa3deecde833dd">rfd</a>), 0);
<a name="l00961"></a>00961         <span class="keywordflow">if</span> (mapped != (<span class="keywordtype">void</span> *)-1) {
<a name="l00962"></a>00962             rdbuf = fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a>;
<a name="l00963"></a>00963             fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a> = (<span class="keywordtype">char</span> *) mapped;
<a name="l00964"></a>00964             fsm-&gt;<a class="code" href="structfsm__s.html#23de2790384bbf6297212a18faa91373">rdlen</a> = nmapped = st-&gt;st_size;
<a name="l00965"></a>00965 <span class="preprocessor">#if defined(MADV_DONTNEED)</span>
<a name="l00966"></a>00966 <span class="preprocessor"></span>            xx = madvise(mapped, nmapped, MADV_DONTNEED);
<a name="l00967"></a>00967 <span class="preprocessor">#endif</span>
<a name="l00968"></a>00968 <span class="preprocessor"></span>        }
<a name="l00969"></a>00969 <span class="preprocessor">#endif</span>
<a name="l00970"></a>00970 <span class="preprocessor"></span>
<a name="l00971"></a>00971         left = st-&gt;st_size;
<a name="l00972"></a>00972 
<a name="l00973"></a>00973         <span class="keywordflow">while</span> (left) {
<a name="l00974"></a>00974 <span class="preprocessor">#ifdef HAVE_MMAP</span>
<a name="l00975"></a>00975 <span class="preprocessor"></span>          <span class="keywordflow">if</span> (mapped != (<span class="keywordtype">void</span> *)-1) {
<a name="l00976"></a>00976             fsm-&gt;<a class="code" href="structfsm__s.html#5f7fc7df5ae41829134e440f07c6d451">rdnb</a> = nmapped;
<a name="l00977"></a>00977           } <span class="keywordflow">else</span>
<a name="l00978"></a>00978 <span class="preprocessor">#endif</span>
<a name="l00979"></a>00979 <span class="preprocessor"></span>          {
<a name="l00980"></a>00980             fsm-&gt;<a class="code" href="structfsm__s.html#23de2790384bbf6297212a18faa91373">rdlen</a> = (left &gt; fsm-&gt;<a class="code" href="structfsm__s.html#b1ee2c45fe95f362099ca3bdd77f3591">rdsize</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#b1ee2c45fe95f362099ca3bdd77f3591">rdsize</a> : left),
<a name="l00981"></a>00981             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729470267988dbe27d56ae4b561333db1df5">FSM_READ</a>);
<a name="l00982"></a>00982             <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l00983"></a>00983           }
<a name="l00984"></a>00984 
<a name="l00985"></a>00985             <span class="comment">/* XXX DWRITE uses rdnb for I/O length. */</span>
<a name="l00986"></a>00986             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672945ac5b391f53c4858db2077e1a3d2ba62">FSM_DWRITE</a>);
<a name="l00987"></a>00987             <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l00988"></a>00988 
<a name="l00989"></a>00989             left -= fsm-&gt;<a class="code" href="structfsm__s.html#c0e8e3367adbe4e2412b5c3a68938ddc">wrnb</a>;
<a name="l00990"></a>00990         }
<a name="l00991"></a>00991 
<a name="l00992"></a>00992 <span class="preprocessor">#ifdef HAVE_MMAP</span>
<a name="l00993"></a>00993 <span class="preprocessor"></span><span class="comment">/*@-branchstate@*/</span>
<a name="l00994"></a>00994         <span class="keywordflow">if</span> (mapped != (<span class="keywordtype">void</span> *)-1) {
<a name="l00995"></a>00995             xx = msync(mapped, nmapped, MS_ASYNC);
<a name="l00996"></a>00996 <span class="preprocessor">#if defined(MADV_DONTNEED)</span>
<a name="l00997"></a>00997 <span class="preprocessor"></span>            xx = madvise(mapped, nmapped, MADV_DONTNEED);
<a name="l00998"></a>00998 <span class="preprocessor">#endif</span>
<a name="l00999"></a>00999 <span class="preprocessor"></span><span class="comment">/*@-noeffect@*/</span>
<a name="l01000"></a>01000             xx = munmap(mapped, nmapped);
<a name="l01001"></a>01001 <span class="comment">/*@=noeffect@*/</span>
<a name="l01002"></a>01002             fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a> = rdbuf;
<a name="l01003"></a>01003         }
<a name="l01004"></a>01004 <span class="comment">/*@=branchstate@*/</span>
<a name="l01005"></a>01005 <span class="preprocessor">#endif</span>
<a name="l01006"></a>01006 <span class="preprocessor"></span>
<a name="l01007"></a>01007     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (writeData &amp;&amp; <a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(st-&gt;st_mode)) {
<a name="l01008"></a>01008         <span class="comment">/* XXX DWRITE uses rdnb for I/O length. */</span>
<a name="l01009"></a>01009 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01010"></a>01010         strcpy(fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a>, symbuf);     <span class="comment">/* XXX restore readlink buffer. */</span>
<a name="l01011"></a>01011 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01012"></a>01012         fsm-&gt;<a class="code" href="structfsm__s.html#5f7fc7df5ae41829134e440f07c6d451">rdnb</a> = strlen(symbuf);
<a name="l01013"></a>01013         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672945ac5b391f53c4858db2077e1a3d2ba62">FSM_DWRITE</a>);
<a name="l01014"></a>01014         <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l01015"></a>01015     }
<a name="l01016"></a>01016 
<a name="l01017"></a>01017     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294468b8cd15c8370981450c237ca2ab28c">FSM_PAD</a>);
<a name="l01018"></a>01018     <span class="keywordflow">if</span> (rc) <span class="keywordflow">goto</span> exit;
<a name="l01019"></a>01019 
<a name="l01020"></a>01020     rc = 0;
<a name="l01021"></a>01021 
<a name="l01022"></a>01022 exit:
<a name="l01023"></a>01023     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#fd853e1fec9acf91b2aa3deecde833dd">rfd</a> != NULL)
<a name="l01024"></a>01024         (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729400a088b8822d7147f6016c8bbefdaa0c">FSM_RCLOSE</a>);
<a name="l01025"></a>01025 <span class="comment">/*@-dependenttrans@*/</span>
<a name="l01026"></a>01026     fsm-&gt;opath = opath;
<a name="l01027"></a>01027     fsm-&gt;path = path;
<a name="l01028"></a>01028 <span class="comment">/*@=dependenttrans@*/</span>
<a name="l01029"></a>01029     <span class="keywordflow">return</span> rc;
<a name="l01030"></a>01030 }
<a name="l01031"></a>01031 <span class="comment">/*@=compdef =compmempass@*/</span>
<a name="l01032"></a>01032 
<a name="l01038"></a><a class="code" href="group__payload.html#g3a9e45bef02068aed756069471086afc">01038</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#g3a9e45bef02068aed756069471086afc">writeLinkedFile</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l01039"></a>01039         <span class="comment">/*@uses fsm-&gt;path, fsm-&gt;nsuffix, fsm-&gt;ix, fsm-&gt;li, fsm-&gt;failedFile @*/</span>
<a name="l01040"></a>01040         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l01041"></a>01041         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l01042"></a>01042 {
<a name="l01043"></a>01043     <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01044"></a>01044     <span class="keyword">const</span> <span class="keywordtype">char</span> * nsuffix = fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>;
<a name="l01045"></a>01045     <span class="keywordtype">int</span> iterIndex = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l01046"></a>01046     <span class="keywordtype">int</span> ec = 0;
<a name="l01047"></a>01047     <span class="keywordtype">int</span> rc;
<a name="l01048"></a>01048     <span class="keywordtype">int</span> i;
<a name="l01049"></a>01049 
<a name="l01050"></a>01050     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l01051"></a>01051     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = NULL;
<a name="l01052"></a>01052     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = -1;
<a name="l01053"></a>01053 
<a name="l01054"></a>01054 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01055"></a>01055 <span class="comment">/*@-branchstate@*/</span>
<a name="l01056"></a>01056     <span class="keywordflow">for</span> (i = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#cf5ee06f642ac02bc3200a83a949f2a3">nlink</a> - 1; i &gt;= 0; i--) {
<a name="l01057"></a>01057 
<a name="l01058"></a>01058         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] &lt; 0) <span class="keywordflow">continue</span>;
<a name="l01059"></a>01059 
<a name="l01060"></a>01060         fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i];
<a name="l01061"></a>01061 <span class="comment">/*@-compdef@*/</span>
<a name="l01062"></a>01062         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>);
<a name="l01063"></a>01063 <span class="comment">/*@=compdef@*/</span>
<a name="l01064"></a>01064 
<a name="l01065"></a>01065         <span class="comment">/* Write data after last link. */</span>
<a name="l01066"></a>01066         rc = <a class="code" href="group__payload.html#gd04e184175efa348a0acfd8be35f5bc3">writeFile</a>(fsm, (i == 0));
<a name="l01067"></a>01067         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> &amp;&amp; rc != 0 &amp;&amp; *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> == NULL) {
<a name="l01068"></a>01068             ec = rc;
<a name="l01069"></a>01069             *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = <a class="code" href="system_8h.html#d6142d091f00b2d4543ce7a43e5d0eba">xstrdup</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01070"></a>01070         }
<a name="l01071"></a>01071 
<a name="l01072"></a>01072         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01073"></a>01073         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] = -1;
<a name="l01074"></a>01074     }
<a name="l01075"></a>01075 <span class="comment">/*@=branchstate@*/</span>
<a name="l01076"></a>01076 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01077"></a>01077 
<a name="l01078"></a>01078     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = iterIndex;
<a name="l01079"></a>01079     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = nsuffix;
<a name="l01080"></a>01080     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l01081"></a>01081     <span class="keywordflow">return</span> ec;
<a name="l01082"></a>01082 }
<a name="l01083"></a>01083 
<a name="l01089"></a>01089 <span class="comment">/*@-boundsread@*/</span>
<a name="l01090"></a>01090 <span class="comment">/*@-compdef@*/</span>
<a name="l01091"></a><a class="code" href="group__payload.html#g8ed996d8e4092d50dbeb8fede31e3905">01091</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#g8ed996d8e4092d50dbeb8fede31e3905">fsmMakeLinks</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l01092"></a>01092         <span class="comment">/*@uses fsm-&gt;path, fsm-&gt;opath, fsm-&gt;nsuffix, fsm-&gt;ix, fsm-&gt;li @*/</span>
<a name="l01093"></a>01093         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l01094"></a>01094         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l01095"></a>01095 {
<a name="l01096"></a>01096     <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01097"></a>01097     <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmtool_8c.html#64e16b80bb063a3a2954e2ac7be534cb">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>;
<a name="l01098"></a>01098     <span class="keyword">const</span> <span class="keywordtype">char</span> * nsuffix = fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>;
<a name="l01099"></a>01099     <span class="keywordtype">int</span> iterIndex = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l01100"></a>01100     <span class="keywordtype">int</span> ec = 0;
<a name="l01101"></a>01101     <span class="keywordtype">int</span> rc;
<a name="l01102"></a>01102     <span class="keywordtype">int</span> i;
<a name="l01103"></a>01103 
<a name="l01104"></a>01104     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l01105"></a>01105     fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = NULL;
<a name="l01106"></a>01106     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = NULL;
<a name="l01107"></a>01107     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = -1;
<a name="l01108"></a>01108 
<a name="l01109"></a>01109     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#6ff70805440e93e562aed13b756e3d59">createdPath</a>];
<a name="l01110"></a>01110     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>);
<a name="l01111"></a>01111     fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01112"></a>01112     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l01113"></a>01113     <span class="comment">/*@-branchstate@*/</span>
<a name="l01114"></a>01114     <span class="keywordflow">for</span> (i = 0; i &lt; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#cf5ee06f642ac02bc3200a83a949f2a3">nlink</a>; i++) {
<a name="l01115"></a>01115         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] &lt; 0) <span class="keywordflow">continue</span>;
<a name="l01116"></a>01116         if (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#6ff70805440e93e562aed13b756e3d59">createdPath</a> == i) <span class="keywordflow">continue</span>;
<a name="l01117"></a>01117 
<a name="l01118"></a>01118         fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i];
<a name="l01119"></a>01119         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01120"></a>01120         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>);
<a name="l01121"></a>01121         <span class="keywordflow">if</span> (<a class="code" href="rpmlib_8h.html#6fd020fd77b1ebad016a59c753d33966">XFA_SKIPPING</a>(fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a>)) <span class="keywordflow">continue</span>;
<a name="l01122"></a>01122 
<a name="l01123"></a>01123         rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>);
<a name="l01124"></a>01124         <span class="keywordflow">if</span> (!rc) <span class="keywordflow">continue</span>;
<a name="l01125"></a>01125         <span class="keywordflow">if</span> (!(rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>)) <span class="keywordflow">break</span>;
<a name="l01126"></a>01126 
<a name="l01127"></a>01127         <span class="comment">/* XXX link(fsm-&gt;opath, fsm-&gt;path) */</span>
<a name="l01128"></a>01128         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294440705fd05b53725958fec17a2fa9c0e">FSM_LINK</a>);
<a name="l01129"></a>01129         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> &amp;&amp; rc != 0 &amp;&amp; *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> == NULL) {
<a name="l01130"></a>01130             ec = rc;
<a name="l01131"></a>01131 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01132"></a>01132             *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = <a class="code" href="system_8h.html#d6142d091f00b2d4543ce7a43e5d0eba">xstrdup</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01133"></a>01133 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01134"></a>01134         }
<a name="l01135"></a>01135 
<a name="l01136"></a>01136         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>--;
<a name="l01137"></a>01137     }
<a name="l01138"></a>01138     <span class="comment">/*@=branchstate@*/</span>
<a name="l01139"></a>01139     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01140"></a>01140     fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>);
<a name="l01141"></a>01141 
<a name="l01142"></a>01142     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = iterIndex;
<a name="l01143"></a>01143     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = nsuffix;
<a name="l01144"></a>01144     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l01145"></a>01145     fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = opath;
<a name="l01146"></a>01146     <span class="keywordflow">return</span> ec;
<a name="l01147"></a>01147 }
<a name="l01148"></a>01148 <span class="comment">/*@=compdef@*/</span>
<a name="l01149"></a>01149 <span class="comment">/*@=boundsread@*/</span>
<a name="l01150"></a>01150 
<a name="l01156"></a>01156 <span class="comment">/*@-compdef@*/</span>
<a name="l01157"></a><a class="code" href="group__payload.html#gee7455fad232e91ca3168156cb4bf859">01157</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="group__payload.html#gee7455fad232e91ca3168156cb4bf859">fsmCommitLinks</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l01158"></a>01158         <span class="comment">/*@uses fsm-&gt;path, fsm-&gt;nsuffix, fsm-&gt;ix, fsm-&gt;sb,</span>
<a name="l01159"></a>01159 <span class="comment">                fsm-&gt;li, fsm-&gt;links @*/</span>
<a name="l01160"></a>01160         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l01161"></a>01161         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l01162"></a>01162 {
<a name="l01163"></a>01163     <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01164"></a>01164     <span class="keyword">const</span> <span class="keywordtype">char</span> * nsuffix = fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>;
<a name="l01165"></a>01165     <span class="keywordtype">int</span> iterIndex = fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>;
<a name="l01166"></a>01166     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l01167"></a>01167     <span class="keywordtype">int</span> rc = 0;
<a name="l01168"></a>01168     <span class="keywordtype">int</span> i;
<a name="l01169"></a>01169 
<a name="l01170"></a>01170     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l01171"></a>01171     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = NULL;
<a name="l01172"></a>01172     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = -1;
<a name="l01173"></a>01173 
<a name="l01174"></a>01174     <span class="comment">/*@-branchstate@*/</span>
<a name="l01175"></a>01175     <span class="keywordflow">for</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>) {
<a name="l01176"></a>01176         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a>.st_ino == st-&gt;st_ino &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a>.st_dev == st-&gt;st_dev)
<a name="l01177"></a>01177             <span class="keywordflow">break</span>;
<a name="l01178"></a>01178     }
<a name="l01179"></a>01179     <span class="comment">/*@=branchstate@*/</span>
<a name="l01180"></a>01180 
<a name="l01181"></a>01181 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01182"></a>01182     <span class="keywordflow">for</span> (i = 0; i &lt; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#cf5ee06f642ac02bc3200a83a949f2a3">nlink</a>; i++) {
<a name="l01183"></a>01183         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] &lt; 0) <span class="keywordflow">continue</span>;
<a name="l01184"></a>01184         fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i];
<a name="l01185"></a>01185         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>);
<a name="l01186"></a>01186         <span class="keywordflow">if</span> (!<a class="code" href="rpmlib_8h.html#6fd020fd77b1ebad016a59c753d33966">XFA_SKIPPING</a>(fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a>))
<a name="l01187"></a>01187             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294af617ad9cf372ea738fd4c126980f3e9">FSM_COMMIT</a>);
<a name="l01188"></a>01188         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01189"></a>01189         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] = -1;
<a name="l01190"></a>01190     }
<a name="l01191"></a>01191 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01192"></a>01192 
<a name="l01193"></a>01193     fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = iterIndex;
<a name="l01194"></a>01194     fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = nsuffix;
<a name="l01195"></a>01195     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l01196"></a>01196     <span class="keywordflow">return</span> rc;
<a name="l01197"></a>01197 }
<a name="l01198"></a>01198 <span class="comment">/*@=compdef@*/</span>
<a name="l01199"></a>01199 
<a name="l01205"></a><a class="code" href="fsm_8c.html#110be3395f7a6ff783c2ffb5f54f77c0">01205</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#110be3395f7a6ff783c2ffb5f54f77c0">fsmRmdirs</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l01206"></a>01206         <span class="comment">/*@uses fsm-&gt;path, fsm-&gt;dnlx, fsm-&gt;ldn, fsm-&gt;rdbuf, fsm-&gt;iter @*/</span>
<a name="l01207"></a>01207         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l01208"></a>01208         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l01209"></a>01209 {
<a name="l01210"></a>01210     <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01211"></a>01211     <span class="keywordtype">void</span> * dnli = <a class="code" href="group__payload.html#g819567140e097649a5bdbd07e0befa57">dnlInitIterator</a>(fsm, 1);
<a name="l01212"></a>01212     <span class="keywordtype">char</span> * dn = fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a>;
<a name="l01213"></a>01213     <span class="keywordtype">int</span> dc = <a class="code" href="group__payload.html#g00a5e255447a1dc73b348e88f757f305">dnlCount</a>(dnli);
<a name="l01214"></a>01214     <span class="keywordtype">int</span> rc = 0;
<a name="l01215"></a>01215 
<a name="l01216"></a>01216     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l01217"></a>01217 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01218"></a>01218     dn[0] = <span class="charliteral">'\0'</span>;
<a name="l01219"></a>01219     <span class="comment">/*@-observertrans -dependenttrans@*/</span>
<a name="l01220"></a>01220     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a> != NULL &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a> != NULL)
<a name="l01221"></a>01221     <span class="keywordflow">while</span> ((fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#ge4cbacf9e236ea1335a65a61f1c729ec">dnlNextIterator</a>(dnli)) != NULL) {
<a name="l01222"></a>01222         <span class="keywordtype">int</span> dnlen = strlen(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01223"></a>01223         <span class="keywordtype">char</span> * te;
<a name="l01224"></a>01224 
<a name="l01225"></a>01225         dc = <a class="code" href="group__payload.html#gd02a66adc2074ff3e72f743768b92c58">dnlIndex</a>(dnli);
<a name="l01226"></a>01226         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>[dc] &lt; 1 || fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>[dc] &gt;= dnlen)
<a name="l01227"></a>01227             <span class="keywordflow">continue</span>;
<a name="l01228"></a>01228 
<a name="l01229"></a>01229         <span class="comment">/* Copy to avoid const on fsm-&gt;path. */</span>
<a name="l01230"></a>01230         te = <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(dn, fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>) - 1;
<a name="l01231"></a>01231         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = dn;
<a name="l01232"></a>01232 
<a name="l01233"></a>01233         <span class="comment">/* Remove generated directories. */</span>
<a name="l01234"></a>01234         <span class="comment">/*@-usereleased@*/</span> <span class="comment">/* LCL: te used after release? */</span>
<a name="l01235"></a>01235         <span class="keywordflow">do</span> {
<a name="l01236"></a>01236             <span class="keywordflow">if</span> (*te == <span class="charliteral">'/'</span>) {
<a name="l01237"></a>01237                 *te = <span class="charliteral">'\0'</span>;
<a name="l01238"></a>01238 <span class="comment">/*@-compdef@*/</span>
<a name="l01239"></a>01239                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948262dd498388759224bc5f8d79bd2335">FSM_RMDIR</a>);
<a name="l01240"></a>01240 <span class="comment">/*@=compdef@*/</span>
<a name="l01241"></a>01241                 *te = <span class="charliteral">'/'</span>;
<a name="l01242"></a>01242             }
<a name="l01243"></a>01243             <span class="keywordflow">if</span> (rc)
<a name="l01244"></a>01244                 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01245"></a>01245             te--;
<a name="l01246"></a>01246         } <span class="keywordflow">while</span> ((te - fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>) &gt; fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>[dc]);
<a name="l01247"></a>01247         <span class="comment">/*@=usereleased@*/</span>
<a name="l01248"></a>01248     }
<a name="l01249"></a>01249 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01250"></a>01250     dnli = <a class="code" href="group__payload.html#ga88c46f5ccce701871cea31e493fda3a">dnlFreeIterator</a>(dnli);
<a name="l01251"></a>01251     <span class="comment">/*@=observertrans =dependenttrans@*/</span>
<a name="l01252"></a>01252 
<a name="l01253"></a>01253     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l01254"></a>01254     <span class="keywordflow">return</span> rc;
<a name="l01255"></a>01255 }
<a name="l01256"></a>01256 
<a name="l01262"></a><a class="code" href="fsm_8c.html#16b756d885444dd688635db2c4cd9ffd">01262</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#16b756d885444dd688635db2c4cd9ffd">fsmMkdirs</a>(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l01263"></a>01263         <span class="comment">/*@uses fsm-&gt;path, fsm-&gt;sb, fsm-&gt;osb, fsm-&gt;rdbuf, fsm-&gt;iter,</span>
<a name="l01264"></a>01264 <span class="comment">                fsm-&gt;ldn, fsm-&gt;ldnlen, fsm-&gt;ldnalloc @*/</span>
<a name="l01265"></a>01265         <span class="comment">/*@defines fsm-&gt;dnlx, fsm-&gt;ldn @*/</span>
<a name="l01266"></a>01266         <span class="comment">/*@globals h_errno, fileSystem, internalState @*/</span>
<a name="l01267"></a>01267         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l01268"></a>01268 {
<a name="l01269"></a>01269     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l01270"></a>01270     <span class="keyword">struct </span>stat * ost = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#d2f2360821625adf23378dda004b168a">osb</a>;
<a name="l01271"></a>01271     <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01272"></a>01272     mode_t st_mode = st-&gt;st_mode;
<a name="l01273"></a>01273     <span class="keywordtype">void</span> * dnli = <a class="code" href="group__payload.html#g819567140e097649a5bdbd07e0befa57">dnlInitIterator</a>(fsm, 0);
<a name="l01274"></a>01274     <span class="keywordtype">char</span> * dn = fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a>;
<a name="l01275"></a>01275     <span class="keywordtype">int</span> dc = <a class="code" href="group__payload.html#g00a5e255447a1dc73b348e88f757f305">dnlCount</a>(dnli);
<a name="l01276"></a>01276     <span class="keywordtype">int</span> rc = 0;
<a name="l01277"></a>01277     <span class="keywordtype">int</span> i;
<a name="l01278"></a>01278 <span class="comment">/*@-compdef@*/</span>
<a name="l01279"></a>01279     <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = <a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm);
<a name="l01280"></a>01280 <span class="comment">/*@=compdef@*/</span>
<a name="l01281"></a>01281     <a class="code" href="system_8h.html#647738b0bfa7922b9a114414112237d1">security_context_t</a> scon = NULL;
<a name="l01282"></a>01282 
<a name="l01283"></a>01283     fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l01284"></a>01284 
<a name="l01285"></a>01285 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01286"></a>01286     dn[0] = <span class="charliteral">'\0'</span>;
<a name="l01287"></a>01287     fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a> = (dc ? <a class="code" href="system_8h.html#cf4d2a0b6c4f9229a0f4687202abed54">xcalloc</a>(dc, <span class="keyword">sizeof</span>(*fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>)) : NULL);
<a name="l01288"></a>01288     <span class="comment">/*@-observertrans -dependenttrans@*/</span>
<a name="l01289"></a>01289     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a> != NULL)
<a name="l01290"></a>01290     <span class="keywordflow">while</span> ((fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#ge4cbacf9e236ea1335a65a61f1c729ec">dnlNextIterator</a>(dnli)) != NULL) {
<a name="l01291"></a>01291         <span class="keywordtype">int</span> dnlen = strlen(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01292"></a>01292         <span class="keywordtype">char</span> * te;
<a name="l01293"></a>01293 
<a name="l01294"></a>01294         dc = <a class="code" href="group__payload.html#gd02a66adc2074ff3e72f743768b92c58">dnlIndex</a>(dnli);
<a name="l01295"></a>01295         <span class="keywordflow">if</span> (dc &lt; 0) <span class="keywordflow">continue</span>;
<a name="l01296"></a>01296         fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>[dc] = dnlen;
<a name="l01297"></a>01297         <span class="keywordflow">if</span> (dnlen &lt;= 1)
<a name="l01298"></a>01298             <span class="keywordflow">continue</span>;
<a name="l01299"></a>01299 
<a name="l01300"></a>01300         <span class="comment">/*@-compdef -nullpass@*/</span>        <span class="comment">/* FIX: fsm-&gt;ldn not defined ??? */</span>
<a name="l01301"></a>01301         <span class="keywordflow">if</span> (dnlen &lt;= fsm-&gt;ldnlen &amp;&amp; !strcmp(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>))
<a name="l01302"></a>01302             <span class="keywordflow">continue</span>;
<a name="l01303"></a>01303         <span class="comment">/*@=compdef =nullpass@*/</span>
<a name="l01304"></a>01304 
<a name="l01305"></a>01305         <span class="comment">/* Copy to avoid const on fsm-&gt;path. */</span>
<a name="l01306"></a>01306         (void) <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(dn, fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01307"></a>01307         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = dn;
<a name="l01308"></a>01308 
<a name="l01309"></a>01309         <span class="comment">/* Assume '/' directory exists, "mkdir -p" for others if non-existent */</span>
<a name="l01310"></a>01310         <span class="keywordflow">for</span> (i = 1, te = dn + 1; *te != <span class="charliteral">'\0'</span>; te++, i++) {
<a name="l01311"></a>01311             <span class="keywordflow">if</span> (*te != <span class="charliteral">'/'</span>)
<a name="l01312"></a>01312                 <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l01313"></a>01313 
<a name="l01314"></a>01314             *te = <span class="charliteral">'\0'</span>;
<a name="l01315"></a>01315 
<a name="l01316"></a>01316             <span class="comment">/* Already validated? */</span>
<a name="l01317"></a>01317             <span class="comment">/*@-usedef -compdef -nullpass -nullderef@*/</span>
<a name="l01318"></a>01318             <span class="keywordflow">if</span> (i &lt; fsm-&gt;ldnlen &amp;&amp;
<a name="l01319"></a>01319                 (fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>[i] == <span class="charliteral">'/'</span> || fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>[i] == <span class="charliteral">'\0'</span>) &amp;&amp;
<a name="l01320"></a>01320                 !strncmp(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>, i))
<a name="l01321"></a>01321             {
<a name="l01322"></a>01322                 *te = <span class="charliteral">'/'</span>;
<a name="l01323"></a>01323                 <span class="comment">/* Move pre-existing path marker forward. */</span>
<a name="l01324"></a>01324                 fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>[dc] = (te - dn);
<a name="l01325"></a>01325                 <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l01326"></a>01326             }
<a name="l01327"></a>01327             <span class="comment">/*@=usedef =compdef =nullpass =nullderef@*/</span>
<a name="l01328"></a>01328 
<a name="l01329"></a>01329             <span class="comment">/* Validate next component of path. */</span>
<a name="l01330"></a>01330             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672946277dc678cf1e161be9f0ad332098898">FSM_LSTAT</a>);
<a name="l01331"></a>01331             *te = <span class="charliteral">'/'</span>;
<a name="l01332"></a>01332 
<a name="l01333"></a>01333             <span class="comment">/* Directory already exists? */</span>
<a name="l01334"></a>01334             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; S_ISDIR(ost-&gt;st_mode)) {
<a name="l01335"></a>01335                 <span class="comment">/* Move pre-existing path marker forward. */</span>
<a name="l01336"></a>01336                 fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>[dc] = (te - dn);
<a name="l01337"></a>01337             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>) {
<a name="l01338"></a>01338                 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l01339"></a>01339                 *te = <span class="charliteral">'\0'</span>;
<a name="l01340"></a>01340                 st-&gt;st_mode = S_IFDIR | (fi-&gt;dperms &amp; 07777);
<a name="l01341"></a>01341                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729440ebe13d6dc6c738503ca54666f17e1c">FSM_MKDIR</a>);
<a name="l01342"></a>01342                 <span class="keywordflow">if</span> (!rc) {
<a name="l01343"></a>01343                     <span class="comment">/* XXX FIXME? only new dir will have context set. */</span>
<a name="l01344"></a>01344                     <span class="comment">/* Get file security context from patterns. */</span>
<a name="l01345"></a>01345                     <span class="keywordflow">if</span> (<a class="code" href="group__rpmts.html#g05e5e58b25c9bb474d70000c9b24697c">rpmtsSELinuxEnabled</a>(ts) &amp;&amp;
<a name="l01346"></a>01346                         ! <a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) &amp; <a class="code" href="rpmlib_8h.html#ca72ece8019aa198fc445bd206caa3f49168e0906450a1d6e075a8ffe4d5fbbe">RPMTRANS_FLAG_NOCONTEXTS</a>) {
<a name="l01347"></a>01347                         <span class="keywordflow">if</span> (matchpathcon(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, st-&gt;st_mode, &amp;scon) == 0 &amp;&amp;
<a name="l01348"></a>01348                             scon != NULL) {
<a name="l01349"></a>01349                                 fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> = scon;
<a name="l01350"></a>01350                                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294524170fb8bc99461d41fc6e142dc0887">FSM_LSETFCON</a>);
<a name="l01351"></a>01351                         }
<a name="l01352"></a>01352                     }
<a name="l01353"></a>01353                         
<a name="l01354"></a>01354                     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> == NULL)
<a name="l01355"></a>01355                         <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>,
<a name="l01356"></a>01356                             <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s directory created with perms %04o, no context.\n"</span>),
<a name="l01357"></a>01357                             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, (<span class="keywordtype">unsigned</span>)(st-&gt;st_mode &amp; 07777));
<a name="l01358"></a>01358                     <span class="keywordflow">else</span> {
<a name="l01359"></a>01359                         <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG,
<a name="l01360"></a>01360                             <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s directory created with perms %04o, context %s.\n"</span>),
<a name="l01361"></a>01361                             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, (<span class="keywordtype">unsigned</span>)(st-&gt;st_mode &amp; 07777),
<a name="l01362"></a>01362                             fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a>);
<a name="l01363"></a>01363                         <a class="code" href="system_8h.html#579557463dca40bc27551ed71fc463b9">freecon</a>(fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a>);
<a name="l01364"></a>01364                     }
<a name="l01365"></a>01365                     fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> = NULL;
<a name="l01366"></a>01366                 }
<a name="l01367"></a>01367                 *te = <span class="charliteral">'/'</span>;
<a name="l01368"></a>01368             }
<a name="l01369"></a>01369             <span class="keywordflow">if</span> (rc)
<a name="l01370"></a>01370                 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01371"></a>01371         }
<a name="l01372"></a>01372         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l01373"></a>01373 
<a name="l01374"></a>01374         <span class="comment">/* Save last validated path. */</span>
<a name="l01375"></a>01375 <span class="comment">/*@-compdef@*/</span> <span class="comment">/* FIX: ldn/path annotations ? */</span>
<a name="l01376"></a>01376         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#fd9bdc3319e1b54c2f401412c879f703">ldnalloc</a> &lt; (dnlen + 1)) {
<a name="l01377"></a>01377             fsm-&gt;<a class="code" href="structfsm__s.html#fd9bdc3319e1b54c2f401412c879f703">ldnalloc</a> = dnlen + 100;
<a name="l01378"></a>01378             fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a> = <a class="code" href="system_8h.html#93a8ec6e8a6eef0f62b7e5b50d0bf9e4">xrealloc</a>(fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>, fsm-&gt;<a class="code" href="structfsm__s.html#fd9bdc3319e1b54c2f401412c879f703">ldnalloc</a>);
<a name="l01379"></a>01379         }
<a name="l01380"></a>01380         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a> != NULL) { <span class="comment">/* XXX can't happen */</span>
<a name="l01381"></a>01381             strcpy(fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>, fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01382"></a>01382             fsm-&gt;<a class="code" href="structfsm__s.html#1b4935e736f23a271a33913e40e36080">ldnlen</a> = dnlen;
<a name="l01383"></a>01383         }
<a name="l01384"></a>01384 <span class="comment">/*@=compdef@*/</span>
<a name="l01385"></a>01385     }
<a name="l01386"></a>01386 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01387"></a>01387     dnli = <a class="code" href="group__payload.html#ga88c46f5ccce701871cea31e493fda3a">dnlFreeIterator</a>(dnli);
<a name="l01388"></a>01388     <span class="comment">/*@=observertrans =dependenttrans@*/</span>
<a name="l01389"></a>01389 
<a name="l01390"></a>01390     fsm-&gt;path = path;
<a name="l01391"></a>01391     st-&gt;st_mode = st_mode;              <span class="comment">/* XXX restore st-&gt;st_mode */</span>
<a name="l01392"></a>01392 <span class="comment">/*@-compdef@*/</span> <span class="comment">/* FIX: ldn/path annotations ? */</span>
<a name="l01393"></a>01393     <span class="keywordflow">return</span> rc;
<a name="l01394"></a>01394 <span class="comment">/*@=compdef@*/</span>
<a name="l01395"></a>01395 }
<a name="l01396"></a>01396 
<a name="l01397"></a>01397 <span class="preprocessor">#ifdef  NOTYET</span>
<a name="l01398"></a>01398 <span class="preprocessor"></span>
<a name="l01403"></a>01403 <span class="keyword">static</span> <span class="keywordtype">int</span> fsmStat(<span class="comment">/*@special@*/</span> <span class="comment">/*@partial@*/</span> <a class="code" href="structfsm__s.html">FSM_t</a> fsm)
<a name="l01404"></a>01404         <span class="comment">/*@globals fileSystem, internalState @*/</span>
<a name="l01405"></a>01405         <span class="comment">/*@modifies fsm, fileSystem, internalState @*/</span>
<a name="l01406"></a>01406 {
<a name="l01407"></a>01407     <span class="keywordtype">int</span> rc = 0;
<a name="l01408"></a>01408 
<a name="l01409"></a>01409     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> != NULL) {
<a name="l01410"></a>01410         <span class="keywordtype">int</span> saveernno = <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>;
<a name="l01411"></a>01411         rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, (!(fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dde92fa946a44848fc96b9b8625d921077">CPIO_FOLLOW_SYMLINKS</a>)
<a name="l01412"></a>01412                         ? <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672946277dc678cf1e161be9f0ad332098898">FSM_LSTAT</a> : <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729491aaf77994d76d053f893def39b9da63">FSM_STAT</a>));
<a name="l01413"></a>01413         <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>) {
<a name="l01414"></a>01414             <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l01415"></a>01415             rc = 0;
<a name="l01416"></a>01416             fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 0;
<a name="l01417"></a>01417         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rc == 0) {
<a name="l01418"></a>01418             fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 1;
<a name="l01419"></a>01419         }
<a name="l01420"></a>01420     } <span class="keywordflow">else</span> {
<a name="l01421"></a>01421         <span class="comment">/* Skip %ghost files on build. */</span>
<a name="l01422"></a>01422         fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 0;
<a name="l01423"></a>01423     }
<a name="l01424"></a>01424     <span class="keywordflow">return</span> rc;
<a name="l01425"></a>01425 }
<a name="l01426"></a>01426 <span class="preprocessor">#endif</span>
<a name="l01427"></a>01427 <span class="preprocessor"></span>
<a name="l01428"></a><a class="code" href="fsm_8c.html#0e9dabd52e3a51c1218b093cccbd6359">01428</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="fsm_8c.html#0e9dabd52e3a51c1218b093cccbd6359">removeSBITS</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path)
<a name="l01429"></a>01429 {
<a name="l01430"></a>01430     <span class="keyword">struct </span>stat stb;
<a name="l01431"></a>01431     <span class="keywordflow">if</span> (lstat(path, &amp;stb) == 0 &amp;&amp; S_ISREG(stb.st_mode)) {
<a name="l01432"></a>01432         <span class="keywordflow">if</span> ((stb.st_mode &amp; 06000) != 0) {
<a name="l01433"></a>01433             (void) chmod(path, stb.st_mode &amp; 0777);
<a name="l01434"></a>01434         }
<a name="l01435"></a>01435     }
<a name="l01436"></a>01436 }
<a name="l01437"></a>01437 
<a name="l01438"></a><a class="code" href="fsm_8c.html#a372b70439510d51a20a0f310612632e">01438</a> <span class="preprocessor">#define IS_DEV_LOG(_x)  \</span>
<a name="l01439"></a>01439 <span class="preprocessor">        ((_x) != NULL &amp;&amp; strlen(_x) &gt;= (sizeof("/dev/log")-1) &amp;&amp; \</span>
<a name="l01440"></a>01440 <span class="preprocessor">        !strncmp((_x), "/dev/log", sizeof("/dev/log")-1) &amp;&amp; \</span>
<a name="l01441"></a>01441 <span class="preprocessor">        ((_x)[sizeof("/dev/log")-1] == '\0' || \</span>
<a name="l01442"></a>01442 <span class="preprocessor">         (_x)[sizeof("/dev/log")-1] == ';'))</span>
<a name="l01443"></a>01443 <span class="preprocessor"></span>
<a name="l01444"></a>01444 <span class="comment">/*@-boundsread@*/</span>
<a name="l01445"></a>01445 <span class="comment">/*@-compmempass@*/</span>
<a name="l01446"></a><a class="code" href="fsm_8h.html#626f755bcfc50db6dacad7a70fa9e8ce">01446</a> <span class="keywordtype">int</span> <a class="code" href="fsm_8c.html#626f755bcfc50db6dacad7a70fa9e8ce">fsmStage</a>(<a class="code" href="structfsm__s.html">FSM_t</a> fsm, <a class="code" href="fsm_8h.html#871643d0529d0b4be7d5286074388f09">fileStage</a> stage)
<a name="l01447"></a>01447 {
<a name="l01448"></a>01448 <span class="preprocessor">#ifdef  UNUSED</span>
<a name="l01449"></a>01449 <span class="preprocessor"></span>    <a class="code" href="fsm_8h.html#871643d0529d0b4be7d5286074388f09">fileStage</a> prevStage = fsm-&gt;<a class="code" href="structfsm__s.html#cfad26f8503dc9cd2392b1fd1fe265b8">stage</a>;
<a name="l01450"></a>01450     <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> prev = <a class="code" href="fsm_8c.html#ea577beecc156fa488c02fdca4c6a592">fileStageString</a>(prevStage);
<a name="l01451"></a>01451 <span class="preprocessor">#endif</span>
<a name="l01452"></a>01452 <span class="preprocessor"></span>    <span class="keyword">static</span> <span class="keywordtype">int</span> modulo = 4;
<a name="l01453"></a>01453     <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> cur = <a class="code" href="fsm_8c.html#ea577beecc156fa488c02fdca4c6a592">fileStageString</a>(stage);
<a name="l01454"></a>01454     <span class="keyword">struct </span>stat * st = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;
<a name="l01455"></a>01455     <span class="keyword">struct </span>stat * ost = &amp;fsm-&gt;<a class="code" href="structfsm__s.html#d2f2360821625adf23378dda004b168a">osb</a>;
<a name="l01456"></a>01456     <span class="keywordtype">int</span> saveerrno = <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>;
<a name="l01457"></a>01457     <span class="keywordtype">int</span> rc = fsm-&gt;<a class="code" href="structfsm__s.html#626b109f0f6ccce9f827924763317fb4">rc</a>;
<a name="l01458"></a>01458     size_t <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>;
<a name="l01459"></a>01459     <span class="keywordtype">int</span> i;
<a name="l01460"></a>01460 
<a name="l01461"></a>01461 <span class="preprocessor">#define _fafilter(_a)   \</span>
<a name="l01462"></a>01462 <span class="preprocessor">    (!((_a) == FA_CREATE || (_a) == FA_ERASE || (_a) == FA_COPYIN || (_a) == FA_COPYOUT) \</span>
<a name="l01463"></a>01463 <span class="preprocessor">        ? fileActionString(_a) : "")</span>
<a name="l01464"></a>01464 <span class="preprocessor"></span>
<a name="l01465"></a>01465     <span class="keywordflow">if</span> (stage &amp; <a class="code" href="fsm_8h.html#4683ffc404c026dd40fb5f075454d164">FSM_DEAD</a>) {
<a name="l01466"></a>01466         <span class="comment">/* do nothing */</span>
<a name="l01467"></a>01467     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (stage &amp; <a class="code" href="fsm_8h.html#ee1c57f5f9c91fe81110bb397069a537">FSM_INTERNAL</a>) {
<a name="l01468"></a>01468         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; !(stage &amp; <a class="code" href="fsm_8h.html#dd1f24dac2619d770620fd31a83ecb3c">FSM_SYSCALL</a>))
<a name="l01469"></a>01469             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <span class="stringliteral">" %8s %06o%3d (%4d,%4d)%10d %s %s\n"</span>,
<a name="l01470"></a>01470                 cur,
<a name="l01471"></a>01471                 (<span class="keywordtype">unsigned</span>)st-&gt;st_mode, (<span class="keywordtype">int</span>)st-&gt;st_nlink,
<a name="l01472"></a>01472                 (<span class="keywordtype">int</span>)st-&gt;st_uid, (<span class="keywordtype">int</span>)st-&gt;st_gid, (<span class="keywordtype">int</span>)st-&gt;st_size,
<a name="l01473"></a>01473                 (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> : <span class="stringliteral">""</span>),
<a name="l01474"></a>01474                 <a class="code" href="fsm_8c.html#f03748c879b1a8d80bd0843e375240fe">_fafilter</a>(fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a>));
<a name="l01475"></a>01475     } <span class="keywordflow">else</span> {
<a name="l01476"></a>01476         fsm-&gt;<a class="code" href="structfsm__s.html#cfad26f8503dc9cd2392b1fd1fe265b8">stage</a> = stage;
<a name="l01477"></a>01477         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> || !(stage &amp; <a class="code" href="fsm_8h.html#be68e86025198096bd376d1dcc9e4ce4">FSM_VERBOSE</a>))
<a name="l01478"></a>01478             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <span class="stringliteral">"%-8s  %06o%3d (%4d,%4d)%10d %s %s\n"</span>,
<a name="l01479"></a>01479                 cur,
<a name="l01480"></a>01480                 (<span class="keywordtype">unsigned</span>)st-&gt;st_mode, (<span class="keywordtype">int</span>)st-&gt;st_nlink,
<a name="l01481"></a>01481                 (<span class="keywordtype">int</span>)st-&gt;st_uid, (<span class="keywordtype">int</span>)st-&gt;st_gid, (<span class="keywordtype">int</span>)st-&gt;st_size,
<a name="l01482"></a>01482                 (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> + fsm-&gt;<a class="code" href="structfsm__s.html#4ee56e57c102518e320e98072e508815">astriplen</a> : <span class="stringliteral">""</span>),
<a name="l01483"></a>01483                 <a class="code" href="fsm_8c.html#f03748c879b1a8d80bd0843e375240fe">_fafilter</a>(fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a>));
<a name="l01484"></a>01484     }
<a name="l01485"></a>01485 <span class="preprocessor">#undef  _fafilter</span>
<a name="l01486"></a>01486 <span class="preprocessor"></span>
<a name="l01487"></a>01487     <span class="comment">/*@-branchstate@*/</span>
<a name="l01488"></a>01488     <span class="keywordflow">switch</span> (stage) {
<a name="l01489"></a>01489     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941aeca4c4cd9f6ffa7812027916eedd84">FSM_UNKNOWN</a>:
<a name="l01490"></a>01490         <span class="keywordflow">break</span>;
<a name="l01491"></a>01491     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>:
<a name="l01492"></a>01492         <span class="keywordflow">while</span> (1) {
<a name="l01493"></a>01493             <span class="comment">/* Clean fsm, free'ing memory. Read next archive header. */</span>
<a name="l01494"></a>01494             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729412dc9800764a07e5a3b752347f4ed560">FSM_INIT</a>);
<a name="l01495"></a>01495 
<a name="l01496"></a>01496             <span class="comment">/* Exit on end-of-payload. */</span>
<a name="l01497"></a>01497             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142047381892440ecbb198613725bed387">CPIOERR_HDR_TRAILER</a>) {
<a name="l01498"></a>01498                 rc = 0;
<a name="l01499"></a>01499                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01500"></a>01500             }
<a name="l01501"></a>01501 
<a name="l01502"></a>01502             <span class="comment">/* Exit on error. */</span>
<a name="l01503"></a>01503             <span class="keywordflow">if</span> (rc) {
<a name="l01504"></a>01504                 fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a> = 1;
<a name="l01505"></a>01505                 (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729449f8b806c12262b1025d9a9da927f46d">FSM_UNDO</a>);
<a name="l01506"></a>01506                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01507"></a>01507             }
<a name="l01508"></a>01508 
<a name="l01509"></a>01509             <span class="comment">/* Extract file from archive. */</span>
<a name="l01510"></a>01510             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729475452f4058e4a420775b0377c842068b">FSM_PROCESS</a>);
<a name="l01511"></a>01511             <span class="keywordflow">if</span> (rc) {
<a name="l01512"></a>01512                 (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729449f8b806c12262b1025d9a9da927f46d">FSM_UNDO</a>);
<a name="l01513"></a>01513                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01514"></a>01514             }
<a name="l01515"></a>01515 
<a name="l01516"></a>01516             <span class="comment">/* Notify on success. */</span>
<a name="l01517"></a>01517             (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948efc4f3fd8dab222270ff37c99d6b9ed">FSM_NOTIFY</a>);
<a name="l01518"></a>01518 
<a name="l01519"></a>01519             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729443abe3a4cef56ad3619b3dd8a652f6fd">FSM_FINI</a>);
<a name="l01520"></a>01520             <span class="keywordflow">if</span> (rc) {
<a name="l01521"></a>01521                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01522"></a>01522             }
<a name="l01523"></a>01523         }
<a name="l01524"></a>01524         <span class="keywordflow">break</span>;
<a name="l01525"></a>01525     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d9fc895da99bddbc74811ae0df74d0d3">FSM_PKGERASE</a>:
<a name="l01526"></a>01526     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729407950152b6bb79e018cd854d3b1b825b">FSM_PKGCOMMIT</a>:
<a name="l01527"></a>01527         <span class="keywordflow">while</span> (1) {
<a name="l01528"></a>01528             <span class="comment">/* Clean fsm, free'ing memory. */</span>
<a name="l01529"></a>01529             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729412dc9800764a07e5a3b752347f4ed560">FSM_INIT</a>);
<a name="l01530"></a>01530 
<a name="l01531"></a>01531             <span class="comment">/* Exit on end-of-payload. */</span>
<a name="l01532"></a>01532             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142047381892440ecbb198613725bed387">CPIOERR_HDR_TRAILER</a>) {
<a name="l01533"></a>01533                 rc = 0;
<a name="l01534"></a>01534                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01535"></a>01535             }
<a name="l01536"></a>01536 
<a name="l01537"></a>01537             <span class="comment">/* Rename/erase next item. */</span>
<a name="l01538"></a>01538             <span class="keywordflow">if</span> (<a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729443abe3a4cef56ad3619b3dd8a652f6fd">FSM_FINI</a>))
<a name="l01539"></a>01539                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01540"></a>01540         }
<a name="l01541"></a>01541         <span class="keywordflow">break</span>;
<a name="l01542"></a>01542     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>:
<a name="l01543"></a>01543         <span class="keywordflow">while</span> (1) {
<a name="l01544"></a>01544 
<a name="l01545"></a>01545             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729412dc9800764a07e5a3b752347f4ed560">FSM_INIT</a>);
<a name="l01546"></a>01546 
<a name="l01547"></a>01547             <span class="comment">/* Exit on end-of-payload. */</span>
<a name="l01548"></a>01548             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142047381892440ecbb198613725bed387">CPIOERR_HDR_TRAILER</a>) {
<a name="l01549"></a>01549                 rc = 0;
<a name="l01550"></a>01550                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01551"></a>01551             }
<a name="l01552"></a>01552 
<a name="l01553"></a>01553             <span class="comment">/* Exit on error. */</span>
<a name="l01554"></a>01554             <span class="keywordflow">if</span> (rc) {
<a name="l01555"></a>01555                 fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a> = 1;
<a name="l01556"></a>01556                 (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729449f8b806c12262b1025d9a9da927f46d">FSM_UNDO</a>);
<a name="l01557"></a>01557                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01558"></a>01558             }
<a name="l01559"></a>01559 
<a name="l01560"></a>01560             <span class="comment">/* Copy file into archive. */</span>
<a name="l01561"></a>01561             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729475452f4058e4a420775b0377c842068b">FSM_PROCESS</a>);
<a name="l01562"></a>01562             <span class="keywordflow">if</span> (rc) {
<a name="l01563"></a>01563                 (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729449f8b806c12262b1025d9a9da927f46d">FSM_UNDO</a>);
<a name="l01564"></a>01564                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01565"></a>01565             }
<a name="l01566"></a>01566 
<a name="l01567"></a>01567             <span class="comment">/* Notify on success. */</span>
<a name="l01568"></a>01568             (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948efc4f3fd8dab222270ff37c99d6b9ed">FSM_NOTIFY</a>);
<a name="l01569"></a>01569 
<a name="l01570"></a>01570             <span class="keywordflow">if</span> (<a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729443abe3a4cef56ad3619b3dd8a652f6fd">FSM_FINI</a>))
<a name="l01571"></a>01571                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01572"></a>01572         }
<a name="l01573"></a>01573 
<a name="l01574"></a>01574         <span class="comment">/* Flush partial sets of hard linked files. */</span>
<a name="l01575"></a>01575         <span class="keywordflow">if</span> (!(fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd408a32b8c84c0124ea38983b4169b3a4">CPIO_ALL_HARDLINKS</a>)) {
<a name="l01576"></a>01576             <span class="keywordtype">int</span> nlink, j;
<a name="l01577"></a>01577             <span class="keywordflow">while</span> ((fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>) != NULL) {
<a name="l01578"></a>01578                 fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>;
<a name="l01579"></a>01579                 fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = NULL;
<a name="l01580"></a>01580 
<a name="l01581"></a>01581                 <span class="comment">/* Re-calculate link count for archive header. */</span>
<a name="l01582"></a>01582                 <span class="keywordflow">for</span> (j = -1, nlink = 0, i = 0; i &lt; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#cf5ee06f642ac02bc3200a83a949f2a3">nlink</a>; i++) {
<a name="l01583"></a>01583                     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] &lt; 0)
<a name="l01584"></a>01584                         <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l01585"></a>01585                     nlink++;
<a name="l01586"></a>01586                     if (j == -1) j = i;
<a name="l01587"></a>01587                 }
<a name="l01588"></a>01588                 <span class="comment">/* XXX force the contents out as well. */</span>
<a name="l01589"></a>01589 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01590"></a>01590                 <span class="keywordflow">if</span> (j != 0) {
<a name="l01591"></a>01591                     fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[0] = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[j];
<a name="l01592"></a>01592                     fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[j] = -1;
<a name="l01593"></a>01593                 }
<a name="l01594"></a>01594 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01595"></a>01595                 fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a>.st_nlink = nlink;
<a name="l01596"></a>01596 
<a name="l01597"></a>01597                 fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#c18eee27e311ecb4971ce3b19d7380b5">sb</a>;  <span class="comment">/* structure assignment */</span>
<a name="l01598"></a>01598                 fsm-&gt;<a class="code" href="structfsm__s.html#d2f2360821625adf23378dda004b168a">osb</a> = fsm-&gt;<a class="code" href="structfsm__s.html#3a61baad09c37993cd2d59044bc474d9">sb</a>;     <span class="comment">/* structure assignment */</span>
<a name="l01599"></a>01599 
<a name="l01600"></a>01600                 <span class="keywordflow">if</span> (!rc) rc = <a class="code" href="group__payload.html#g3a9e45bef02068aed756069471086afc">writeLinkedFile</a>(fsm);
<a name="l01601"></a>01601 
<a name="l01602"></a>01602                 fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = <a class="code" href="group__payload.html#ga479b9142b4b1eed186eb48229f21f0a">freeHardLink</a>(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>);
<a name="l01603"></a>01603             }
<a name="l01604"></a>01604         }
<a name="l01605"></a>01605 
<a name="l01606"></a>01606         <span class="keywordflow">if</span> (!rc)
<a name="l01607"></a>01607             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948271cab3ced373e42d7158b7d3322995">FSM_TRAILER</a>);
<a name="l01608"></a>01608 
<a name="l01609"></a>01609         <span class="keywordflow">break</span>;
<a name="l01610"></a>01610     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294658be9c2849ae06a71d0f67f21c30701">FSM_CREATE</a>:
<a name="l01611"></a>01611         {   <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = <a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm);
<a name="l01612"></a>01612 <span class="preprocessor">#define _tsmask (RPMTRANS_FLAG_PKGCOMMIT | RPMTRANS_FLAG_COMMIT)</span>
<a name="l01613"></a>01613 <span class="preprocessor"></span>            fsm-&gt;<a class="code" href="structfsm__s.html#b48d681e167004c1d06a650364e5a8c9">commit</a> = ((ts &amp;&amp; (<a class="code" href="group__rpmts.html#g22eec4db17655dd92ce5715312d153c3">rpmtsFlags</a>(ts) &amp; <a class="code" href="fsm_8c.html#b9644fbaef1703768ba108282de74594">_tsmask</a>) &amp;&amp;
<a name="l01614"></a>01614                         fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> != <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729407950152b6bb79e018cd854d3b1b825b">FSM_PKGCOMMIT</a>) ? 0 : 1);
<a name="l01615"></a>01615 <span class="preprocessor">#undef _tsmask</span>
<a name="l01616"></a>01616 <span class="preprocessor"></span>        }
<a name="l01617"></a>01617         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01618"></a>01618         fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>);
<a name="l01619"></a>01619         fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>);
<a name="l01620"></a>01620 
<a name="l01621"></a>01621         fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>);
<a name="l01622"></a>01622         fsm-&gt;<a class="code" href="structfsm__s.html#fd9bdc3319e1b54c2f401412c879f703">ldnalloc</a> = fsm-&gt;<a class="code" href="structfsm__s.html#1b4935e736f23a271a33913e40e36080">ldnlen</a> = 0;
<a name="l01623"></a>01623 
<a name="l01624"></a>01624         fsm-&gt;<a class="code" href="structfsm__s.html#b1ee2c45fe95f362099ca3bdd77f3591">rdsize</a> = fsm-&gt;<a class="code" href="structfsm__s.html#3d80e5ea24aac7cb3be04a6521655122">wrsize</a> = 0;
<a name="l01625"></a>01625         fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a> = fsm-&gt;<a class="code" href="structfsm__s.html#7e321bbabc0f6a75ce019bdbf64919f5">rdb</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#7e321bbabc0f6a75ce019bdbf64919f5">rdb</a>);
<a name="l01626"></a>01626         fsm-&gt;<a class="code" href="structfsm__s.html#514b17ac456045a714c198ccd9dcbfcd">wrbuf</a> = fsm-&gt;<a class="code" href="structfsm__s.html#299044a8350a3b716c765a3f358032d3">wrb</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#299044a8350a3b716c765a3f358032d3">wrb</a>);
<a name="l01627"></a>01627         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> || fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>) {
<a name="l01628"></a>01628             fsm-&gt;<a class="code" href="structfsm__s.html#b1ee2c45fe95f362099ca3bdd77f3591">rdsize</a> = 8 * BUFSIZ;
<a name="l01629"></a>01629             fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a> = fsm-&gt;<a class="code" href="structfsm__s.html#7e321bbabc0f6a75ce019bdbf64919f5">rdb</a> = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(fsm-&gt;<a class="code" href="structfsm__s.html#b1ee2c45fe95f362099ca3bdd77f3591">rdsize</a>);
<a name="l01630"></a>01630             fsm-&gt;<a class="code" href="structfsm__s.html#3d80e5ea24aac7cb3be04a6521655122">wrsize</a> = 8 * BUFSIZ;
<a name="l01631"></a>01631             fsm-&gt;<a class="code" href="structfsm__s.html#514b17ac456045a714c198ccd9dcbfcd">wrbuf</a> = fsm-&gt;<a class="code" href="structfsm__s.html#299044a8350a3b716c765a3f358032d3">wrb</a> = <a class="code" href="system_8h.html#42ccfa6fc49cc4ce90cc44cd05052490">xmalloc</a>(fsm-&gt;<a class="code" href="structfsm__s.html#3d80e5ea24aac7cb3be04a6521655122">wrsize</a>);
<a name="l01632"></a>01632         }
<a name="l01633"></a>01633 
<a name="l01634"></a>01634         fsm-&gt;<a class="code" href="structfsm__s.html#c6adab9051e1d4c087749a14fd7d5432">mkdirsdone</a> = 0;
<a name="l01635"></a>01635         fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = -1;
<a name="l01636"></a>01636         fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a> = NULL;
<a name="l01637"></a>01637         fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = NULL;
<a name="l01638"></a>01638         <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = 0;      <span class="comment">/* XXX get rid of EBADF */</span>
<a name="l01639"></a>01639 
<a name="l01640"></a>01640         <span class="comment">/* Detect and create directories not explicitly in package. */</span>
<a name="l01641"></a>01641         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) {
<a name="l01642"></a>01642 <span class="comment">/*@-compdef@*/</span>
<a name="l01643"></a>01643             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294a0c64284058f7fb215bceb9aa505cdc8">FSM_MKDIRS</a>);
<a name="l01644"></a>01644 <span class="comment">/*@=compdef@*/</span>
<a name="l01645"></a>01645             <span class="keywordflow">if</span> (!rc) fsm-&gt;<a class="code" href="structfsm__s.html#c6adab9051e1d4c087749a14fd7d5432">mkdirsdone</a> = 1;
<a name="l01646"></a>01646         }
<a name="l01647"></a>01647 
<a name="l01648"></a>01648         <span class="keywordflow">break</span>;
<a name="l01649"></a>01649     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729412dc9800764a07e5a3b752347f4ed560">FSM_INIT</a>:
<a name="l01650"></a>01650         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01651"></a>01651         fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a> = 0;
<a name="l01652"></a>01652         fsm-&gt;<a class="code" href="structfsm__s.html#c32890a43c7960043cae787b9bd02d5a">diskchecked</a> = fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 0;
<a name="l01653"></a>01653         fsm-&gt;<a class="code" href="structfsm__s.html#e126a594c296468627bb24bd3252bd2c">subdir</a> = NULL;
<a name="l01654"></a>01654         fsm-&gt;<a class="code" href="structfsm__s.html#a4b937a0d3f331e89162ca65a0d8ce44">suffix</a> = (fsm-&gt;<a class="code" href="structfsm__s.html#f6a9f7c89c0d8697f9040e29f01ef21d">sufbuf</a>[0] != <span class="charliteral">'\0'</span> ? fsm-&gt;<a class="code" href="structfsm__s.html#f6a9f7c89c0d8697f9040e29f01ef21d">sufbuf</a> : NULL);
<a name="l01655"></a>01655         fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a> = <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0554058e6c6b3c417ce53eafb0fe7f6806">FA_UNKNOWN</a>;
<a name="l01656"></a>01656         fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a> = NULL;
<a name="l01657"></a>01657         fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a> = NULL;
<a name="l01658"></a>01658 
<a name="l01659"></a>01659         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) {
<a name="l01660"></a>01660             <span class="comment">/* Read next header from payload, checking for end-of-payload. */</span>
<a name="l01661"></a>01661             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672949b0139eef6e6af3fec129451cc463f95">FSM_NEXT</a>);
<a name="l01662"></a>01662         }
<a name="l01663"></a>01663         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l01664"></a>01664 
<a name="l01665"></a>01665         <span class="comment">/* Identify mapping index. */</span>
<a name="l01666"></a>01666         fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = ((fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l01667"></a>01667                 ? <a class="code" href="group__payload.html#gb4270d10f988273a8e00eb95c17835c2">mapFind</a>(fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a>, fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>) : <a class="code" href="group__payload.html#ga7183acf4a59ef41601e463783676246">mapNextIterator</a>(fsm-&gt;<a class="code" href="structfsm__s.html#810531a6aec5c4cb0a84abc3fb4f3f07">iter</a>));
<a name="l01668"></a>01668 
<a name="l01669"></a>01669         <span class="comment">/* Detect end-of-loop and/or mapping error. */</span>
<a name="l01670"></a>01670         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> &lt; 0) {
<a name="l01671"></a>01671             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) {
<a name="l01672"></a>01672 <span class="preprocessor">#if 0</span>
<a name="l01673"></a>01673 <span class="preprocessor"></span>                <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#dd380de8b2f203516cc1ab9475e31da5">RPMMESS_WARNING</a>,
<a name="l01674"></a>01674                     <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"archive file %s was not found in header file list\n"</span>),
<a name="l01675"></a>01675                         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01676"></a>01676 <span class="preprocessor">#endif</span>
<a name="l01677"></a>01677 <span class="preprocessor"></span><span class="comment">/*@-boundswrite@*/</span>
<a name="l01678"></a>01678                 <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> &amp;&amp; *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> == NULL)
<a name="l01679"></a>01679                     *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = <a class="code" href="system_8h.html#d6142d091f00b2d4543ce7a43e5d0eba">xstrdup</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01680"></a>01680 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01681"></a>01681                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414a2851ada76cd85bdda4bfa12f9d871dc">CPIOERR_UNMAPPED_FILE</a>;
<a name="l01682"></a>01682             } <span class="keywordflow">else</span> {
<a name="l01683"></a>01683                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142047381892440ecbb198613725bed387">CPIOERR_HDR_TRAILER</a>;
<a name="l01684"></a>01684             }
<a name="l01685"></a>01685             <span class="keywordflow">break</span>;
<a name="l01686"></a>01686         }
<a name="l01687"></a>01687 
<a name="l01688"></a>01688         <span class="comment">/* On non-install, mode must be known so that dirs don't get suffix. */</span>
<a name="l01689"></a>01689         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> != <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) {
<a name="l01690"></a>01690             <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l01691"></a>01691             st-&gt;st_mode = fi-&gt;fmodes[fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>];
<a name="l01692"></a>01692         }
<a name="l01693"></a>01693 
<a name="l01694"></a>01694         <span class="comment">/* Generate file path. */</span>
<a name="l01695"></a>01695         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>);
<a name="l01696"></a>01696         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l01697"></a>01697 
<a name="l01698"></a>01698         <span class="comment">/* Perform lstat/stat for disk file. */</span>
<a name="l01699"></a>01699 <span class="preprocessor">#ifdef  NOTYET</span>
<a name="l01700"></a>01700 <span class="preprocessor"></span>        rc = fsmStat(fsm);
<a name="l01701"></a>01701 <span class="preprocessor">#else</span>
<a name="l01702"></a>01702 <span class="preprocessor"></span>        <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> != NULL &amp;&amp;
<a name="l01703"></a>01703             !(fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> &amp;&amp; S_ISREG(st-&gt;st_mode)))
<a name="l01704"></a>01704         {
<a name="l01705"></a>01705             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, (!(fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dde92fa946a44848fc96b9b8625d921077">CPIO_FOLLOW_SYMLINKS</a>)
<a name="l01706"></a>01706                         ? <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672946277dc678cf1e161be9f0ad332098898">FSM_LSTAT</a> : <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729491aaf77994d76d053f893def39b9da63">FSM_STAT</a>));
<a name="l01707"></a>01707             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>) {
<a name="l01708"></a>01708                 <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l01709"></a>01709                 rc = 0;
<a name="l01710"></a>01710                 fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 0;
<a name="l01711"></a>01711             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rc == 0) {
<a name="l01712"></a>01712                 fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 1;
<a name="l01713"></a>01713             }
<a name="l01714"></a>01714         } <span class="keywordflow">else</span> {
<a name="l01715"></a>01715             <span class="comment">/* Skip %ghost files on build. */</span>
<a name="l01716"></a>01716             fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> = 0;
<a name="l01717"></a>01717         }
<a name="l01718"></a>01718 <span class="preprocessor">#endif</span>
<a name="l01719"></a>01719 <span class="preprocessor"></span>        fsm-&gt;<a class="code" href="structfsm__s.html#c32890a43c7960043cae787b9bd02d5a">diskchecked</a> = 1;
<a name="l01720"></a>01720         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l01721"></a>01721 
<a name="l01722"></a>01722         <span class="comment">/* On non-install, the disk file stat is what's remapped. */</span>
<a name="l01723"></a>01723 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01724"></a>01724         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> != <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l01725"></a>01725             *st = *ost;                 <span class="comment">/* structure assignment */</span>
<a name="l01726"></a>01726 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01727"></a>01727 
<a name="l01728"></a>01728         <span class="comment">/* Remap file perms, owner, and group. */</span>
<a name="l01729"></a>01729         rc = <a class="code" href="fsm_8c.html#2876465dd3c700394ab363ba2e96e8f9">fsmMapAttrs</a>(fsm);
<a name="l01730"></a>01730         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l01731"></a>01731 
<a name="l01732"></a>01732         fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a> = <a class="code" href="rpmlib_8h.html#6fd020fd77b1ebad016a59c753d33966">XFA_SKIPPING</a>(fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a>);
<a name="l01733"></a>01733         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> || fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>) {
<a name="l01734"></a>01734             <span class="comment">/*@-evalorder@*/</span> <span class="comment">/* FIX: saveHardLink can modify fsm */</span>
<a name="l01735"></a>01735             <span class="keywordflow">if</span> (!S_ISDIR(st-&gt;st_mode) &amp;&amp; st-&gt;st_nlink &gt; 1)
<a name="l01736"></a>01736                 fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a> = <a class="code" href="group__payload.html#g234a1494479726d05ed09cc31a813862">saveHardLink</a>(fsm);
<a name="l01737"></a>01737             <span class="comment">/*@=evalorder@*/</span>
<a name="l01738"></a>01738         }
<a name="l01739"></a>01739         <span class="keywordflow">break</span>;
<a name="l01740"></a>01740     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672944e3e49daafdfcb3c830d9dc8a57c070f">FSM_PRE</a>:
<a name="l01741"></a>01741         <span class="keywordflow">break</span>;
<a name="l01742"></a>01742     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>:
<a name="l01743"></a>01743         rc = <a class="code" href="fsm_8c.html#1fa1b739f246cc53943a6d879f32b30f">fsmMapPath</a>(fsm);
<a name="l01744"></a>01744         <span class="keywordflow">break</span>;
<a name="l01745"></a>01745     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294a0c64284058f7fb215bceb9aa505cdc8">FSM_MKDIRS</a>:
<a name="l01746"></a>01746         rc = <a class="code" href="fsm_8c.html#16b756d885444dd688635db2c4cd9ffd">fsmMkdirs</a>(fsm);
<a name="l01747"></a>01747         <span class="keywordflow">break</span>;
<a name="l01748"></a>01748     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672947487406b4972c61102f6ca83772dc5d3">FSM_RMDIRS</a>:
<a name="l01749"></a>01749         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>)
<a name="l01750"></a>01750             rc = <a class="code" href="fsm_8c.html#110be3395f7a6ff783c2ffb5f54f77c0">fsmRmdirs</a>(fsm);
<a name="l01751"></a>01751         <span class="keywordflow">break</span>;
<a name="l01752"></a>01752     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729475452f4058e4a420775b0377c842068b">FSM_PROCESS</a>:
<a name="l01753"></a>01753         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a>) {
<a name="l01754"></a>01754             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l01755"></a>01755                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ee01dadc03702ba120b7ec20aa41c791">FSM_EAT</a>);
<a name="l01756"></a>01756             <span class="keywordflow">break</span>;
<a name="l01757"></a>01757         }
<a name="l01758"></a>01758 
<a name="l01759"></a>01759         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>) {
<a name="l01760"></a>01760             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> &amp; <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f45c053b71f9ee21f35ed6452d86d76b4">RPMFILE_GHOST</a>) <span class="comment">/* XXX Don't if %ghost file. */</span>
<a name="l01761"></a>01761                 <span class="keywordflow">break</span>;
<a name="l01762"></a>01762             <span class="keywordflow">if</span> (!S_ISDIR(st-&gt;st_mode) &amp;&amp; st-&gt;st_nlink &gt; 1) {
<a name="l01763"></a>01763                 <span class="keyword">struct </span><a class="code" href="structhardLink__s.html">hardLink_s</a> * li, * prev;
<a name="l01764"></a>01764 
<a name="l01765"></a>01765 <span class="keywordflow">if</span> (!(fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd408a32b8c84c0124ea38983b4169b3a4">CPIO_ALL_HARDLINKS</a>)) <span class="keywordflow">break</span>;
<a name="l01766"></a>01766                 rc = <a class="code" href="group__payload.html#g3a9e45bef02068aed756069471086afc">writeLinkedFile</a>(fsm);
<a name="l01767"></a>01767                 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;  <span class="comment">/* W2DO? */</span>
<a name="l01768"></a>01768 
<a name="l01769"></a>01769                 <span class="keywordflow">for</span> (li = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>, prev = NULL; li; prev = li, li = li-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>)
<a name="l01770"></a>01770                      <span class="keywordflow">if</span> (li == fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>)
<a name="l01771"></a>01771                         <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01772"></a>01772 
<a name="l01773"></a>01773                 <span class="keywordflow">if</span> (prev == NULL)
<a name="l01774"></a>01774                     fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>;
<a name="l01775"></a>01775                 <span class="keywordflow">else</span>
<a name="l01776"></a>01776                     prev-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>;
<a name="l01777"></a>01777                 fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = NULL;
<a name="l01778"></a>01778                 fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = <a class="code" href="group__payload.html#ga479b9142b4b1eed186eb48229f21f0a">freeHardLink</a>(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>);
<a name="l01779"></a>01779             } <span class="keywordflow">else</span> {
<a name="l01780"></a>01780                 rc = <a class="code" href="group__payload.html#gd04e184175efa348a0acfd8be35f5bc3">writeFile</a>(fsm, 1);
<a name="l01781"></a>01781             }
<a name="l01782"></a>01782             <span class="keywordflow">break</span>;
<a name="l01783"></a>01783         }
<a name="l01784"></a>01784 
<a name="l01785"></a>01785         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> != <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l01786"></a>01786             <span class="keywordflow">break</span>;
<a name="l01787"></a>01787 
<a name="l01788"></a>01788         <span class="keywordflow">if</span> (S_ISREG(st-&gt;st_mode)) {
<a name="l01789"></a>01789             <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01790"></a>01790             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a>)
<a name="l01791"></a>01791                 fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, NULL, NULL);
<a name="l01792"></a>01792             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>);
<a name="l01793"></a>01793 
<a name="l01794"></a>01794             <span class="keywordflow">if</span> (rc == 0 &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a>) {
<a name="l01795"></a>01795                 <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmtool_8c.html#64e16b80bb063a3a2954e2ac7be534cb">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>;
<a name="l01796"></a>01796                 fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01797"></a>01797                 fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, NULL, fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a>);
<a name="l01798"></a>01798                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941e41a1057fee1d0afda412c700941ed8">FSM_RENAME</a>);
<a name="l01799"></a>01799                 <span class="keywordflow">if</span> (!rc)
<a name="l01800"></a>01800                     <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#dd380de8b2f203516cc1ab9475e31da5">RPMMESS_WARNING</a>,
<a name="l01801"></a>01801                         <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s saved as %s\n"</span>),
<a name="l01802"></a>01802                                 (fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> : <span class="stringliteral">""</span>),
<a name="l01803"></a>01803                                 (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> : <span class="stringliteral">""</span>));
<a name="l01804"></a>01804                 fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01805"></a>01805                 fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = opath;
<a name="l01806"></a>01806             }
<a name="l01807"></a>01807 
<a name="l01808"></a>01808             <span class="comment">/*@-dependenttrans@*/</span>
<a name="l01809"></a>01809             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l01810"></a>01810             <span class="comment">/*@=dependenttrans@*/</span>
<a name="l01811"></a>01811             <span class="keywordflow">if</span> (!(rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>)) <span class="keywordflow">return</span> rc;
<a name="l01812"></a>01812             rc = <a class="code" href="group__payload.html#g4dac852bc38a7b7c56816ea4ced13caf">expandRegular</a>(fsm);
<a name="l01813"></a>01813         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISDIR(st-&gt;st_mode)) {
<a name="l01814"></a>01814             mode_t st_mode = st-&gt;st_mode;
<a name="l01815"></a>01815             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>);
<a name="l01816"></a>01816             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>) {
<a name="l01817"></a>01817                 st-&gt;st_mode &amp;= ~07777;          <span class="comment">/* XXX abuse st-&gt;st_mode */</span>
<a name="l01818"></a>01818                 st-&gt;st_mode |=  00700;
<a name="l01819"></a>01819                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729440ebe13d6dc6c738503ca54666f17e1c">FSM_MKDIR</a>);
<a name="l01820"></a>01820                 st-&gt;st_mode = st_mode;          <span class="comment">/* XXX restore st-&gt;st_mode */</span>
<a name="l01821"></a>01821             }
<a name="l01822"></a>01822         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(st-&gt;st_mode)) {
<a name="l01823"></a>01823             <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmtool_8c.html#64e16b80bb063a3a2954e2ac7be534cb">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>;
<a name="l01824"></a>01824 
<a name="l01825"></a>01825             <span class="keywordflow">if</span> ((st-&gt;st_size + 1) &gt; fsm-&gt;<a class="code" href="structfsm__s.html#b1ee2c45fe95f362099ca3bdd77f3591">rdsize</a>) {
<a name="l01826"></a>01826                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744148ce3bbb411e3d22a9d2624171385811c">CPIOERR_HDR_SIZE</a>;
<a name="l01827"></a>01827                 <span class="keywordflow">break</span>;
<a name="l01828"></a>01828             }
<a name="l01829"></a>01829 
<a name="l01830"></a>01830             fsm-&gt;<a class="code" href="structfsm__s.html#5ed33054e05c86f39dbaff7013bded82">wrlen</a> = st-&gt;st_size;
<a name="l01831"></a>01831             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294aaad57b40c4c929dc9b6b21dd08d2094">FSM_DREAD</a>);
<a name="l01832"></a>01832             <span class="keywordflow">if</span> (!rc &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#5f7fc7df5ae41829134e440f07c6d451">rdnb</a> != fsm-&gt;<a class="code" href="structfsm__s.html#5ed33054e05c86f39dbaff7013bded82">wrlen</a>)
<a name="l01833"></a>01833                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744144179d5818ff86a7bbc739a665c447859">CPIOERR_READ_FAILED</a>;
<a name="l01834"></a>01834             <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l01835"></a>01835 
<a name="l01836"></a>01836 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01837"></a>01837             fsm-&gt;<a class="code" href="structfsm__s.html#514b17ac456045a714c198ccd9dcbfcd">wrbuf</a>[st-&gt;st_size] = <span class="charliteral">'\0'</span>;
<a name="l01838"></a>01838 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01839"></a>01839             <span class="comment">/* XXX symlink(fsm-&gt;opath, fsm-&gt;path) */</span>
<a name="l01840"></a>01840             <span class="comment">/*@-dependenttrans@*/</span>
<a name="l01841"></a>01841             fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#514b17ac456045a714c198ccd9dcbfcd">wrbuf</a>;
<a name="l01842"></a>01842             <span class="comment">/*@=dependenttrans@*/</span>
<a name="l01843"></a>01843             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>);
<a name="l01844"></a>01844             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>)
<a name="l01845"></a>01845                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729438b7cc3fcb7a857fc4317301a63061ea">FSM_SYMLINK</a>);
<a name="l01846"></a>01846             fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = opath;         <span class="comment">/* XXX restore fsm-&gt;path */</span>
<a name="l01847"></a>01847         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISFIFO(st-&gt;st_mode)) {
<a name="l01848"></a>01848             mode_t st_mode = st-&gt;st_mode;
<a name="l01849"></a>01849             <span class="comment">/* This mimics cpio S_ISSOCK() behavior but probably isnt' right */</span>
<a name="l01850"></a>01850             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>);
<a name="l01851"></a>01851             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>) {
<a name="l01852"></a>01852                 st-&gt;st_mode = 0000;             <span class="comment">/* XXX abuse st-&gt;st_mode */</span>
<a name="l01853"></a>01853                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729452b5a5dafb5dc98e8560dd1976547685">FSM_MKFIFO</a>);
<a name="l01854"></a>01854                 st-&gt;st_mode = st_mode;  <span class="comment">/* XXX restore st-&gt;st_mode */</span>
<a name="l01855"></a>01855             }
<a name="l01856"></a>01856         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISCHR(st-&gt;st_mode) ||
<a name="l01857"></a>01857                    S_ISBLK(st-&gt;st_mode) ||
<a name="l01858"></a>01858     <span class="comment">/*@-unrecog@*/</span> <a class="code" href="system_8h.html#397ddd128980f1ee034653da2e9d8f6e">S_ISSOCK</a>(st-&gt;st_mode) <span class="comment">/*@=unrecog@*/</span>)
<a name="l01859"></a>01859         {
<a name="l01860"></a>01860             rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>);
<a name="l01861"></a>01861             <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>)
<a name="l01862"></a>01862                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294db3ad9bff825d794fac75f4bb0bba6ad">FSM_MKNOD</a>);
<a name="l01863"></a>01863         } <span class="keywordflow">else</span> {
<a name="l01864"></a>01864             <span class="comment">/* XXX Special case /dev/log, which shouldn't be packaged anyways */</span>
<a name="l01865"></a>01865             <span class="keywordflow">if</span> (!<a class="code" href="fsm_8c.html#a372b70439510d51a20a0f310612632e">IS_DEV_LOG</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>))
<a name="l01866"></a>01866                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414a0f3578fae3cdd6dc05e948d51dde9ad">CPIOERR_UNKNOWN_FILETYPE</a>;
<a name="l01867"></a>01867         }
<a name="l01868"></a>01868         <span class="keywordflow">if</span> (!S_ISDIR(st-&gt;st_mode) &amp;&amp; st-&gt;st_nlink &gt; 1) {
<a name="l01869"></a>01869             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#6ff70805440e93e562aed13b756e3d59">createdPath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#ce33deaa48e61131f0446f31b3af9904">linkIndex</a>;
<a name="l01870"></a>01870             rc = <a class="code" href="group__payload.html#g8ed996d8e4092d50dbeb8fede31e3905">fsmMakeLinks</a>(fsm);
<a name="l01871"></a>01871         }
<a name="l01872"></a>01872         <span class="keywordflow">break</span>;
<a name="l01873"></a>01873     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ec8db92df2fb5ca8ec861d60f769eadc">FSM_POST</a>:
<a name="l01874"></a>01874         <span class="keywordflow">break</span>;
<a name="l01875"></a>01875     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941d90590813de5f784c6b4408e03d6a3b">FSM_MKLINKS</a>:
<a name="l01876"></a>01876         rc = <a class="code" href="group__payload.html#g8ed996d8e4092d50dbeb8fede31e3905">fsmMakeLinks</a>(fsm);
<a name="l01877"></a>01877         <span class="keywordflow">break</span>;
<a name="l01878"></a>01878     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948efc4f3fd8dab222270ff37c99d6b9ed">FSM_NOTIFY</a>:            <span class="comment">/* XXX move from fsm to psm -&gt; tsm */</span>
<a name="l01879"></a>01879         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> || fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>) {
<a name="l01880"></a>01880             <a class="code" href="rpmlib_8h.html#1a512138316a227059ca128597dbd464">rpmts</a> ts = <a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm);
<a name="l01881"></a>01881             <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l01882"></a>01882             <span class="keywordtype">void</span> * ptr;
<a name="l01883"></a>01883             <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> archivePos = <a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4ca14c5aa951e7c455e21800d4050c25">cfd</a>);
<a name="l01884"></a>01884             <span class="keywordflow">if</span> (archivePos &gt; fi-&gt;archivePos) {
<a name="l01885"></a>01885                 fi-&gt;archivePos = archivePos;
<a name="l01886"></a>01886                 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>,
<a name="l01887"></a>01887                         fi-&gt;archivePos, fi-&gt;archiveSize);
<a name="l01888"></a>01888             }
<a name="l01889"></a>01889         }
<a name="l01890"></a>01890         <span class="keywordflow">break</span>;
<a name="l01891"></a>01891     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729449f8b806c12262b1025d9a9da927f46d">FSM_UNDO</a>:
<a name="l01892"></a>01892         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a>)
<a name="l01893"></a>01893             <span class="keywordflow">break</span>;
<a name="l01894"></a>01894         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>) {
<a name="l01895"></a>01895             <span class="comment">/* XXX only erase if temp fn w suffix is in use */</span>
<a name="l01896"></a>01896             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f6a9f7c89c0d8697f9040e29f01ef21d">sufbuf</a>[0] != <span class="charliteral">'\0'</span>)
<a name="l01897"></a>01897                 (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm,
<a name="l01898"></a>01898                     (S_ISDIR(st-&gt;st_mode) ? <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948262dd498388759224bc5f8d79bd2335">FSM_RMDIR</a> : <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294636bf8b7fe268875e575e2886666cc60">FSM_UNLINK</a>));
<a name="l01899"></a>01899 
<a name="l01900"></a>01900 <span class="preprocessor">#ifdef  NOTYET  </span><span class="comment">/* XXX remove only dirs just created, not all. */</span>
<a name="l01901"></a>01901             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#9d5bed22905e1775a578b2a46ddeeb05">dnlx</a>)
<a name="l01902"></a>01902                 (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672947487406b4972c61102f6ca83772dc5d3">FSM_RMDIRS</a>);
<a name="l01903"></a>01903 <span class="preprocessor">#endif</span>
<a name="l01904"></a>01904 <span class="preprocessor"></span>            <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l01905"></a>01905         }
<a name="l01906"></a>01906 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01907"></a>01907         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> &amp;&amp; *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> == NULL)
<a name="l01908"></a>01908             *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = <a class="code" href="system_8h.html#d6142d091f00b2d4543ce7a43e5d0eba">xstrdup</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01909"></a>01909 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01910"></a>01910         <span class="keywordflow">break</span>;
<a name="l01911"></a>01911     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729443abe3a4cef56ad3619b3dd8a652f6fd">FSM_FINI</a>:
<a name="l01912"></a>01912         <span class="keywordflow">if</span> (!fsm-&gt;<a class="code" href="structfsm__s.html#5b55dff07381cb0ac0f95a14bed2da26">postpone</a> &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#b48d681e167004c1d06a650364e5a8c9">commit</a>) {
<a name="l01913"></a>01913             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>)
<a name="l01914"></a>01914                 rc = ((!S_ISDIR(st-&gt;st_mode) &amp;&amp; st-&gt;st_nlink &gt; 1)
<a name="l01915"></a>01915                         ? <a class="code" href="group__payload.html#gee7455fad232e91ca3168156cb4bf859">fsmCommitLinks</a>(fsm) : <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294af617ad9cf372ea738fd4c126980f3e9">FSM_COMMIT</a>));
<a name="l01916"></a>01916             <span class="keywordflow">if</span> (fsm-&gt;goal == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729407950152b6bb79e018cd854d3b1b825b">FSM_PKGCOMMIT</a>)
<a name="l01917"></a>01917                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294af617ad9cf372ea738fd4c126980f3e9">FSM_COMMIT</a>);
<a name="l01918"></a>01918             <span class="keywordflow">if</span> (fsm-&gt;goal == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d9fc895da99bddbc74811ae0df74d0d3">FSM_PKGERASE</a>)
<a name="l01919"></a>01919                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294af617ad9cf372ea738fd4c126980f3e9">FSM_COMMIT</a>);
<a name="l01920"></a>01920         }
<a name="l01921"></a>01921         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01922"></a>01922         fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>);
<a name="l01923"></a>01923 <span class="comment">/*@-boundswrite@*/</span>
<a name="l01924"></a>01924         memset(st, 0, <span class="keyword">sizeof</span>(*st));
<a name="l01925"></a>01925         memset(ost, 0, <span class="keyword">sizeof</span>(*ost));
<a name="l01926"></a>01926 <span class="comment">/*@=boundswrite@*/</span>
<a name="l01927"></a>01927         <span class="keywordflow">break</span>;
<a name="l01928"></a>01928     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294af617ad9cf372ea738fd4c126980f3e9">FSM_COMMIT</a>:
<a name="l01929"></a>01929         <span class="comment">/* Rename pre-existing modified or unmanaged file. */</span>
<a name="l01930"></a>01930         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a> &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#c32890a43c7960043cae787b9bd02d5a">diskchecked</a> &amp;&amp;
<a name="l01931"></a>01931           (fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a> || (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> &amp;&amp; S_ISREG(st-&gt;st_mode))))
<a name="l01932"></a>01932         {
<a name="l01933"></a>01933             <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmtool_8c.html#64e16b80bb063a3a2954e2ac7be534cb">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>;
<a name="l01934"></a>01934             <span class="keyword">const</span> <span class="keywordtype">char</span> * path = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l01935"></a>01935             fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, NULL, NULL);
<a name="l01936"></a>01936             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, NULL, fsm-&gt;<a class="code" href="structfsm__s.html#dcbeff73e5690f497b7c5f9f3776039e">osuffix</a>);
<a name="l01937"></a>01937             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941e41a1057fee1d0afda412c700941ed8">FSM_RENAME</a>);
<a name="l01938"></a>01938             <span class="keywordflow">if</span> (!rc) {
<a name="l01939"></a>01939                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#dd380de8b2f203516cc1ab9475e31da5">RPMMESS_WARNING</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s saved as %s\n"</span>),
<a name="l01940"></a>01940                                 (fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> : <span class="stringliteral">""</span>),
<a name="l01941"></a>01941                                 (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> : <span class="stringliteral">""</span>));
<a name="l01942"></a>01942             }
<a name="l01943"></a>01943             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01944"></a>01944             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l01945"></a>01945             fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>);
<a name="l01946"></a>01946             fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = opath;
<a name="l01947"></a>01947         }
<a name="l01948"></a>01948 
<a name="l01949"></a>01949         <span class="comment">/* Remove erased files. */</span>
<a name="l01950"></a>01950         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d9fc895da99bddbc74811ae0df74d0d3">FSM_PKGERASE</a>) {
<a name="l01951"></a>01951             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#97f5020d3bd6e0a7d362c596565e1b24">action</a> == <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05f3aaace1f9e55323fb68a8b7064a720f">FA_ERASE</a>) {
<a name="l01952"></a>01952                 <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l01953"></a>01953                 <span class="keywordflow">if</span> (S_ISDIR(st-&gt;st_mode)) {
<a name="l01954"></a>01954                     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948262dd498388759224bc5f8d79bd2335">FSM_RMDIR</a>);
<a name="l01955"></a>01955                     <span class="keywordflow">if</span> (!rc) <span class="keywordflow">break</span>;
<a name="l01956"></a>01956                     <span class="keywordflow">switch</span> (rc) {
<a name="l01957"></a>01957                     <span class="keywordflow">case</span> <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>: <span class="comment">/* XXX rmdir("/") linux 2.2.x kernel hack */</span>
<a name="l01958"></a>01958                     <span class="keywordflow">case</span> <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414a57151c79721a9e4a459d4548b8e0702">CPIOERR_ENOTEMPTY</a>:
<a name="l01959"></a>01959         <span class="comment">/* XXX make sure that build side permits %missingok on directories. */</span>
<a name="l01960"></a>01960                         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> &amp; <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f197931e17bc876f18ff06908d71f2892">RPMFILE_MISSINGOK</a>)
<a name="l01961"></a>01961                             <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01962"></a>01962 
<a name="l01963"></a>01963                         <span class="comment">/* XXX common error message. */</span>
<a name="l01964"></a>01964                         <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(
<a name="l01965"></a>01965                             (<a class="code" href="fsm_8c.html#8e500a66ce12fd92fa66ccf54983587a">strict_erasures</a> ? <a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b10748185c1c50fc36451221c4a51e245">RPMERR_RMDIR</a> : <a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b46c82cfc7429b03d08a64ecf15c6c363">RPMDEBUG_RMDIR</a>),
<a name="l01966"></a>01966                             <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s rmdir of %s failed: Directory not empty\n"</span>), 
<a name="l01967"></a>01967                                 <a class="code" href="rpmfi_8c.html#f688324beae0abe1a8f1fc12adecdaeb">rpmfiTypeString</a>(fi), fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l01968"></a>01968                         <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01969"></a>01969                     <span class="keywordflow">default</span>:
<a name="l01970"></a>01970                         <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(
<a name="l01971"></a>01971                             (<a class="code" href="fsm_8c.html#8e500a66ce12fd92fa66ccf54983587a">strict_erasures</a> ? <a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b10748185c1c50fc36451221c4a51e245">RPMERR_RMDIR</a> : RPMDEBUG_RMDIR),
<a name="l01972"></a>01972                                 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s rmdir of %s failed: %s\n"</span>),
<a name="l01973"></a>01973                                 <a class="code" href="rpmfi_8c.html#f688324beae0abe1a8f1fc12adecdaeb">rpmfiTypeString</a>(fi), fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>));
<a name="l01974"></a>01974                         <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01975"></a>01975                     }
<a name="l01976"></a>01976                 } <span class="keywordflow">else</span> {
<a name="l01977"></a>01977                     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294636bf8b7fe268875e575e2886666cc60">FSM_UNLINK</a>);
<a name="l01978"></a>01978                     <span class="keywordflow">if</span> (!rc) <span class="keywordflow">break</span>;
<a name="l01979"></a>01979                     <span class="keywordflow">switch</span> (rc) {
<a name="l01980"></a>01980                     <span class="keywordflow">case</span> <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>:
<a name="l01981"></a>01981                         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#0cc6d944cc81011aa67444a6e0d516be">fflags</a> &amp; <a class="code" href="rpmlib_8h.html#62725e580e7542969ca808f2ee7c1b9f197931e17bc876f18ff06908d71f2892">RPMFILE_MISSINGOK</a>)
<a name="l01982"></a>01982                             <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01983"></a>01983                         <span class="comment">/*@fallthrough@*/</span>
<a name="l01984"></a>01984                     <span class="keywordflow">default</span>:
<a name="l01985"></a>01985                         <a class="code" href="rpmerr_8h.html#29f3f082b0cd6acdcc70a31cbd613e1a">rpmError</a>(
<a name="l01986"></a>01986                             (<a class="code" href="fsm_8c.html#8e500a66ce12fd92fa66ccf54983587a">strict_erasures</a> ? <a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55bab9ebbab085bba11a6c281f7684cdd91">RPMERR_UNLINK</a> : <a class="code" href="rpmerr_8h.html#d00dd16161260fe872fdf140cd8af55b98faa4db150a8a0dcb31d6eece32afe7">RPMDEBUG_UNLINK</a>),
<a name="l01987"></a>01987                                 <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s unlink of %s failed: %s\n"</span>),
<a name="l01988"></a>01988                                 <a class="code" href="rpmfi_8c.html#f688324beae0abe1a8f1fc12adecdaeb">rpmfiTypeString</a>(fi), fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>, <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a>));
<a name="l01989"></a>01989                         <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l01990"></a>01990                     }
<a name="l01991"></a>01991                 }
<a name="l01992"></a>01992             }
<a name="l01993"></a>01993             <span class="comment">/* XXX Failure to remove is not (yet) cause for failure. */</span>
<a name="l01994"></a>01994             <span class="keywordflow">if</span> (!<a class="code" href="fsm_8c.html#8e500a66ce12fd92fa66ccf54983587a">strict_erasures</a>) rc = 0;
<a name="l01995"></a>01995             <span class="keywordflow">break</span>;
<a name="l01996"></a>01996         }
<a name="l01997"></a>01997 
<a name="l01998"></a>01998         <span class="comment">/* XXX Special case /dev/log, which shouldn't be packaged anyways */</span>
<a name="l01999"></a>01999         <span class="keywordflow">if</span> (!<a class="code" href="system_8h.html#397ddd128980f1ee034653da2e9d8f6e">S_ISSOCK</a>(st-&gt;st_mode) &amp;&amp; !<a class="code" href="fsm_8c.html#a372b70439510d51a20a0f310612632e">IS_DEV_LOG</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>)) {
<a name="l02000"></a>02000             <span class="comment">/* Rename temporary to final file name. */</span>
<a name="l02001"></a>02001             <span class="keywordflow">if</span> (!S_ISDIR(st-&gt;st_mode) &amp;&amp;
<a name="l02002"></a>02002                 (fsm-&gt;<a class="code" href="structfsm__s.html#e126a594c296468627bb24bd3252bd2c">subdir</a> || fsm-&gt;<a class="code" href="structfsm__s.html#a4b937a0d3f331e89162ca65a0d8ce44">suffix</a> || fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>))
<a name="l02003"></a>02003             {
<a name="l02004"></a>02004                 fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l02005"></a>02005                 fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, NULL, fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>);
<a name="l02006"></a>02006                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941e41a1057fee1d0afda412c700941ed8">FSM_RENAME</a>);
<a name="l02007"></a>02007                 <span class="keywordflow">if</span> (!rc &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#0c064b054980031a54f80dd05356e220">nsuffix</a>) {
<a name="l02008"></a>02008                     <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmtool_8c.html#64e16b80bb063a3a2954e2ac7be534cb">opath</a> = <a class="code" href="group__payload.html#g90d918e8047d00456c4fac5d3fd54c0e">fsmFsPath</a>(fsm, st, NULL, NULL);
<a name="l02009"></a>02009                     <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#dd380de8b2f203516cc1ab9475e31da5">RPMMESS_WARNING</a>, <a class="code" href="system_8h.html#8a97de23397d8af6821824c0234d8c3c">_</a>(<span class="stringliteral">"%s created as %s\n"</span>),
<a name="l02010"></a>02010                                 (opath ? opath : <span class="stringliteral">""</span>),
<a name="l02011"></a>02011                                 (fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> ? fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> : <span class="stringliteral">""</span>));
<a name="l02012"></a>02012                     opath = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(opath);
<a name="l02013"></a>02013                 }
<a name="l02014"></a>02014                 fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a>);
<a name="l02015"></a>02015             }
<a name="l02016"></a>02016             <span class="comment">/*</span>
<a name="l02017"></a>02017 <span class="comment">             * Set file security context (if not disabled).</span>
<a name="l02018"></a>02018 <span class="comment">             */</span>
<a name="l02019"></a>02019             <span class="keywordflow">if</span> (!rc &amp;&amp; !getuid()) {
<a name="l02020"></a>02020                 <span class="keywordtype">int</span> internal = <a class="code" href="fsm_8c.html#74f123ef66d7e0c0f021ad48deb22409">fsmMapFContext</a>(fsm);
<a name="l02021"></a>02021                 rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294524170fb8bc99461d41fc6e142dc0887">FSM_LSETFCON</a>);
<a name="l02022"></a>02022                 <span class="keywordflow">if</span> (!internal) {
<a name="l02023"></a>02023                     <a class="code" href="system_8h.html#579557463dca40bc27551ed71fc463b9">freecon</a>(fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a>);
<a name="l02024"></a>02024                 }
<a name="l02025"></a>02025                 fsm-&gt;<a class="code" href="structfsm__s.html#0848c3cb0d4984076af67026f7e61b61">fcontext</a> = NULL;
<a name="l02026"></a>02026             }
<a name="l02027"></a>02027             <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(st-&gt;st_mode)) {
<a name="l02028"></a>02028                 <span class="keywordflow">if</span> (!rc &amp;&amp; !getuid())
<a name="l02029"></a>02029                     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b93ff930f61289ca8b8e00ec5795c0fe">FSM_LCHOWN</a>);
<a name="l02030"></a>02030             } <span class="keywordflow">else</span> {
<a name="l02031"></a>02031                 <span class="keywordflow">if</span> (!rc &amp;&amp; !getuid())
<a name="l02032"></a>02032                     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729471b8027acb5ccda243d736ad4f41debd">FSM_CHOWN</a>);
<a name="l02033"></a>02033                 <span class="keywordflow">if</span> (!rc)
<a name="l02034"></a>02034                     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294193d903826482d75cdbf494844514fa7">FSM_CHMOD</a>);
<a name="l02035"></a>02035                 <span class="keywordflow">if</span> (!rc) {
<a name="l02036"></a>02036                     time_t mtime = st-&gt;st_mtime;
<a name="l02037"></a>02037                     <a class="code" href="rpmlib_8h.html#145b1d5b839052f7f79903bc29f8090a">rpmfi</a> fi = <a class="code" href="fsm_8c.html#b6b97fa567ec99a3f190fb6d5f725842">fsmGetFi</a>(fsm);
<a name="l02038"></a>02038                     <span class="keywordflow">if</span> (fi-&gt;fmtimes)
<a name="l02039"></a>02039                         st-&gt;st_mtime = fi-&gt;fmtimes[fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a>];
<a name="l02040"></a>02040                     rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d1b3dd9376bd7134f6f797d79cc1c69c">FSM_UTIME</a>);
<a name="l02041"></a>02041                     st-&gt;st_mtime = mtime;
<a name="l02042"></a>02042                 }
<a name="l02043"></a>02043             }
<a name="l02044"></a>02044         }
<a name="l02045"></a>02045 
<a name="l02046"></a>02046         <span class="comment">/* Notify on success. */</span>
<a name="l02047"></a>02047         <span class="keywordflow">if</span> (!rc)                rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948efc4f3fd8dab222270ff37c99d6b9ed">FSM_NOTIFY</a>);
<a name="l02048"></a>02048         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> &amp;&amp; *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> == NULL) {
<a name="l02049"></a>02049 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02050"></a>02050             *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l02051"></a>02051 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02052"></a>02052             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l02053"></a>02053         }
<a name="l02054"></a>02054         <span class="keywordflow">break</span>;
<a name="l02055"></a>02055     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672944ade9682e02bb1050772b89001ef877c">FSM_DESTROY</a>:
<a name="l02056"></a>02056         fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>);
<a name="l02057"></a>02057 
<a name="l02058"></a>02058         <span class="comment">/* Check for hard links missing from payload. */</span>
<a name="l02059"></a>02059         <span class="keywordflow">while</span> ((fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a>) != NULL) {
<a name="l02060"></a>02060             fsm-&gt;<a class="code" href="structfsm__s.html#e4944b286fffd7f93c925e6fac3d335e">links</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a>;
<a name="l02061"></a>02061             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a5c8e8acf4b1bb0a4f00291e93aed00d">next</a> = NULL;
<a name="l02062"></a>02062             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a> &amp;&amp;
<a name="l02063"></a>02063                         fsm-&gt;<a class="code" href="structfsm__s.html#b48d681e167004c1d06a650364e5a8c9">commit</a> &amp;&amp; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>)
<a name="l02064"></a>02064             {
<a name="l02065"></a>02065                 <span class="keywordflow">for</span> (i = 0 ; i &lt; fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#a3753884c3daad49671286e3c15c4bcd">linksLeft</a>; i++) {
<a name="l02066"></a>02066                     <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i] &lt; 0)
<a name="l02067"></a>02067                         <span class="comment">/*@innercontinue@*/</span> <span class="keywordflow">continue</span>;
<a name="l02068"></a>02068                     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f7441442e57a2032bf2067a2c84d91bbea4939">CPIOERR_MISSING_HARDLINK</a>;
<a name="l02069"></a>02069                     if (fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> &amp;&amp; *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> == NULL) {
<a name="l02070"></a>02070                         fsm-&gt;<a class="code" href="structfsm__s.html#1818e69498bd6f1f914c4dde456cc108">ix</a> = fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>-&gt;<a class="code" href="structhardLink__s.html#f0cee967f0287a6fc013ec2186004631">filex</a>[i];
<a name="l02071"></a>02071                         if (!<a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>)) {
<a name="l02072"></a>02072 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02073"></a>02073                             *fsm-&gt;<a class="code" href="structfsm__s.html#f3915ada691622be1521604c4a9d0376">failedFile</a> = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l02074"></a>02074 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02075"></a>02075                             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = NULL;
<a name="l02076"></a>02076                         }
<a name="l02077"></a>02077                     }
<a name="l02078"></a>02078                     <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l02079"></a>02079                 }
<a name="l02080"></a>02080             }
<a name="l02081"></a>02081             <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#109fcf88c0c83dc6f4883de00414e285">goal</a> == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a> &amp;&amp;
<a name="l02082"></a>02082                 (fsm-&gt;<a class="code" href="structfsm__s.html#6292addcf46983e8c1194496d8943eb8">mapFlags</a> &amp; <a class="code" href="group__payload.html#gg4a228772535ee170b83d3e97ce22c5dd408a32b8c84c0124ea38983b4169b3a4">CPIO_ALL_HARDLINKS</a>))
<a name="l02083"></a>02083             {
<a name="l02084"></a>02084                 rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f7441442e57a2032bf2067a2c84d91bbea4939">CPIOERR_MISSING_HARDLINK</a>;
<a name="l02085"></a>02085             }
<a name="l02086"></a>02086             fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a> = <a class="code" href="group__payload.html#ga479b9142b4b1eed186eb48229f21f0a">freeHardLink</a>(fsm-&gt;<a class="code" href="structfsm__s.html#c7d65a093cf6f6bec1149859204dbe59">li</a>);
<a name="l02087"></a>02087         }
<a name="l02088"></a>02088         fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#52834e29f338b1ecd4c9ecb207b77501">ldn</a>);
<a name="l02089"></a>02089         fsm-&gt;<a class="code" href="structfsm__s.html#fd9bdc3319e1b54c2f401412c879f703">ldnalloc</a> = fsm-&gt;<a class="code" href="structfsm__s.html#1b4935e736f23a271a33913e40e36080">ldnlen</a> = 0;
<a name="l02090"></a>02090         fsm-&gt;<a class="code" href="structfsm__s.html#38fcc86ace4d6be3d6006fdf71507c9f">rdbuf</a> = fsm-&gt;<a class="code" href="structfsm__s.html#7e321bbabc0f6a75ce019bdbf64919f5">rdb</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#7e321bbabc0f6a75ce019bdbf64919f5">rdb</a>);
<a name="l02091"></a>02091         fsm-&gt;<a class="code" href="structfsm__s.html#514b17ac456045a714c198ccd9dcbfcd">wrbuf</a> = fsm-&gt;<a class="code" href="structfsm__s.html#299044a8350a3b716c765a3f358032d3">wrb</a> = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;<a class="code" href="structfsm__s.html#299044a8350a3b716c765a3f358032d3">wrb</a>);
<a name="l02092"></a>02092         <span class="keywordflow">break</span>;
<a name="l02093"></a>02093     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>:
<a name="l02094"></a>02094         <span class="keywordflow">if</span> (fsm-&gt;<a class="code" href="structfsm__s.html#c32890a43c7960043cae787b9bd02d5a">diskchecked</a> &amp;&amp; !fsm-&gt;<a class="code" href="structfsm__s.html#7e762a9242ebfd768989076d7e967eb3">exists</a>) {
<a name="l02095"></a>02095             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>;
<a name="l02096"></a>02096             <span class="keywordflow">break</span>;
<a name="l02097"></a>02097         }
<a name="l02098"></a>02098         <span class="keywordflow">if</span> (S_ISREG(st-&gt;st_mode)) {
<a name="l02099"></a>02099             <span class="keywordtype">char</span> * path = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(strlen(fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>) + <span class="keyword">sizeof</span>(<span class="stringliteral">"-RPMDELETE"</span>));
<a name="l02100"></a>02100 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02101"></a>02101             (void) <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(path, fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>), <span class="stringliteral">"-RPMDELETE"</span>);
<a name="l02102"></a>02102 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02103"></a>02103             <span class="comment">/*</span>
<a name="l02104"></a>02104 <span class="comment">             * XXX HP-UX (and other os'es) don't permit unlink on busy</span>
<a name="l02105"></a>02105 <span class="comment">             * XXX files.</span>
<a name="l02106"></a>02106 <span class="comment">             */</span>
<a name="l02107"></a>02107             fsm-&gt;<a class="code" href="structfsm__s.html#d9291ec60a6f20af59eb649a266f1d8e">opath</a> = fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a>;
<a name="l02108"></a>02108             fsm-&gt;<a class="code" href="structfsm__s.html#4558074ac9ff9c9c90b1cffea0dd15b7">path</a> = path;
<a name="l02109"></a>02109             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941e41a1057fee1d0afda412c700941ed8">FSM_RENAME</a>);
<a name="l02110"></a>02110             <span class="keywordflow">if</span> (!rc)
<a name="l02111"></a>02111                     (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294636bf8b7fe268875e575e2886666cc60">FSM_UNLINK</a>);
<a name="l02112"></a>02112             <span class="keywordflow">else</span>
<a name="l02113"></a>02113                     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414f0f6e40688fde59417f419af14961f73">CPIOERR_UNLINK_FAILED</a>;
<a name="l02114"></a>02114             fsm-&gt;path = fsm-&gt;opath;
<a name="l02115"></a>02115             fsm-&gt;opath = NULL;
<a name="l02116"></a>02116             <span class="keywordflow">return</span> (rc ? rc : <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>);  <span class="comment">/* XXX HACK */</span>
<a name="l02117"></a>02117             <span class="comment">/*@notreached@*/</span> <span class="keywordflow">break</span>;
<a name="l02118"></a>02118         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISDIR(st-&gt;st_mode)) {
<a name="l02119"></a>02119             <span class="keywordflow">if</span> (S_ISDIR(ost-&gt;st_mode))          <span class="keywordflow">return</span> 0;
<a name="l02120"></a>02120             <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(ost-&gt;st_mode)) {
<a name="l02121"></a>02121                 rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729491aaf77994d76d053f893def39b9da63">FSM_STAT</a>);
<a name="l02122"></a>02122                 <span class="keywordflow">if</span> (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>) rc = 0;
<a name="l02123"></a>02123                 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l02124"></a>02124                 <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l02125"></a>02125                 <span class="keywordflow">if</span> (S_ISDIR(ost-&gt;st_mode))      <span class="keywordflow">return</span> 0;
<a name="l02126"></a>02126             }
<a name="l02127"></a>02127         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(st-&gt;st_mode)) {
<a name="l02128"></a>02128             <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#765eef536bcb3bd7bacdd675dc2fba13">S_ISLNK</a>(ost-&gt;st_mode)) {
<a name="l02129"></a>02129         <span class="comment">/* XXX NUL terminated result in fsm-&gt;rdbuf, len in fsm-&gt;rdnb. */</span>
<a name="l02130"></a>02130                 rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294654b792bc388bafe51e94dbb1415bfe5">FSM_READLINK</a>);
<a name="l02131"></a>02131                 <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l02132"></a>02132                 <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l02133"></a>02133                 <span class="keywordflow">if</span> (!strcmp(fsm-&gt;opath, fsm-&gt;rdbuf))    <span class="keywordflow">return</span> 0;
<a name="l02134"></a>02134             }
<a name="l02135"></a>02135         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISFIFO(st-&gt;st_mode)) {
<a name="l02136"></a>02136             <span class="keywordflow">if</span> (S_ISFIFO(ost-&gt;st_mode))         <span class="keywordflow">return</span> 0;
<a name="l02137"></a>02137         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (S_ISCHR(st-&gt;st_mode) || S_ISBLK(st-&gt;st_mode)) {
<a name="l02138"></a>02138             <span class="keywordflow">if</span> ((S_ISCHR(ost-&gt;st_mode) || S_ISBLK(ost-&gt;st_mode)) &amp;&amp;
<a name="l02139"></a>02139                 (ost-&gt;st_rdev == st-&gt;st_rdev))  <span class="keywordflow">return</span> 0;
<a name="l02140"></a>02140         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#397ddd128980f1ee034653da2e9d8f6e">S_ISSOCK</a>(st-&gt;st_mode)) {
<a name="l02141"></a>02141             <span class="keywordflow">if</span> (<a class="code" href="system_8h.html#397ddd128980f1ee034653da2e9d8f6e">S_ISSOCK</a>(ost-&gt;st_mode))         <span class="keywordflow">return</span> 0;
<a name="l02142"></a>02142         }
<a name="l02143"></a>02143             <span class="comment">/* XXX shouldn't do this with commit/undo. */</span>
<a name="l02144"></a>02144         rc = 0;
<a name="l02145"></a>02145         <span class="keywordflow">if</span> (fsm-&gt;stage == <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729475452f4058e4a420775b0377c842068b">FSM_PROCESS</a>) rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294636bf8b7fe268875e575e2886666cc60">FSM_UNLINK</a>);
<a name="l02146"></a>02146         <span class="keywordflow">if</span> (rc == 0)    rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>;
<a name="l02147"></a>02147         <span class="keywordflow">return</span> (rc ? rc : <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142aceecc38f502e26cce9fbcd186c6338">CPIOERR_ENOENT</a>);      <span class="comment">/* XXX HACK */</span>
<a name="l02148"></a>02148         <span class="comment">/*@notreached@*/</span> <span class="keywordflow">break</span>;
<a name="l02149"></a>02149 
<a name="l02150"></a>02150     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294636bf8b7fe268875e575e2886666cc60">FSM_UNLINK</a>:
<a name="l02151"></a>02151         <a class="code" href="fsm_8c.html#0e9dabd52e3a51c1218b093cccbd6359">removeSBITS</a>(fsm-&gt;path);
<a name="l02152"></a>02152         rc = <a class="code" href="rpmio_8h.html#3aa9b15c47e51f1ba4aa3d0b281db63d">Unlink</a>(fsm-&gt;path);
<a name="l02153"></a>02153         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; <a class="code" href="fsm_8h.html#dd1f24dac2619d770620fd31a83ecb3c">FSM_SYSCALL</a>))
<a name="l02154"></a>02154             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#3f97e894ffb886d576fbf4cec2f41298">RPMMESS_DEBUG</a>, <span class="stringliteral">" %8s (%s) %s\n"</span>, cur,
<a name="l02155"></a>02155                 fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02156"></a>02156         <span class="keywordflow">if</span> (rc &lt; 0)
<a name="l02157"></a>02157             rc = (<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> == ENOENT ? CPIOERR_ENOENT : <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414f0f6e40688fde59417f419af14961f73">CPIOERR_UNLINK_FAILED</a>);
<a name="l02158"></a>02158         <span class="keywordflow">break</span>;
<a name="l02159"></a>02159     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941e41a1057fee1d0afda412c700941ed8">FSM_RENAME</a>:
<a name="l02160"></a>02160         <a class="code" href="fsm_8c.html#0e9dabd52e3a51c1218b093cccbd6359">removeSBITS</a>(fsm-&gt;path);
<a name="l02161"></a>02161         rc = <a class="code" href="rpmio_8h.html#fe94695afff73acbbb07657bdab6d303">Rename</a>(fsm-&gt;opath, fsm-&gt;path);
<a name="l02162"></a>02162 <span class="preprocessor">#if defined(ETXTBSY)</span>
<a name="l02163"></a>02163 <span class="preprocessor"></span>        <span class="keywordflow">if</span> (rc &amp;&amp; errno == ETXTBSY) {
<a name="l02164"></a>02164             <span class="keywordtype">char</span> * path = <a class="code" href="system_8h.html#eb1df3e83fb069eaa2eb66ace3a0ea52">alloca</a>(strlen(fsm-&gt;path) + <span class="keyword">sizeof</span>(<span class="stringliteral">"-RPMDELETE"</span>));
<a name="l02165"></a>02165             (void) <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>( <a class="code" href="system_8h.html#890dbcd7c456828c1b6ff714e405fcc1">stpcpy</a>(path, fsm-&gt;path), <span class="stringliteral">"-RPMDELETE"</span>);
<a name="l02166"></a>02166             <span class="comment">/*</span>
<a name="l02167"></a>02167 <span class="comment">             * XXX HP-UX (and other os'es) don't permit rename to busy</span>
<a name="l02168"></a>02168 <span class="comment">             * XXX files.</span>
<a name="l02169"></a>02169 <span class="comment">             */</span>
<a name="l02170"></a>02170             rc = <a class="code" href="rpmio_8h.html#fe94695afff73acbbb07657bdab6d303">Rename</a>(fsm-&gt;path, path);
<a name="l02171"></a>02171             <span class="keywordflow">if</span> (!rc) rc = <a class="code" href="rpmio_8h.html#fe94695afff73acbbb07657bdab6d303">Rename</a>(fsm-&gt;opath, fsm-&gt;path);
<a name="l02172"></a>02172         }
<a name="l02173"></a>02173 <span class="preprocessor">#endif</span>
<a name="l02174"></a>02174 <span class="preprocessor"></span>        <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02175"></a>02175             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %s) %s\n"</span>, cur,
<a name="l02176"></a>02176                 fsm-&gt;opath, fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02177"></a>02177         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744146a2ce3d446b12b77da0e0c478fbcebc1">CPIOERR_RENAME_FAILED</a>;
<a name="l02178"></a>02178         <span class="keywordflow">break</span>;
<a name="l02179"></a>02179     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729440ebe13d6dc6c738503ca54666f17e1c">FSM_MKDIR</a>:
<a name="l02180"></a>02180         rc = <a class="code" href="rpmio_8h.html#eafd1c00d1375593b5a8bae6f9f167d8">Mkdir</a>(fsm-&gt;path, (st-&gt;st_mode &amp; 07777));
<a name="l02181"></a>02181         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02182"></a>02182             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, 0%04o) %s\n"</span>, cur,
<a name="l02183"></a>02183                 fsm-&gt;path, (<span class="keywordtype">unsigned</span>)(st-&gt;st_mode &amp; 07777),
<a name="l02184"></a>02184                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02185"></a>02185         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414b66706f8e0d5e6396a71f998fc1e9662">CPIOERR_MKDIR_FAILED</a>;
<a name="l02186"></a>02186         <span class="keywordflow">break</span>;
<a name="l02187"></a>02187     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948262dd498388759224bc5f8d79bd2335">FSM_RMDIR</a>:
<a name="l02188"></a>02188         rc = <a class="code" href="rpmio_8h.html#b9e8faa2ae22f181eeb0e1532b2aa96d">Rmdir</a>(fsm-&gt;path);
<a name="l02189"></a>02189         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02190"></a>02190             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s) %s\n"</span>, cur,
<a name="l02191"></a>02191                 fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02192"></a>02192         <span class="keywordflow">if</span> (rc &lt; 0)
<a name="l02193"></a>02193             <span class="keywordflow">switch</span> (errno) {
<a name="l02194"></a>02194             <span class="keywordflow">case</span> ENOENT:        rc = CPIOERR_ENOENT;    <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l02195"></a>02195             <span class="keywordflow">case</span> ENOTEMPTY:     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414a57151c79721a9e4a459d4548b8e0702">CPIOERR_ENOTEMPTY</a>; <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l02196"></a>02196             <span class="keywordflow">default</span>:            rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414a95ecb5852756653511f9cf54fdd4223">CPIOERR_RMDIR_FAILED</a>; <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l02197"></a>02197             }
<a name="l02198"></a>02198         <span class="keywordflow">break</span>;
<a name="l02199"></a>02199     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294524170fb8bc99461d41fc6e142dc0887">FSM_LSETFCON</a>:
<a name="l02200"></a>02200         <span class="keywordflow">if</span> (fsm-&gt;fcontext == NULL || *fsm-&gt;fcontext == <span class="charliteral">'\0'</span>
<a name="l02201"></a>02201          || !strcmp(fsm-&gt;fcontext, <span class="stringliteral">"&lt;&lt;none&gt;&gt;"</span>))
<a name="l02202"></a>02202             <span class="keywordflow">break</span>;
<a name="l02203"></a>02203         rc = <a class="code" href="system_8h.html#71351fe35c9fa672526a0572d59c8b29">lsetfilecon</a>(fsm-&gt;path, (<a class="code" href="system_8h.html#647738b0bfa7922b9a114414112237d1">security_context_t</a>)fsm-&gt;fcontext);
<a name="l02204"></a>02204         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02205"></a>02205             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %s) %s\n"</span>, cur,
<a name="l02206"></a>02206                 fsm-&gt;path, fsm-&gt;fcontext,
<a name="l02207"></a>02207                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02208"></a>02208         <span class="keywordflow">if</span> (rc &lt; 0) rc = (<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> == EOPNOTSUPP ? 0 : <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414d18c6db64ff20398d0310488921de2f9">CPIOERR_LSETFCON_FAILED</a>);
<a name="l02209"></a>02209         <span class="keywordflow">break</span>;
<a name="l02210"></a>02210     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729471b8027acb5ccda243d736ad4f41debd">FSM_CHOWN</a>:
<a name="l02211"></a>02211         rc = chown(fsm-&gt;path, st-&gt;st_uid, st-&gt;st_gid);
<a name="l02212"></a>02212         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02213"></a>02213             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %d, %d) %s\n"</span>, cur,
<a name="l02214"></a>02214                 fsm-&gt;path, (<span class="keywordtype">int</span>)st-&gt;st_uid, (<span class="keywordtype">int</span>)st-&gt;st_gid,
<a name="l02215"></a>02215                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02216"></a>02216         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744149356bf4d6b3660ae8f5272e50187a705">CPIOERR_CHOWN_FAILED</a>;
<a name="l02217"></a>02217         <span class="keywordflow">break</span>;
<a name="l02218"></a>02218     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b93ff930f61289ca8b8e00ec5795c0fe">FSM_LCHOWN</a>:
<a name="l02219"></a>02219 <span class="preprocessor">#if ! CHOWN_FOLLOWS_SYMLINK</span>
<a name="l02220"></a>02220 <span class="preprocessor"></span>        rc = <a class="code" href="system_8h.html#1f468b228eccf73b8bd0e9d4303a3898">lchown</a>(fsm-&gt;path, st-&gt;st_uid, st-&gt;st_gid);
<a name="l02221"></a>02221         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02222"></a>02222             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %d, %d) %s\n"</span>, cur,
<a name="l02223"></a>02223                 fsm-&gt;path, (<span class="keywordtype">int</span>)st-&gt;st_uid, (<span class="keywordtype">int</span>)st-&gt;st_gid,
<a name="l02224"></a>02224                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02225"></a>02225         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744149356bf4d6b3660ae8f5272e50187a705">CPIOERR_CHOWN_FAILED</a>;
<a name="l02226"></a>02226 <span class="preprocessor">#endif</span>
<a name="l02227"></a>02227 <span class="preprocessor"></span>        <span class="keywordflow">break</span>;
<a name="l02228"></a>02228     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294193d903826482d75cdbf494844514fa7">FSM_CHMOD</a>:
<a name="l02229"></a>02229         rc = chmod(fsm-&gt;path, (st-&gt;st_mode &amp; 07777));
<a name="l02230"></a>02230         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02231"></a>02231             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, 0%04o) %s\n"</span>, cur,
<a name="l02232"></a>02232                 fsm-&gt;path, (<span class="keywordtype">unsigned</span>)(st-&gt;st_mode &amp; 07777),
<a name="l02233"></a>02233                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02234"></a>02234         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414f3111e74697fc0ad11e915eff6badef7">CPIOERR_CHMOD_FAILED</a>;
<a name="l02235"></a>02235         <span class="keywordflow">break</span>;
<a name="l02236"></a>02236     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d1b3dd9376bd7134f6f797d79cc1c69c">FSM_UTIME</a>:
<a name="l02237"></a>02237         {   <span class="keyword">struct </span>utimbuf stamp;
<a name="l02238"></a>02238             stamp.actime = st-&gt;st_mtime;
<a name="l02239"></a>02239             stamp.modtime = st-&gt;st_mtime;
<a name="l02240"></a>02240             rc = utime(fsm-&gt;path, &amp;stamp);
<a name="l02241"></a>02241             <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02242"></a>02242                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, 0x%x) %s\n"</span>, cur,
<a name="l02243"></a>02243                         fsm-&gt;path, (<span class="keywordtype">unsigned</span>)st-&gt;st_mtime,
<a name="l02244"></a>02244                         (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02245"></a>02245             <span class="keywordflow">if</span> (rc &lt; 0) rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414f2c0fa94880bf206cb61a24b4832cc5e">CPIOERR_UTIME_FAILED</a>;
<a name="l02246"></a>02246         }
<a name="l02247"></a>02247         <span class="keywordflow">break</span>;
<a name="l02248"></a>02248     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729438b7cc3fcb7a857fc4317301a63061ea">FSM_SYMLINK</a>:
<a name="l02249"></a>02249         rc = symlink(fsm-&gt;opath, fsm-&gt;path);
<a name="l02250"></a>02250         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02251"></a>02251             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %s) %s\n"</span>, cur,
<a name="l02252"></a>02252                 fsm-&gt;opath, fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02253"></a>02253         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f7441470c2c8b87d554ca49a54e5ccb7b1cf08">CPIOERR_SYMLINK_FAILED</a>;
<a name="l02254"></a>02254         <span class="keywordflow">break</span>;
<a name="l02255"></a>02255     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294440705fd05b53725958fec17a2fa9c0e">FSM_LINK</a>:
<a name="l02256"></a>02256         rc = <a class="code" href="rpmio_8h.html#c3b00acd661450b02abf301a02584a49">Link</a>(fsm-&gt;opath, fsm-&gt;path);
<a name="l02257"></a>02257         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02258"></a>02258             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %s) %s\n"</span>, cur,
<a name="l02259"></a>02259                 fsm-&gt;opath, fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02260"></a>02260         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744140f893f980c70b5ca352dde31d9b16cac">CPIOERR_LINK_FAILED</a>;
<a name="l02261"></a>02261         <span class="keywordflow">break</span>;
<a name="l02262"></a>02262     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729452b5a5dafb5dc98e8560dd1976547685">FSM_MKFIFO</a>:
<a name="l02263"></a>02263         rc = mkfifo(fsm-&gt;path, (st-&gt;st_mode &amp; 07777));
<a name="l02264"></a>02264         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02265"></a>02265             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, 0%04o) %s\n"</span>, cur,
<a name="l02266"></a>02266                 fsm-&gt;path, (<span class="keywordtype">unsigned</span>)(st-&gt;st_mode &amp; 07777),
<a name="l02267"></a>02267                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02268"></a>02268         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f7441425c682b23c1ac4f8f50845a18597ddf4">CPIOERR_MKFIFO_FAILED</a>;
<a name="l02269"></a>02269         <span class="keywordflow">break</span>;
<a name="l02270"></a>02270     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294db3ad9bff825d794fac75f4bb0bba6ad">FSM_MKNOD</a>:
<a name="l02271"></a>02271         <span class="comment">/*@-unrecog -portability @*/</span> <span class="comment">/* FIX: check S_IFIFO or dev != 0 */</span>
<a name="l02272"></a>02272         rc = mknod(fsm-&gt;path, (st-&gt;st_mode &amp; ~07777), st-&gt;st_rdev);
<a name="l02273"></a>02273         <span class="comment">/*@=unrecog =portability @*/</span>
<a name="l02274"></a>02274         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02275"></a>02275             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, 0%o, 0x%x) %s\n"</span>, cur,
<a name="l02276"></a>02276                 fsm-&gt;path, (<span class="keywordtype">unsigned</span>)(st-&gt;st_mode &amp; ~07777),
<a name="l02277"></a>02277                 (<span class="keywordtype">unsigned</span>)st-&gt;st_rdev,
<a name="l02278"></a>02278                 (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02279"></a>02279         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744145ed692db88a685dcfb64d0869b22bba5">CPIOERR_MKNOD_FAILED</a>;
<a name="l02280"></a>02280         <span class="keywordflow">break</span>;
<a name="l02281"></a>02281     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672946277dc678cf1e161be9f0ad332098898">FSM_LSTAT</a>:
<a name="l02282"></a>02282         rc = <a class="code" href="rpmio_8h.html#2bb4b733023b0f125020af3a6b3dda43">Lstat</a>(fsm-&gt;path, ost);
<a name="l02283"></a>02283         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL) &amp;&amp; rc &amp;&amp; errno != ENOENT)
<a name="l02284"></a>02284             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, ost) %s\n"</span>, cur,
<a name="l02285"></a>02285                 fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02286"></a>02286         <span class="keywordflow">if</span> (rc &lt; 0) {
<a name="l02287"></a>02287             rc = (<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> == ENOENT ? CPIOERR_ENOENT : <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414531e59e2d408d62c955c0231dc547f7b">CPIOERR_LSTAT_FAILED</a>);
<a name="l02288"></a>02288             memset(ost, 0, <span class="keyword">sizeof</span>(*ost));       <span class="comment">/* XXX s390x hackery */</span>
<a name="l02289"></a>02289         }
<a name="l02290"></a>02290         <span class="keywordflow">break</span>;
<a name="l02291"></a>02291     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729491aaf77994d76d053f893def39b9da63">FSM_STAT</a>:
<a name="l02292"></a>02292         rc = <a class="code" href="rpmio_8h.html#a4c7b9631f808ccd9e1e9a5a50965acb">Stat</a>(fsm-&gt;path, ost);
<a name="l02293"></a>02293         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL) &amp;&amp; rc &amp;&amp; errno != ENOENT)
<a name="l02294"></a>02294             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, ost) %s\n"</span>, cur,
<a name="l02295"></a>02295                 fsm-&gt;path, (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02296"></a>02296         <span class="keywordflow">if</span> (rc &lt; 0) {
<a name="l02297"></a>02297             rc = (<a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> == ENOENT ? CPIOERR_ENOENT : <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414d246e04e8735b9071431f62ac0c550ce">CPIOERR_STAT_FAILED</a>);
<a name="l02298"></a>02298             memset(ost, 0, <span class="keyword">sizeof</span>(*ost));       <span class="comment">/* XXX s390x hackery */</span>
<a name="l02299"></a>02299         }
<a name="l02300"></a>02300         <span class="keywordflow">break</span>;
<a name="l02301"></a>02301     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294654b792bc388bafe51e94dbb1415bfe5">FSM_READLINK</a>:
<a name="l02302"></a>02302         <span class="comment">/* XXX NUL terminated result in fsm-&gt;rdbuf, len in fsm-&gt;rdnb. */</span>
<a name="l02303"></a>02303 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02304"></a>02304         rc = <a class="code" href="rpmio_8h.html#775c48c096d6fec82e5548176e0c0f6d">Readlink</a>(fsm-&gt;path, fsm-&gt;rdbuf, fsm-&gt;rdsize - 1);
<a name="l02305"></a>02305 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02306"></a>02306         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02307"></a>02307             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, rdbuf, %d) %s\n"</span>, cur,
<a name="l02308"></a>02308                 fsm-&gt;path, (<span class="keywordtype">int</span>)(fsm-&gt;rdsize -1), (rc &lt; 0 ? <a class="code" href="file_8h.html#b6b553574f85ce7727cf5b9a1b638293">strerror</a>(errno) : <span class="stringliteral">""</span>));
<a name="l02309"></a>02309         <span class="keywordflow">if</span> (rc &lt; 0)     rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744149df5b60c12740ed68fe513fbfa78a213">CPIOERR_READLINK_FAILED</a>;
<a name="l02310"></a>02310         <span class="keywordflow">else</span> {
<a name="l02311"></a>02311             fsm-&gt;rdnb = rc;
<a name="l02312"></a>02312 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02313"></a>02313             fsm-&gt;rdbuf[fsm-&gt;rdnb] = <span class="charliteral">'\0'</span>;
<a name="l02314"></a>02314 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02315"></a>02315             rc = 0;
<a name="l02316"></a>02316         }
<a name="l02317"></a>02317         <span class="keywordflow">break</span>;
<a name="l02318"></a>02318     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294460ed165364c157d2e56eb43ab535069">FSM_CHROOT</a>:
<a name="l02319"></a>02319         <span class="keywordflow">break</span>;
<a name="l02320"></a>02320 
<a name="l02321"></a>02321     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672949b0139eef6e6af3fec129451cc463f95">FSM_NEXT</a>:
<a name="l02322"></a>02322         rc = <a class="code" href="fsm_8c.html#860108bbf782dbcd925cd074936087af">fsmUNSAFE</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ae5a45979a13331c02f59cff40d9b473">FSM_HREAD</a>);
<a name="l02323"></a>02323         <span class="keywordflow">if</span> (rc) <span class="keywordflow">break</span>;
<a name="l02324"></a>02324         <span class="keywordflow">if</span> (!strcmp(fsm-&gt;path, <a class="code" href="cpio_8h.html#d06505e1e4601a0a125012b85a2e797b">CPIO_TRAILER</a>)) { <span class="comment">/* Detect end-of-payload. */</span>
<a name="l02325"></a>02325             fsm-&gt;path = <a class="code" href="rpmlib_8h.html#2574a8c557fe9a6754ff3b3656943f23">_free</a>(fsm-&gt;path);
<a name="l02326"></a>02326             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142047381892440ecbb198613725bed387">CPIOERR_HDR_TRAILER</a>;
<a name="l02327"></a>02327         }
<a name="l02328"></a>02328         <span class="keywordflow">if</span> (!rc)
<a name="l02329"></a>02329             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294251fe6c8826b2b6a2ea2741c7ed97bf9">FSM_POS</a>);
<a name="l02330"></a>02330         <span class="keywordflow">break</span>;
<a name="l02331"></a>02331     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ee01dadc03702ba120b7ec20aa41c791">FSM_EAT</a>:
<a name="l02332"></a>02332         <span class="keywordflow">for</span> (<a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> = st-&gt;st_size; <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> &gt; 0; <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> -= fsm-&gt;rdnb) {
<a name="l02333"></a>02333             fsm-&gt;wrlen = (<a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> &gt; fsm-&gt;wrsize ? fsm-&gt;wrsize : <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>);
<a name="l02334"></a>02334             rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294aaad57b40c4c929dc9b6b21dd08d2094">FSM_DREAD</a>);
<a name="l02335"></a>02335             <span class="keywordflow">if</span> (rc)
<a name="l02336"></a>02336                 <span class="comment">/*@loopbreak@*/</span> <span class="keywordflow">break</span>;
<a name="l02337"></a>02337         }
<a name="l02338"></a>02338         <span class="keywordflow">break</span>;
<a name="l02339"></a>02339     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294251fe6c8826b2b6a2ea2741c7ed97bf9">FSM_POS</a>:
<a name="l02340"></a>02340         <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> = (modulo - (<a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;cfd) % modulo)) % modulo;
<a name="l02341"></a>02341         <span class="keywordflow">if</span> (<a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>) {
<a name="l02342"></a>02342             fsm-&gt;wrlen = <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>;
<a name="l02343"></a>02343             (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294aaad57b40c4c929dc9b6b21dd08d2094">FSM_DREAD</a>);
<a name="l02344"></a>02344         }
<a name="l02345"></a>02345         <span class="keywordflow">break</span>;
<a name="l02346"></a>02346     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294468b8cd15c8370981450c237ca2ab28c">FSM_PAD</a>:
<a name="l02347"></a>02347         <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a> = (modulo - (<a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;cfd) % modulo)) % modulo;
<a name="l02348"></a>02348         <span class="keywordflow">if</span> (<a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>) {
<a name="l02349"></a>02349 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02350"></a>02350             memset(fsm-&gt;rdbuf, 0, <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>);
<a name="l02351"></a>02351 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02352"></a>02352             <span class="comment">/* XXX DWRITE uses rdnb for I/O length. */</span>
<a name="l02353"></a>02353             fsm-&gt;rdnb = <a class="code" href="lparser_8c.html#3584754acc5e91c03d6fc91359eefd78">left</a>;
<a name="l02354"></a>02354             (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672945ac5b391f53c4858db2077e1a3d2ba62">FSM_DWRITE</a>);
<a name="l02355"></a>02355         }
<a name="l02356"></a>02356         <span class="keywordflow">break</span>;
<a name="l02357"></a>02357     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948271cab3ced373e42d7158b7d3322995">FSM_TRAILER</a>:
<a name="l02358"></a>02358         rc = <a class="code" href="cpio_8c.html#adcd0722153cad106c2eda335d58367a">cpioTrailerWrite</a>(fsm);
<a name="l02359"></a>02359         <span class="keywordflow">break</span>;
<a name="l02360"></a>02360     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ae5a45979a13331c02f59cff40d9b473">FSM_HREAD</a>:
<a name="l02361"></a>02361         rc = <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294251fe6c8826b2b6a2ea2741c7ed97bf9">FSM_POS</a>);
<a name="l02362"></a>02362         <span class="keywordflow">if</span> (!rc)
<a name="l02363"></a>02363             rc = <a class="code" href="cpio_8c.html#7b75e9c60d270d3a99721ff1aa1ca914">cpioHeaderRead</a>(fsm, st);       <span class="comment">/* Read next payload header. */</span>
<a name="l02364"></a>02364         <span class="keywordflow">break</span>;
<a name="l02365"></a>02365     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294509d07d14f3ce1a4b22381ca6e5e7cb9">FSM_HWRITE</a>:
<a name="l02366"></a>02366         rc = <a class="code" href="cpio_8c.html#cf38b144ff9318ab690ba58d212d9942">cpioHeaderWrite</a>(fsm, st);          <span class="comment">/* Write next payload header. */</span>
<a name="l02367"></a>02367         <span class="keywordflow">break</span>;
<a name="l02368"></a>02368     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294aaad57b40c4c929dc9b6b21dd08d2094">FSM_DREAD</a>:
<a name="l02369"></a>02369 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02370"></a>02370         fsm-&gt;rdnb = <a class="code" href="rpmio_8c.html#33450a971c81ba82ce9a9c2242e04ed7">Fread</a>(fsm-&gt;wrbuf, <span class="keyword">sizeof</span>(*fsm-&gt;wrbuf), fsm-&gt;wrlen, fsm-&gt;cfd);
<a name="l02371"></a>02371 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02372"></a>02372         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02373"></a>02373             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %d, cfd)\trdnb %d\n"</span>,
<a name="l02374"></a>02374                 cur, (fsm-&gt;wrbuf == fsm-&gt;wrb ? <span class="stringliteral">"wrbuf"</span> : <span class="stringliteral">"mmap"</span>),
<a name="l02375"></a>02375                 (<span class="keywordtype">int</span>)fsm-&gt;wrlen, (<span class="keywordtype">int</span>)fsm-&gt;rdnb);
<a name="l02376"></a>02376         <span class="keywordflow">if</span> (fsm-&gt;rdnb != fsm-&gt;wrlen || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(fsm-&gt;cfd))
<a name="l02377"></a>02377             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744144179d5818ff86a7bbc739a665c447859">CPIOERR_READ_FAILED</a>;
<a name="l02378"></a>02378         <span class="keywordflow">if</span> (fsm-&gt;rdnb &gt; 0)
<a name="l02379"></a>02379             <a class="code" href="group__rpmio.html#g0e285724c7c920e460d9197f9396c69f">fdSetCpioPos</a>(fsm-&gt;cfd, <a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;cfd) + fsm-&gt;rdnb);
<a name="l02380"></a>02380         <span class="keywordflow">break</span>;
<a name="l02381"></a>02381     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672945ac5b391f53c4858db2077e1a3d2ba62">FSM_DWRITE</a>:
<a name="l02382"></a>02382         fsm-&gt;wrnb = <a class="code" href="rpmio_8c.html#ce5d48cc70864787df48c3d233edb997">Fwrite</a>(fsm-&gt;rdbuf, <span class="keyword">sizeof</span>(*fsm-&gt;rdbuf), fsm-&gt;rdnb, fsm-&gt;cfd);
<a name="l02383"></a>02383         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02384"></a>02384             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, %d, cfd)\twrnb %d\n"</span>,
<a name="l02385"></a>02385                 cur, (fsm-&gt;rdbuf == fsm-&gt;rdb ? <span class="stringliteral">"rdbuf"</span> : <span class="stringliteral">"mmap"</span>),
<a name="l02386"></a>02386                 (<span class="keywordtype">int</span>)fsm-&gt;rdnb, (<span class="keywordtype">int</span>)fsm-&gt;wrnb);
<a name="l02387"></a>02387         <span class="keywordflow">if</span> (fsm-&gt;rdnb != fsm-&gt;wrnb || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(fsm-&gt;cfd))
<a name="l02388"></a>02388             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744144feeef2a9b19244e8c594d3ae0cfb27f">CPIOERR_WRITE_FAILED</a>;
<a name="l02389"></a>02389         <span class="keywordflow">if</span> (fsm-&gt;wrnb &gt; 0)
<a name="l02390"></a>02390             <a class="code" href="group__rpmio.html#g0e285724c7c920e460d9197f9396c69f">fdSetCpioPos</a>(fsm-&gt;cfd, <a class="code" href="group__rpmio.html#g940d85097d2c65fbcf6c7ef4426bbb6d">fdGetCpioPos</a>(fsm-&gt;cfd) + fsm-&gt;wrnb);
<a name="l02391"></a>02391         <span class="keywordflow">break</span>;
<a name="l02392"></a>02392 
<a name="l02393"></a>02393     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294274ca5be69e660b97cb75e8c557e2b4e">FSM_ROPEN</a>:
<a name="l02394"></a>02394         fsm-&gt;rfd = <a class="code" href="rpmio_8c.html#2eb611bd97d6d937d2296bcecd83ee31">Fopen</a>(fsm-&gt;path, <span class="stringliteral">"r.ufdio"</span>);
<a name="l02395"></a>02395         <span class="keywordflow">if</span> (fsm-&gt;rfd == NULL || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(fsm-&gt;rfd)) {
<a name="l02396"></a>02396             <span class="keywordflow">if</span> (fsm-&gt;rfd != NULL)       (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729400a088b8822d7147f6016c8bbefdaa0c">FSM_RCLOSE</a>);
<a name="l02397"></a>02397             fsm-&gt;rfd = NULL;
<a name="l02398"></a>02398             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414cdca0e6601a6a374efc5d51d6f429392">CPIOERR_OPEN_FAILED</a>;
<a name="l02399"></a>02399             <span class="keywordflow">break</span>;
<a name="l02400"></a>02400         }
<a name="l02401"></a>02401         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02402"></a>02402             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, \"r\") rfd %p rdbuf %p\n"</span>, cur,
<a name="l02403"></a>02403                 fsm-&gt;path, fsm-&gt;rfd, fsm-&gt;rdbuf);
<a name="l02404"></a>02404         <span class="keywordflow">break</span>;
<a name="l02405"></a>02405     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729470267988dbe27d56ae4b561333db1df5">FSM_READ</a>:
<a name="l02406"></a>02406 <span class="comment">/*@-boundswrite@*/</span>
<a name="l02407"></a>02407         fsm-&gt;rdnb = <a class="code" href="rpmio_8c.html#33450a971c81ba82ce9a9c2242e04ed7">Fread</a>(fsm-&gt;rdbuf, <span class="keyword">sizeof</span>(*fsm-&gt;rdbuf), fsm-&gt;rdlen, fsm-&gt;rfd);
<a name="l02408"></a>02408 <span class="comment">/*@=boundswrite@*/</span>
<a name="l02409"></a>02409         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02410"></a>02410             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (rdbuf, %d, rfd)\trdnb %d\n"</span>,
<a name="l02411"></a>02411                 cur, (<span class="keywordtype">int</span>)fsm-&gt;rdlen, (<span class="keywordtype">int</span>)fsm-&gt;rdnb);
<a name="l02412"></a>02412         <span class="keywordflow">if</span> (fsm-&gt;rdnb != fsm-&gt;rdlen || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(fsm-&gt;rfd))
<a name="l02413"></a>02413             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744144179d5818ff86a7bbc739a665c447859">CPIOERR_READ_FAILED</a>;
<a name="l02414"></a>02414         <span class="keywordflow">break</span>;
<a name="l02415"></a>02415     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729400a088b8822d7147f6016c8bbefdaa0c">FSM_RCLOSE</a>:
<a name="l02416"></a>02416         <span class="keywordflow">if</span> (fsm-&gt;rfd != NULL) {
<a name="l02417"></a>02417             <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02418"></a>02418                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%p)\n"</span>, cur, fsm-&gt;rfd);
<a name="l02419"></a>02419             (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(<a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm), <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e8a1b0a28f4a226d6ede631a48c893c699">RPMTS_OP_DIGEST</a>),
<a name="l02420"></a>02420                         <a class="code" href="group__rpmio.html#gca91d991ee3b190bb32f0b1aed7fb796">fdstat_op</a>(fsm-&gt;rfd, <a class="code" href="group__rpmio.html#gg3f29a6d794c5c4d3283466f388021181f418a78e4290c0f2e2b0ab16abd2db4b">FDSTAT_DIGEST</a>));
<a name="l02421"></a>02421             (void) <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(fsm-&gt;rfd);
<a name="l02422"></a>02422             <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l02423"></a>02423         }
<a name="l02424"></a>02424         fsm-&gt;rfd = NULL;
<a name="l02425"></a>02425         <span class="keywordflow">break</span>;
<a name="l02426"></a>02426     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729415867d9a592522dcdf1e949ff96b584d">FSM_WOPEN</a>:
<a name="l02427"></a>02427         fsm-&gt;wfd = <a class="code" href="rpmio_8c.html#2eb611bd97d6d937d2296bcecd83ee31">Fopen</a>(fsm-&gt;path, <span class="stringliteral">"w.ufdio"</span>);
<a name="l02428"></a>02428         <span class="keywordflow">if</span> (fsm-&gt;wfd == NULL || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(fsm-&gt;wfd)) {
<a name="l02429"></a>02429             <span class="keywordflow">if</span> (fsm-&gt;wfd != NULL)       (void) <a class="code" href="fsm_8c.html#f909332db721f99355cd7d4193f61449">fsmNext</a>(fsm, <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b045cdb07ec8a86b21c4604d6361c957">FSM_WCLOSE</a>);
<a name="l02430"></a>02430             fsm-&gt;wfd = NULL;
<a name="l02431"></a>02431             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f74414cdca0e6601a6a374efc5d51d6f429392">CPIOERR_OPEN_FAILED</a>;
<a name="l02432"></a>02432         }
<a name="l02433"></a>02433         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02434"></a>02434             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%s, \"w\") wfd %p wrbuf %p\n"</span>, cur,
<a name="l02435"></a>02435                 fsm-&gt;path, fsm-&gt;wfd, fsm-&gt;wrbuf);
<a name="l02436"></a>02436         <span class="keywordflow">break</span>;
<a name="l02437"></a>02437     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294a25d13047b5a7d78b1505e62c621176d">FSM_WRITE</a>:
<a name="l02438"></a>02438         fsm-&gt;wrnb = <a class="code" href="rpmio_8c.html#ce5d48cc70864787df48c3d233edb997">Fwrite</a>(fsm-&gt;wrbuf, <span class="keyword">sizeof</span>(*fsm-&gt;wrbuf), fsm-&gt;rdnb, fsm-&gt;wfd);
<a name="l02439"></a>02439         <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02440"></a>02440             <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (wrbuf, %d, wfd)\twrnb %d\n"</span>,
<a name="l02441"></a>02441                 cur, (<span class="keywordtype">int</span>)fsm-&gt;rdnb, (<span class="keywordtype">int</span>)fsm-&gt;wrnb);
<a name="l02442"></a>02442         <span class="keywordflow">if</span> (fsm-&gt;rdnb != fsm-&gt;wrnb || <a class="code" href="rpmio_8c.html#0f608c106ddef6245f5e9773a8e56b73">Ferror</a>(fsm-&gt;wfd))
<a name="l02443"></a>02443             rc = <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744144feeef2a9b19244e8c594d3ae0cfb27f">CPIOERR_WRITE_FAILED</a>;
<a name="l02444"></a>02444         <span class="keywordflow">break</span>;
<a name="l02445"></a>02445     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b045cdb07ec8a86b21c4604d6361c957">FSM_WCLOSE</a>:
<a name="l02446"></a>02446         <span class="keywordflow">if</span> (fsm-&gt;wfd != NULL) {
<a name="l02447"></a>02447             <span class="keywordflow">if</span> (<a class="code" href="poptBT_8c.html#a9d80721d6d496e7e799ad3926f7a44b">_fsm_debug</a> &amp;&amp; (stage &amp; FSM_SYSCALL))
<a name="l02448"></a>02448                 <a class="code" href="rpmmessages_8h.html#19d1274092486c2d1397c86f23283e32">rpmMessage</a>(RPMMESS_DEBUG, <span class="stringliteral">" %8s (%p)\n"</span>, cur, fsm-&gt;wfd);
<a name="l02449"></a>02449             (void) <a class="code" href="group__rpmio.html#g46822386355eebdf0030ed862eae9b35">rpmswAdd</a>(<a class="code" href="rpmts_8c.html#c532195f0c1164659306125a44de2246">rpmtsOp</a>(<a class="code" href="fsm_8c.html#012360970ce27aba0a76bd965088a9a4">fsmGetTs</a>(fsm), <a class="code" href="rpmts_8h.html#91b5b6bbde8250526b406de6b91735e8a1b0a28f4a226d6ede631a48c893c699">RPMTS_OP_DIGEST</a>),
<a name="l02450"></a>02450                         <a class="code" href="group__rpmio.html#gca91d991ee3b190bb32f0b1aed7fb796">fdstat_op</a>(fsm-&gt;wfd, <a class="code" href="group__rpmio.html#gg3f29a6d794c5c4d3283466f388021181f418a78e4290c0f2e2b0ab16abd2db4b">FDSTAT_DIGEST</a>));
<a name="l02451"></a>02451             (void) <a class="code" href="rpmio_8c.html#7e40bd43f40fcfce2773851b922c7774">Fclose</a>(fsm-&gt;wfd);
<a name="l02452"></a>02452             <a class="code" href="system_8h.html#d65a8842cc674e3ddf69355898c0ecbf">errno</a> = saveerrno;
<a name="l02453"></a>02453         }
<a name="l02454"></a>02454         fsm-&gt;wfd = NULL;
<a name="l02455"></a>02455         <span class="keywordflow">break</span>;
<a name="l02456"></a>02456 
<a name="l02457"></a>02457     <span class="keywordflow">default</span>:
<a name="l02458"></a>02458         <span class="keywordflow">break</span>;
<a name="l02459"></a>02459     }
<a name="l02460"></a>02460     <span class="comment">/*@=branchstate@*/</span>
<a name="l02461"></a>02461 
<a name="l02462"></a>02462     <span class="keywordflow">if</span> (!(stage &amp; <a class="code" href="fsm_8h.html#ee1c57f5f9c91fe81110bb397069a537">FSM_INTERNAL</a>)) {
<a name="l02463"></a>02463         fsm-&gt;rc = (rc == <a class="code" href="group__payload.html#gg3abccbc5b24f5c2dac293c63a1f744142047381892440ecbb198613725bed387">CPIOERR_HDR_TRAILER</a> ? 0 : rc);
<a name="l02464"></a>02464     }
<a name="l02465"></a>02465     <span class="keywordflow">return</span> rc;
<a name="l02466"></a>02466 }
<a name="l02467"></a>02467 <span class="comment">/*@=compmempass@*/</span>
<a name="l02468"></a>02468 <span class="comment">/*@=boundsread@*/</span>
<a name="l02469"></a>02469 
<a name="l02470"></a><a class="code" href="fsm_8h.html#18c622e1db187b34e2a12c78c845d9ea">02470</a> <span class="comment">/*@obserever@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> <a class="code" href="fsm_8c.html#18c622e1db187b34e2a12c78c845d9ea">fileActionString</a>(<a class="code" href="rpmlib_8h.html#b8093e386e879383837c4a528d8b9bdc">fileAction</a> a)
<a name="l02471"></a>02471 {
<a name="l02472"></a>02472     <span class="keywordflow">switch</span> (a) {
<a name="l02473"></a>02473     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0554058e6c6b3c417ce53eafb0fe7f6806">FA_UNKNOWN</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"unknown"</span>;
<a name="l02474"></a>02474     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc053f832bbad26488d6441a3d0589da2784">FA_CREATE</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"create"</span>;
<a name="l02475"></a>02475     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc0593e433874ed32187140e8fa952608896">FA_COPYOUT</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"copyout"</span>;
<a name="l02476"></a>02476     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc055fed1ade77dfbb3db4d937a94498263b">FA_COPYIN</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"copyin"</span>;
<a name="l02477"></a>02477     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc051a5a5b499a264b1bcc214b1e9498c8fe">FA_BACKUP</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"backup"</span>;
<a name="l02478"></a>02478     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc058ad2065d928238a93bcb2db6c9c64a22">FA_SAVE</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"save"</span>;
<a name="l02479"></a>02479     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05a2c1302ed618813615e8eda133074b3a">FA_SKIP</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"skip"</span>;
<a name="l02480"></a>02480     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05bc34912fb3e174c7ae2f4d94b671b0b0">FA_ALTNAME</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"altname"</span>;
<a name="l02481"></a>02481     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05f3aaace1f9e55323fb68a8b7064a720f">FA_ERASE</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"erase"</span>;
<a name="l02482"></a>02482     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc056a60e7a49164b8c0e4fcec71c0e1fd32">FA_SKIPNSTATE</a>: <span class="keywordflow">return</span> <span class="stringliteral">"skipnstate"</span>;
<a name="l02483"></a>02483     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05fa3c5366b8f18737a117930a4cbd4521">FA_SKIPNETSHARED</a>: <span class="keywordflow">return</span> <span class="stringliteral">"skipnetshared"</span>;
<a name="l02484"></a>02484     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#8b8fd93ef360c8508d1a65e6fceebc05b96dcf93168dd6d766f3ddfc22c62606">FA_SKIPCOLOR</a>:  <span class="keywordflow">return</span> <span class="stringliteral">"skipcolor"</span>;
<a name="l02485"></a>02485     <span class="keywordflow">default</span>:            <span class="keywordflow">return</span> <span class="stringliteral">"???"</span>;
<a name="l02486"></a>02486     }
<a name="l02487"></a>02487     <span class="comment">/*@notreached@*/</span>
<a name="l02488"></a>02488 }
<a name="l02489"></a>02489 
<a name="l02490"></a><a class="code" href="fsm_8h.html#ea577beecc156fa488c02fdca4c6a592">02490</a> <span class="comment">/*@observer@*/</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keyword">const</span> <a class="code" href="fsm_8c.html#ea577beecc156fa488c02fdca4c6a592">fileStageString</a>(<a class="code" href="fsm_8h.html#871643d0529d0b4be7d5286074388f09">fileStage</a> a) {
<a name="l02491"></a>02491     <span class="keywordflow">switch</span>(a) {
<a name="l02492"></a>02492     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941aeca4c4cd9f6ffa7812027916eedd84">FSM_UNKNOWN</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"unknown"</span>;
<a name="l02493"></a>02493 
<a name="l02494"></a>02494     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729497df36b4bd21fd436956368365ef4828">FSM_PKGINSTALL</a>:<span class="keywordflow">return</span> <span class="stringliteral">"INSTALL"</span>;
<a name="l02495"></a>02495     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d9fc895da99bddbc74811ae0df74d0d3">FSM_PKGERASE</a>:  <span class="keywordflow">return</span> <span class="stringliteral">"ERASE"</span>;
<a name="l02496"></a>02496     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294fdfc922f435909fc94c6f8a63a6aea2c">FSM_PKGBUILD</a>:  <span class="keywordflow">return</span> <span class="stringliteral">"BUILD"</span>;
<a name="l02497"></a>02497     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729407950152b6bb79e018cd854d3b1b825b">FSM_PKGCOMMIT</a>: <span class="keywordflow">return</span> <span class="stringliteral">"COMMIT"</span>;
<a name="l02498"></a>02498     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729492c99844852ec60771a15799095a1adb">FSM_PKGUNDO</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"UNDO"</span>;
<a name="l02499"></a>02499 
<a name="l02500"></a>02500     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294658be9c2849ae06a71d0f67f21c30701">FSM_CREATE</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"create"</span>;
<a name="l02501"></a>02501     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729412dc9800764a07e5a3b752347f4ed560">FSM_INIT</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"init"</span>;
<a name="l02502"></a>02502     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729411b351d3298cc25fd7e9352d1173c2f2">FSM_MAP</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"map"</span>;
<a name="l02503"></a>02503     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294a0c64284058f7fb215bceb9aa505cdc8">FSM_MKDIRS</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"mkdirs"</span>;
<a name="l02504"></a>02504     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672947487406b4972c61102f6ca83772dc5d3">FSM_RMDIRS</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"rmdirs"</span>;
<a name="l02505"></a>02505     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672944e3e49daafdfcb3c830d9dc8a57c070f">FSM_PRE</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"pre"</span>;
<a name="l02506"></a>02506     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729475452f4058e4a420775b0377c842068b">FSM_PROCESS</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"process"</span>;
<a name="l02507"></a>02507     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ec8db92df2fb5ca8ec861d60f769eadc">FSM_POST</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"post"</span>;
<a name="l02508"></a>02508     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941d90590813de5f784c6b4408e03d6a3b">FSM_MKLINKS</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"mklinks"</span>;
<a name="l02509"></a>02509     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948efc4f3fd8dab222270ff37c99d6b9ed">FSM_NOTIFY</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"notify"</span>;
<a name="l02510"></a>02510     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729449f8b806c12262b1025d9a9da927f46d">FSM_UNDO</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"undo"</span>;
<a name="l02511"></a>02511     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729443abe3a4cef56ad3619b3dd8a652f6fd">FSM_FINI</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"fini"</span>;
<a name="l02512"></a>02512     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294af617ad9cf372ea738fd4c126980f3e9">FSM_COMMIT</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"commit"</span>;
<a name="l02513"></a>02513     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672944ade9682e02bb1050772b89001ef877c">FSM_DESTROY</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"destroy"</span>;
<a name="l02514"></a>02514     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294f2e95eb2a88fffbc49ddaeb4faabea02">FSM_VERIFY</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"verify"</span>;
<a name="l02515"></a>02515 
<a name="l02516"></a>02516     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294636bf8b7fe268875e575e2886666cc60">FSM_UNLINK</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"Unlink"</span>;
<a name="l02517"></a>02517     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672941e41a1057fee1d0afda412c700941ed8">FSM_RENAME</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"Rename"</span>;
<a name="l02518"></a>02518     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729440ebe13d6dc6c738503ca54666f17e1c">FSM_MKDIR</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"Mkdir"</span>;
<a name="l02519"></a>02519     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948262dd498388759224bc5f8d79bd2335">FSM_RMDIR</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"rmdir"</span>;
<a name="l02520"></a>02520     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294524170fb8bc99461d41fc6e142dc0887">FSM_LSETFCON</a>:  <span class="keywordflow">return</span> <span class="stringliteral">"lsetfcon"</span>;
<a name="l02521"></a>02521     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729471b8027acb5ccda243d736ad4f41debd">FSM_CHOWN</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"chown"</span>;
<a name="l02522"></a>02522     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b93ff930f61289ca8b8e00ec5795c0fe">FSM_LCHOWN</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"lchown"</span>;
<a name="l02523"></a>02523     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294193d903826482d75cdbf494844514fa7">FSM_CHMOD</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"chmod"</span>;
<a name="l02524"></a>02524     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294d1b3dd9376bd7134f6f797d79cc1c69c">FSM_UTIME</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"utime"</span>;
<a name="l02525"></a>02525     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729438b7cc3fcb7a857fc4317301a63061ea">FSM_SYMLINK</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"symlink"</span>;
<a name="l02526"></a>02526     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294440705fd05b53725958fec17a2fa9c0e">FSM_LINK</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"Link"</span>;
<a name="l02527"></a>02527     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729452b5a5dafb5dc98e8560dd1976547685">FSM_MKFIFO</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"mkfifo"</span>;
<a name="l02528"></a>02528     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294db3ad9bff825d794fac75f4bb0bba6ad">FSM_MKNOD</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"mknod"</span>;
<a name="l02529"></a>02529     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672946277dc678cf1e161be9f0ad332098898">FSM_LSTAT</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"Lstat"</span>;
<a name="l02530"></a>02530     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729491aaf77994d76d053f893def39b9da63">FSM_STAT</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"Stat"</span>;
<a name="l02531"></a>02531     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294654b792bc388bafe51e94dbb1415bfe5">FSM_READLINK</a>:  <span class="keywordflow">return</span> <span class="stringliteral">"Readlink"</span>;
<a name="l02532"></a>02532     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294460ed165364c157d2e56eb43ab535069">FSM_CHROOT</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"chroot"</span>;
<a name="l02533"></a>02533 
<a name="l02534"></a>02534     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672949b0139eef6e6af3fec129451cc463f95">FSM_NEXT</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"next"</span>;
<a name="l02535"></a>02535     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ee01dadc03702ba120b7ec20aa41c791">FSM_EAT</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"eat"</span>;
<a name="l02536"></a>02536     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294251fe6c8826b2b6a2ea2741c7ed97bf9">FSM_POS</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"pos"</span>;
<a name="l02537"></a>02537     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294468b8cd15c8370981450c237ca2ab28c">FSM_PAD</a>:       <span class="keywordflow">return</span> <span class="stringliteral">"pad"</span>;
<a name="l02538"></a>02538     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672948271cab3ced373e42d7158b7d3322995">FSM_TRAILER</a>:   <span class="keywordflow">return</span> <span class="stringliteral">"trailer"</span>;
<a name="l02539"></a>02539     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294ae5a45979a13331c02f59cff40d9b473">FSM_HREAD</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"hread"</span>;
<a name="l02540"></a>02540     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294509d07d14f3ce1a4b22381ca6e5e7cb9">FSM_HWRITE</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"hwrite"</span>;
<a name="l02541"></a>02541     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294aaad57b40c4c929dc9b6b21dd08d2094">FSM_DREAD</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"Fread"</span>;
<a name="l02542"></a>02542     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e672945ac5b391f53c4858db2077e1a3d2ba62">FSM_DWRITE</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"Fwrite"</span>;
<a name="l02543"></a>02543 
<a name="l02544"></a>02544     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294274ca5be69e660b97cb75e8c557e2b4e">FSM_ROPEN</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"Fopen"</span>;
<a name="l02545"></a>02545     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729470267988dbe27d56ae4b561333db1df5">FSM_READ</a>:      <span class="keywordflow">return</span> <span class="stringliteral">"Fread"</span>;
<a name="l02546"></a>02546     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729400a088b8822d7147f6016c8bbefdaa0c">FSM_RCLOSE</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"Fclose"</span>;
<a name="l02547"></a>02547     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e6729415867d9a592522dcdf1e949ff96b584d">FSM_WOPEN</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"Fopen"</span>;
<a name="l02548"></a>02548     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294a25d13047b5a7d78b1505e62c621176d">FSM_WRITE</a>:     <span class="keywordflow">return</span> <span class="stringliteral">"Fwrite"</span>;
<a name="l02549"></a>02549     <span class="keywordflow">case</span> <a class="code" href="fsm_8h.html#c1f877d40f128ca2f98c2540e8e67294b045cdb07ec8a86b21c4604d6361c957">FSM_WCLOSE</a>:    <span class="keywordflow">return</span> <span class="stringliteral">"Fclose"</span>;
<a name="l02550"></a>02550 
<a name="l02551"></a>02551     <span class="keywordflow">default</span>:            <span class="keywordflow">return</span> <span class="stringliteral">"???"</span>;
<a name="l02552"></a>02552     }
<a name="l02553"></a>02553     <span class="comment">/*@noteached@*/</span>
<a name="l02554"></a>02554 }
</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>