Sophie

Sophie

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

rpm-devel-4.0.4-19mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>build/pack.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.17 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>build/pack.c</h1><a href="pack_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 
00006 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span>
00007 
00008 <span class="preprocessor">#include &lt;<a class="code" href="rpmio__internal_8h.html">rpmio_internal.h</a>&gt;</span>
00009 <span class="preprocessor">#include &lt;<a class="code" href="rpmbuild_8h.html">rpmbuild.h</a>&gt;</span>
00010 <span class="preprocessor">#include "<a class="code" href="buildio_8h.html">buildio.h</a>"</span>
00011 
00012 <span class="preprocessor">#include "<a class="code" href="misc_8h.html">misc.h</a>"</span>
00013 <span class="preprocessor">#include "<a class="code" href="signature_8h.html">signature.h</a>"</span>
00014 <span class="preprocessor">#include "<a class="code" href="rpmlead_8h.html">rpmlead.h</a>"</span>
00015 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span>
00016 
00017 <span class="comment">/*@-redecl@*/</span>
<a name="l00018"></a><a class="code" href="group__rpmcli.html#a2">00018</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__rpmcli.html#a2">_noDirTokens</a>;
00019 <span class="comment">/*@=redecl@*/</span>
00020 
00021 <span class="comment">/*@access StringBuf @*/</span> <span class="comment">/* compared with NULL */</span>
00022 <span class="comment">/*@access TFI_t @*/</span>     <span class="comment">/* compared with NULL */</span>
00023 <span class="comment">/*@access Header @*/</span>    <span class="comment">/* compared with NULL */</span>
00024 <span class="comment">/*@access FD_t @*/</span>      <span class="comment">/* compared with NULL */</span>
00025 <span class="comment">/*@access CSA_t @*/</span>
00026 
<a name="l00029"></a><a class="code" href="pack_8c.html#a6">00029</a> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a6">genSourceRpmName</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec)
00030         <span class="comment">/*@modifies spec-&gt;sourceRpmName @*/</span>
00031 {
00032     <span class="keywordflow">if</span> (spec-&gt;<a class="code" href="structSpecStruct.html#m1">sourceRpmName</a> == NULL) {
00033         <span class="keyword">const</span> <span class="keywordtype">char</span> *name, *version, *release;
00034         <span class="keywordtype">char</span> fileName[BUFSIZ];
00035 
00036         (void) <a class="code" href="group__header.html#a88">headerNVR</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a>-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, &amp;name, &amp;version, &amp;release);
00037         sprintf(fileName, <span class="stringliteral">"%s-%s-%s.%ssrc.rpm"</span>, name, version, release,
00038             spec-&gt;<a class="code" href="structSpecStruct.html#m27">noSource</a> ? <span class="stringliteral">"no"</span> : <span class="stringliteral">""</span>);
00039         spec-&gt;<a class="code" href="structSpecStruct.html#m1">sourceRpmName</a> = <a class="code" href="rpmmalloc_8c.html#a4">xstrdup</a>(fileName);
00040     }
00041 
00042     <span class="keywordflow">return</span> 0;
00043 }
00044 
<a name="l00048"></a><a class="code" href="pack_8c.html#a7">00048</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a7">cpio_doio</a>(<a class="code" href="struct__FD__s.html">FD_t</a> fdo, <span class="comment">/*@unused@*/</span> <a class="code" href="structheaderToken.html">Header</a> h, <a class="code" href="structcpioSourceArchive__s.html">CSA_t</a> csa,
00049                 <span class="keyword">const</span> <span class="keywordtype">char</span> * fmodeMacro)
00050         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00051 <span class="comment">                fileSystem@*/</span>
00052         <span class="comment">/*@modifies fdo, csa, rpmGlobalMacroContext, fileSystem @*/</span>
00053 {
00054     <span class="keyword">const</span> <span class="keywordtype">char</span> * rootDir = <span class="stringliteral">"/"</span>;
00055     <a class="code" href="structrpmdb__s.html">rpmdb</a> <a class="code" href="structrpmdb__s.html">rpmdb</a> = NULL;
00056     <a class="code" href="structrpmTransactionSet__s.html">rpmTransactionSet</a> ts = <a class="code" href="group__rpmtrans.html#a4">rpmtransCreateSet</a>(rpmdb, rootDir);
00057     <a class="code" href="structtransactionFileInfo__s.html">TFI_t</a> fi = csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m2">cpioList</a>;
00058     <span class="keyword">const</span> <span class="keywordtype">char</span> *failedFile = NULL;
00059     <a class="code" href="struct__FD__s.html">FD_t</a> cfd;
00060     <span class="keywordtype">int</span> rc, ec;
00061 
00062     {   <span class="keyword">const</span> <span class="keywordtype">char</span> *fmode = <a class="code" href="macro_8c.html#a50">rpmExpand</a>(fmodeMacro, NULL);
00063         <span class="keywordflow">if</span> (!(fmode &amp;&amp; fmode[0] == <span class="charliteral">'w'</span>))
00064             fmode = <a class="code" href="rpmmalloc_8c.html#a4">xstrdup</a>(<span class="stringliteral">"w9.gzdio"</span>);
00065         <span class="comment">/*@-nullpass@*/</span>
00066         (void) <a class="code" href="group__rpmio.html#a84">Fflush</a>(fdo);
00067         cfd = <a class="code" href="group__rpmio.html#a82">Fdopen</a>(<a class="code" href="rpmio_8c.html#a35">fdDup</a>(<a class="code" href="group__rpmio.html#a86">Fileno</a>(fdo)), fmode);
00068         <span class="comment">/*@=nullpass@*/</span>
00069         fmode = <a class="code" href="poptint_8h.html#a14">_free</a>(fmode);
00070     }
00071     <span class="keywordflow">if</span> (cfd == NULL)
00072         <span class="keywordflow">return</span> 1;
00073 
00074     rc = <a class="code" href="fsm_8c.html#a27">fsmSetup</a>(fi-&gt;<a class="code" href="structtransactionFileInfo__s.html#m49">fsm</a>, <a class="code" href="fsm_8h.html#a73a19">FSM_PKGBUILD</a>, ts, fi, cfd,
00075                 &amp;csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m0">cpioArchiveSize</a>, &amp;failedFile);
00076     (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(cfd);
00077     ec = <a class="code" href="fsm_8c.html#a28">fsmTeardown</a>(fi-&gt;<a class="code" href="structtransactionFileInfo__s.html#m49">fsm</a>);
00078     <span class="keywordflow">if</span> (!rc) rc = ec;
00079 
00080     <span class="keywordflow">if</span> (rc) {
00081         <span class="keywordflow">if</span> (failedFile)
00082             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a58">RPMERR_CPIO</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"create archive failed on file %s: %s\n"</span>),
00083                 failedFile, <a class="code" href="group__payload.html#a4">cpioStrerror</a>(rc));
00084         <span class="keywordflow">else</span>
00085             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a58">RPMERR_CPIO</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"create archive failed: %s\n"</span>),
00086                 <a class="code" href="group__payload.html#a4">cpioStrerror</a>(rc));
00087       rc = 1;
00088     }
00089 
00090     failedFile = <a class="code" href="poptint_8h.html#a14">_free</a>(failedFile);
00091     ts = <a class="code" href="group__rpmtrans.html#a8">rpmtransFree</a>(ts);
00092 
00093     <span class="keywordflow">return</span> rc;
00094 }
00095 
<a name="l00098"></a><a class="code" href="pack_8c.html#a8">00098</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a8">cpio_copy</a>(<a class="code" href="struct__FD__s.html">FD_t</a> fdo, <a class="code" href="structcpioSourceArchive__s.html">CSA_t</a> csa)
00099         <span class="comment">/*@globals fileSystem@*/</span>
00100         <span class="comment">/*@modifies fdo, csa, fileSystem @*/</span>
00101 {
00102     <span class="keywordtype">char</span> buf[BUFSIZ];
00103     size_t nb;
00104 
00105     <span class="keywordflow">while</span>((nb = <a class="code" href="group__rpmio.html#a77">Fread</a>(buf, <span class="keyword">sizeof</span>(buf[0]), <span class="keyword">sizeof</span>(buf), csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>)) &gt; 0) {
00106         <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a78">Fwrite</a>(buf, <span class="keyword">sizeof</span>(buf[0]), nb, fdo) != nb) {
00107             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a58">RPMERR_CPIO</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"cpio_copy write failed: %s\n"</span>),
00108                         <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fdo));
00109             <span class="keywordflow">return</span> 1;
00110         }
00111         csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m0">cpioArchiveSize</a> += nb;
00112     }
00113     <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a85">Ferror</a>(csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>)) {
00114         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a58">RPMERR_CPIO</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"cpio_copy read failed: %s\n"</span>),
00115                 <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>));
00116         <span class="keywordflow">return</span> 1;
00117     }
00118     <span class="keywordflow">return</span> 0;
00119 }
00120 
<a name="l00123"></a><a class="code" href="pack_8c.html#a9">00123</a> <span class="keyword">static</span> <span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span> <a class="code" href="structStringBufRec.html">StringBuf</a> <a class="code" href="pack_8c.html#a9">addFileToTagAux</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec,
00124                 <span class="keyword">const</span> <span class="keywordtype">char</span> * file, <span class="comment">/*@only@*/</span> <a class="code" href="structStringBufRec.html">StringBuf</a> sb)
00125         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00126 <span class="comment">                fileSystem@*/</span>
00127         <span class="comment">/*@modifies rpmGlobalMacroContext, fileSystem @*/</span>
00128 {
00129     <span class="keywordtype">char</span> buf[BUFSIZ];
00130     <span class="keyword">const</span> <span class="keywordtype">char</span> * fn = buf;
00131     FILE * f;
00132     <a class="code" href="struct__FD__s.html">FD_t</a> fd;
00133 
00134     <span class="comment">/* XXX use rpmGenPath(rootdir, "%{_buildir}/%{_buildsubdir}/", file) */</span>
00135     fn = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(<span class="stringliteral">"%{_builddir}/"</span>, spec-&gt;<a class="code" href="structSpecStruct.html#m3">buildSubdir</a>, <span class="stringliteral">"/"</span>, file, NULL);
00136 
00137     fd = <a class="code" href="group__rpmio.html#a83">Fopen</a>(fn, <span class="stringliteral">"r.ufdio"</span>);
00138     <span class="keywordflow">if</span> (fn != buf) fn = <a class="code" href="poptint_8h.html#a14">_free</a>(fn);
00139     <span class="keywordflow">if</span> (fd == NULL || <a class="code" href="group__rpmio.html#a85">Ferror</a>(fd)) {
00140         sb = <a class="code" href="stringbuf_8c.html#a4">freeStringBuf</a>(sb);
00141         <span class="keywordflow">return</span> NULL;
00142     }
00143     <span class="comment">/*@-type@*/</span> <span class="comment">/* FIX: cast? */</span>
00144     <span class="keywordflow">if</span> ((f = <a class="code" href="group__rpmio.html#a27">fdGetFp</a>(fd)) != NULL)
00145     <span class="comment">/*@=type@*/</span>
00146     <span class="keywordflow">while</span> (fgets(buf, <span class="keyword">sizeof</span>(buf), f)) {
00147         <span class="comment">/* XXX display fn in error msg */</span>
00148         <span class="keywordflow">if</span> (<a class="code" href="macro_8c.html#a42">expandMacros</a>(spec, spec-&gt;<a class="code" href="structSpecStruct.html#m30">macros</a>, buf, <span class="keyword">sizeof</span>(buf))) {
00149             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a60">RPMERR_BADSPEC</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"line: %s\n"</span>), buf);
00150             sb = <a class="code" href="stringbuf_8c.html#a4">freeStringBuf</a>(sb);
00151             <span class="keywordflow">break</span>;
00152         }
00153         <a class="code" href="stringbuf_8h.html#a0">appendStringBuf</a>(sb, buf);
00154     }
00155     (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(fd);
00156 
00157     <span class="keywordflow">return</span> sb;
00158 }
00159 
<a name="l00162"></a><a class="code" href="pack_8c.html#a10">00162</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a10">addFileToTag</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec, <span class="keyword">const</span> <span class="keywordtype">char</span> * file, <a class="code" href="structheaderToken.html">Header</a> h, <span class="keywordtype">int</span> tag)
00163         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00164 <span class="comment">                fileSystem@*/</span>
00165         <span class="comment">/*@modifies h, rpmGlobalMacroContext, fileSystem @*/</span>
00166 {
00167     <a class="code" href="rpmlib_8h.html#a69">HGE_t</a> hge = (HGE_t)headerGetEntryMinMemory;
00168     <a class="code" href="structStringBufRec.html">StringBuf</a> sb = <a class="code" href="stringbuf_8c.html#a3">newStringBuf</a>();
00169     <span class="keywordtype">char</span> *s;
00170 
00171     <span class="keywordflow">if</span> (hge(h, tag, NULL, (<span class="keywordtype">void</span> **)&amp;s, NULL)) {
00172         <a class="code" href="stringbuf_8h.html#a1">appendLineStringBuf</a>(sb, s);
00173         (void) <a class="code" href="group__header.html#a28">headerRemoveEntry</a>(h, tag);
00174     }
00175 
00176     <span class="keywordflow">if</span> ((sb = <a class="code" href="pack_8c.html#a9">addFileToTagAux</a>(spec, file, sb)) == NULL)
00177         <span class="keywordflow">return</span> 1;
00178     
00179     (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, tag, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, <a class="code" href="stringbuf_8c.html#a7">getStringBuf</a>(sb), 1);
00180 
00181     sb = <a class="code" href="stringbuf_8c.html#a4">freeStringBuf</a>(sb);
00182     <span class="keywordflow">return</span> 0;
00183 }
00184 
<a name="l00187"></a><a class="code" href="pack_8c.html#a11">00187</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a11">addFileToArrayTag</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec, <span class="keyword">const</span> <span class="keywordtype">char</span> *file, <a class="code" href="structheaderToken.html">Header</a> h, <span class="keywordtype">int</span> tag)
00188         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00189 <span class="comment">                fileSystem@*/</span>
00190         <span class="comment">/*@modifies h, rpmGlobalMacroContext, fileSystem @*/</span>
00191 {
00192     <a class="code" href="structStringBufRec.html">StringBuf</a> sb = <a class="code" href="stringbuf_8c.html#a3">newStringBuf</a>();
00193     <span class="keywordtype">char</span> *s;
00194 
00195     <span class="keywordflow">if</span> ((sb = <a class="code" href="pack_8c.html#a9">addFileToTagAux</a>(spec, file, sb)) == NULL)
00196         <span class="keywordflow">return</span> 1;
00197 
00198     s = <a class="code" href="stringbuf_8c.html#a7">getStringBuf</a>(sb);
00199     (void) <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(h, tag, <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>, &amp;s, 1);
00200 
00201     sb = <a class="code" href="stringbuf_8c.html#a4">freeStringBuf</a>(sb);
00202     <span class="keywordflow">return</span> 0;
00203 }
00204 
<a name="l00207"></a><a class="code" href="pack_8c.html#a12">00207</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a12">processScriptFiles</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec, <a class="code" href="structPackageStruct.html">Package</a> pkg)
00208         <span class="comment">/*@globals rpmGlobalMacroContext,</span>
00209 <span class="comment">                fileSystem@*/</span>
00210         <span class="comment">/*@modifies pkg-&gt;header, rpmGlobalMacroContext, fileSystem @*/</span>
00211 {
00212     <span class="keyword">struct </span><a class="code" href="structTriggerFileEntry.html">TriggerFileEntry</a> *p;
00213     
00214     <span class="keywordflow">if</span> (pkg-&gt;<a class="code" href="structPackageStruct.html#m5">preInFile</a>) {
00215         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a10">addFileToTag</a>(spec, pkg-&gt;<a class="code" href="structPackageStruct.html#m5">preInFile</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a136">RPMTAG_PREIN</a>)) {
00216             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,
00217                      <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open PreIn file: %s\n"</span>), pkg-&gt;<a class="code" href="structPackageStruct.html#m5">preInFile</a>);
00218             <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00219         }
00220     }
00221     <span class="keywordflow">if</span> (pkg-&gt;<a class="code" href="structPackageStruct.html#m7">preUnFile</a>) {
00222         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a10">addFileToTag</a>(spec, pkg-&gt;<a class="code" href="structPackageStruct.html#m7">preUnFile</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a138">RPMTAG_PREUN</a>)) {
00223             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,
00224                      <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open PreUn file: %s\n"</span>), pkg-&gt;<a class="code" href="structPackageStruct.html#m7">preUnFile</a>);
00225             <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00226         }
00227     }
00228     <span class="keywordflow">if</span> (pkg-&gt;<a class="code" href="structPackageStruct.html#m6">postInFile</a>) {
00229         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a10">addFileToTag</a>(spec, pkg-&gt;<a class="code" href="structPackageStruct.html#m6">postInFile</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a137">RPMTAG_POSTIN</a>)) {
00230             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,
00231                      <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open PostIn file: %s\n"</span>), pkg-&gt;<a class="code" href="structPackageStruct.html#m6">postInFile</a>);
00232             <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00233         }
00234     }
00235     <span class="keywordflow">if</span> (pkg-&gt;<a class="code" href="structPackageStruct.html#m8">postUnFile</a>) {
00236         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a10">addFileToTag</a>(spec, pkg-&gt;<a class="code" href="structPackageStruct.html#m8">postUnFile</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a139">RPMTAG_POSTUN</a>)) {
00237             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,
00238                      <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open PostUn file: %s\n"</span>), pkg-&gt;<a class="code" href="structPackageStruct.html#m8">postUnFile</a>);
00239             <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00240         }
00241     }
00242     <span class="keywordflow">if</span> (pkg-&gt;<a class="code" href="structPackageStruct.html#m9">verifyFile</a>) {
00243         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a10">addFileToTag</a>(spec, pkg-&gt;<a class="code" href="structPackageStruct.html#m9">verifyFile</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>,
00244                          <a class="code" href="rpmlib_8h.html#a494a183">RPMTAG_VERIFYSCRIPT</a>)) {
00245             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,
00246                      <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open VerifyScript file: %s\n"</span>), pkg-&gt;<a class="code" href="structPackageStruct.html#m9">verifyFile</a>);
00247             <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00248         }
00249     }
00250 
00251     <span class="keywordflow">for</span> (p = pkg-&gt;<a class="code" href="structPackageStruct.html#m11">triggerFiles</a>; p != NULL; p = p-&gt;<a class="code" href="structTriggerFileEntry.html#m4">next</a>) {
00252         (void) <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a196">RPMTAG_TRIGGERSCRIPTPROG</a>,
00253                                <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>, &amp;(p-&gt;<a class="code" href="structTriggerFileEntry.html#m3">prog</a>), 1);
00254         <span class="keywordflow">if</span> (p-&gt;<a class="code" href="structTriggerFileEntry.html#m2">script</a>) {
00255             (void) <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a178">RPMTAG_TRIGGERSCRIPTS</a>,
00256                                    <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>, &amp;(p-&gt;<a class="code" href="structTriggerFileEntry.html#m2">script</a>), 1);
00257         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p-&gt;<a class="code" href="structTriggerFileEntry.html#m1">fileName</a>) {
00258             <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a11">addFileToArrayTag</a>(spec, p-&gt;<a class="code" href="structTriggerFileEntry.html#m1">fileName</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>,
00259                                   <a class="code" href="rpmlib_8h.html#a494a178">RPMTAG_TRIGGERSCRIPTS</a>)) {
00260                 <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,
00261                          <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open Trigger script file: %s\n"</span>),
00262                          p-&gt;<a class="code" href="structTriggerFileEntry.html#m1">fileName</a>);
00263                 <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00264             }
00265         } <span class="keywordflow">else</span> {
00266             <span class="comment">/* This is dumb.  When the header supports NULL string */</span>
00267             <span class="comment">/* this will go away.                                  */</span>
00268             <span class="keywordtype">char</span> *bull = <span class="stringliteral">""</span>;
00269             (void) <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a178">RPMTAG_TRIGGERSCRIPTS</a>,
00270                                    <a class="code" href="group__header.html#a93a73">RPM_STRING_ARRAY_TYPE</a>, &amp;bull, 1);
00271         }
00272     }
00273 
00274     <span class="keywordflow">return</span> 0;
00275 }
00276 
<a name="l00277"></a><a class="code" href="pack_8c.html#a13">00277</a> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a13">readRPM</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fileName, <a class="code" href="structSpecStruct.html">Spec</a> *specp, <span class="keyword">struct</span> <a class="code" href="structrpmlead.html">rpmlead</a> *lead,
00278                 <a class="code" href="structheaderToken.html">Header</a> *sigs, <a class="code" href="structcpioSourceArchive__s.html">CSA_t</a> csa)
00279 {
00280     <a class="code" href="struct__FD__s.html">FD_t</a> fdi;
00281     <a class="code" href="structSpecStruct.html">Spec</a> spec;
00282     <a class="code" href="rpmlib_8h.html#a43">rpmRC</a> rc;
00283 
00284     fdi = (fileName != NULL)
00285         ? <a class="code" href="group__rpmio.html#a83">Fopen</a>(fileName, <span class="stringliteral">"r.ufdio"</span>)
00286         : <a class="code" href="rpmio_8c.html#a35">fdDup</a>(STDIN_FILENO);
00287 
00288     <span class="keywordflow">if</span> (fdi == NULL || <a class="code" href="group__rpmio.html#a85">Ferror</a>(fdi)) {
00289         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"readRPM: open %s: %s\n"</span>),
00290                 (fileName ? fileName : <span class="stringliteral">"&lt;stdin&gt;"</span>),
00291                 <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fdi));
00292         <span class="keywordflow">if</span> (fdi) (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(fdi);
00293         <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>;
00294     }
00295 
00296     <span class="comment">/* Get copy of lead */</span>
00297     <span class="comment">/*@-sizeoftype@*/</span>
00298     <span class="keywordflow">if</span> ((rc = <a class="code" href="group__rpmio.html#a77">Fread</a>(lead, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>), <span class="keyword">sizeof</span>(*lead), fdi)) != <span class="keyword">sizeof</span>(*lead)) {
00299         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"readRPM: read %s: %s\n"</span>),
00300                 (fileName ? fileName : <span class="stringliteral">"&lt;stdin&gt;"</span>),
00301                 <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fdi));
00302         <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>;
00303     }
00304     <span class="comment">/*@=sizeoftype@*/</span>
00305 
00306     <span class="comment">/* XXX FIXME: EPIPE on &lt;stdin&gt; */</span>
00307     <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a79">Fseek</a>(fdi, 0, <a class="code" href="system_8h.html#a4">SEEK_SET</a>) == -1) {
00308         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a82">RPMERR_FSEEK</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"%s: Fseek failed: %s\n"</span>),
00309                         (fileName ? fileName : <span class="stringliteral">"&lt;stdin&gt;"</span>), <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fdi));
00310         <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a82">RPMERR_FSEEK</a>;
00311     }
00312 
00313     <span class="comment">/* Reallocate build data structures */</span>
00314     spec = <a class="code" href="spec_8c.html#a5">newSpec</a>();
00315     spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a> = <a class="code" href="group__rpmbuild.html#a9">newPackage</a>(spec);
00316 
00317     <span class="comment">/* XXX the header just allocated will be allocated again */</span>
00318     spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a>-&gt;<a class="code" href="structPackageStruct.html#m0">header</a> = <a class="code" href="group__header.html#a16">headerFree</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a>-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>);
00319 
00320    <span class="comment">/* Read the rpm lead, signatures, and header */</span>
00321     rc = <a class="code" href="package_8c.html#a4">rpmReadPackageInfo</a>(fdi, sigs, &amp;spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a>-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>);
00322     <span class="keywordflow">switch</span> (rc) {
00323     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a493a90">RPMRC_BADMAGIC</a>:
00324         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"readRPM: %s is not an RPM package\n"</span>),
00325                 (fileName ? fileName : <span class="stringliteral">"&lt;stdin&gt;"</span>));
00326         <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>;
00327     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a493a89">RPMRC_OK</a>:
00328         <span class="keywordflow">break</span>;
00329     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a493a91">RPMRC_FAIL</a>:
00330     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a493a92">RPMRC_BADSIZE</a>:
00331     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a493a93">RPMRC_SHORTREAD</a>:
00332     <span class="keywordflow">default</span>:
00333         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"readRPM: reading header from %s\n"</span>),
00334                 (fileName ? fileName : <span class="stringliteral">"&lt;stdin&gt;"</span>));
00335         <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a23">RPMERR_BADMAGIC</a>;
00336         <span class="comment">/*@notreached@*/</span> <span class="keywordflow">break</span>;
00337     }
00338 
00339     <span class="comment">/*@-branchstate@*/</span>
00340     <span class="keywordflow">if</span> (specp)
00341         *specp = spec;
00342     <span class="keywordflow">else</span>
00343         spec = <a class="code" href="group__rpmbuild.html#a17">freeSpec</a>(spec);
00344     <span class="comment">/*@=branchstate@*/</span>
00345 
00346     <span class="keywordflow">if</span> (csa != NULL)
00347         csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a> = fdi;
00348     <span class="keywordflow">else</span>
00349         (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(fdi);
00350 
00351     <span class="keywordflow">return</span> 0;
00352 }
00353 
00354 <span class="comment">/*@unchecked@*/</span>
<a name="l00355"></a><a class="code" href="pack_8c.html#a3">00355</a> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="pack_8c.html#a3">header_magic</a>[8] = {
00356         0x8e, 0xad, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00
00357 };
00358 
<a name="l00359"></a><a class="code" href="pack_8c.html#a0">00359</a> <span class="preprocessor">#define RPMPKGVERSION_MIN       30004</span>
<a name="l00360"></a><a class="code" href="pack_8c.html#a1">00360</a> <span class="preprocessor"></span><span class="preprocessor">#define RPMPKGVERSION_MAX       40003</span>
00361 <span class="preprocessor"></span><span class="comment">/*@unchecked@*/</span>
<a name="l00362"></a><a class="code" href="pack_8c.html#a4">00362</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a4">rpmpkg_version</a> = -1;
00363 
<a name="l00364"></a><a class="code" href="pack_8c.html#a14">00364</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a14">rpmLeadVersion</a>(<span class="keywordtype">void</span>)
00365         <span class="comment">/*@globals rpmpkg_version, rpmGlobalMacroContext @*/</span>
00366         <span class="comment">/*@modifies rpmpkg_version, rpmGlobalMacroContext @*/</span>
00367 {
00368     <span class="keywordtype">int</span> rpmlead_version;
00369 
00370     <span class="comment">/* Intitialize packaging version from macro configuration. */</span>
00371     <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a4">rpmpkg_version</a> &lt; 0) {
00372         <a class="code" href="pack_8c.html#a4">rpmpkg_version</a> = <a class="code" href="macro_8c.html#a51">rpmExpandNumeric</a>(<span class="stringliteral">"%{_package_version}"</span>);
00373         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a4">rpmpkg_version</a> &lt; <a class="code" href="pack_8c.html#a0">RPMPKGVERSION_MIN</a>)
00374             <a class="code" href="pack_8c.html#a4">rpmpkg_version</a> = <a class="code" href="pack_8c.html#a0">RPMPKGVERSION_MIN</a>;
00375         <span class="keywordflow">if</span> (<a class="code" href="pack_8c.html#a4">rpmpkg_version</a> &gt; <a class="code" href="pack_8c.html#a1">RPMPKGVERSION_MAX</a>)
00376             <a class="code" href="pack_8c.html#a4">rpmpkg_version</a> = <a class="code" href="pack_8c.html#a1">RPMPKGVERSION_MAX</a>;
00377     }
00378 
00379     rpmlead_version = <a class="code" href="pack_8c.html#a4">rpmpkg_version</a> / 10000;
00380     <span class="keywordflow">if</span> (<a class="code" href="group__rpmcli.html#a2">_noDirTokens</a> || (rpmlead_version &lt; 3 || rpmlead_version &gt; 4))
00381         rpmlead_version = 3;
00382     <span class="keywordflow">return</span> rpmlead_version;
00383 }
00384 
<a name="l00385"></a><a class="code" href="pack_8c.html#a15">00385</a> <span class="keywordtype">int</span> <a class="code" href="pack_8c.html#a15">writeRPM</a>(<a class="code" href="structheaderToken.html">Header</a> *hdrp, <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName, <span class="keywordtype">int</span> type,
00386                     <a class="code" href="structcpioSourceArchive__s.html">CSA_t</a> csa, <span class="keywordtype">char</span> *passPhrase, <span class="keyword">const</span> <span class="keywordtype">char</span> **cookie)
00387 {
00388     <a class="code" href="struct__FD__s.html">FD_t</a> fd = NULL;
00389     <a class="code" href="struct__FD__s.html">FD_t</a> ifd = NULL;
00390     <span class="keywordtype">int</span> count, sigtype;
00391     <span class="keyword">const</span> <span class="keywordtype">char</span> * sigtarget;
00392     <span class="keyword">const</span> <span class="keywordtype">char</span> * rpmio_flags = NULL;
00393     <span class="keyword">const</span> <span class="keywordtype">char</span> * sha1 = NULL;
00394     <span class="keywordtype">char</span> *s;
00395     <span class="keywordtype">char</span> buf[BUFSIZ];
00396     <a class="code" href="structheaderToken.html">Header</a> h;
00397     <a class="code" href="structheaderToken.html">Header</a> sig = NULL;
00398     <span class="keywordtype">int</span> rc = 0;
00399 
00400     <span class="comment">/* Transfer header reference form *hdrp to h. */</span>
00401     h = <a class="code" href="group__header.html#a14">headerLink</a>(*hdrp);
00402     *hdrp = <a class="code" href="group__header.html#a16">headerFree</a>(*hdrp);
00403 
00404     <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a86">Fileno</a>(csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) &lt; 0) {
00405         csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m0">cpioArchiveSize</a> = 0;
00406         <span class="comment">/* Add a bogus archive size to the Header */</span>
00407         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, <a class="code" href="rpmlib_8h.html#a494a159">RPMTAG_ARCHIVESIZE</a>, <a class="code" href="group__header.html#a93a70">RPM_INT32_TYPE</a>,
00408                 &amp;csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m0">cpioArchiveSize</a>, 1);
00409     }
00410 
00411     <span class="comment">/* Binary packages now have explicit Provides: name = version-release. */</span>
00412     <span class="keywordflow">if</span> (type == <a class="code" href="rpmlib_8h.html#a35">RPMLEAD_BINARY</a>)
00413         <a class="code" href="lib_2misc_8c.html#a21">providePackageNVR</a>(h);
00414 
00415     <span class="comment">/* Save payload information */</span>
00416     <span class="comment">/*@-branchstate@*/</span>
00417     <span class="keywordflow">switch</span>(type) {
00418     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a36">RPMLEAD_SOURCE</a>:
00419         rpmio_flags = <a class="code" href="macro_8c.html#a50">rpmExpand</a>(<span class="stringliteral">"%{?_source_payload}"</span>, NULL);
00420         <span class="keywordflow">break</span>;
00421     <span class="keywordflow">case</span> <a class="code" href="rpmlib_8h.html#a35">RPMLEAD_BINARY</a>:
00422         rpmio_flags = <a class="code" href="macro_8c.html#a50">rpmExpand</a>(<span class="stringliteral">"%{?_binary_payload}"</span>, NULL);
00423         <span class="keywordflow">break</span>;
00424     }
00425     <span class="comment">/*@=branchstate@*/</span>
00426     <span class="keywordflow">if</span> (!(rpmio_flags &amp;&amp; *rpmio_flags)) {
00427         rpmio_flags = <a class="code" href="poptint_8h.html#a14">_free</a>(rpmio_flags);
00428         rpmio_flags = <a class="code" href="rpmmalloc_8c.html#a4">xstrdup</a>(<span class="stringliteral">"w9.gzdio"</span>);
00429     }
00430     s = strchr(rpmio_flags, <span class="charliteral">'.'</span>);
00431     <span class="keywordflow">if</span> (s) {
00432         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, <a class="code" href="rpmlib_8h.html#a494a228">RPMTAG_PAYLOADFORMAT</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, <span class="stringliteral">"cpio"</span>, 1);
00433         <span class="keywordflow">if</span> (s[1] == <span class="charliteral">'g'</span> &amp;&amp; s[2] == <span class="charliteral">'z'</span>)
00434             (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, <a class="code" href="rpmlib_8h.html#a494a229">RPMTAG_PAYLOADCOMPRESSOR</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>,
00435                 <span class="stringliteral">"gzip"</span>, 1);
00436         <span class="keywordflow">if</span> (s[1] == <span class="charliteral">'b'</span> &amp;&amp; s[2] == <span class="charliteral">'z'</span>) {
00437             (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, <a class="code" href="rpmlib_8h.html#a494a229">RPMTAG_PAYLOADCOMPRESSOR</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>,
00438                 <span class="stringliteral">"bzip2"</span>, 1);
00439             <span class="comment">/* Add prereq on rpm version that understands bzip2 payloads */</span>
00440             (void) <a class="code" href="group__rpmbuild.html#a43">rpmlibNeedsFeature</a>(h, <span class="stringliteral">"PayloadIsBzip2"</span>, <span class="stringliteral">"3.0.5-1"</span>);
00441         }
00442         strcpy(buf, rpmio_flags);
00443         buf[s - rpmio_flags] = <span class="charliteral">'\0'</span>;
00444         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, <a class="code" href="rpmlib_8h.html#a494a230">RPMTAG_PAYLOADFLAGS</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, buf+1, 1);
00445     }
00446 
00447     <span class="comment">/* Create and add the cookie */</span>
00448     <span class="keywordflow">if</span> (cookie) {
00449         sprintf(buf, <span class="stringliteral">"%s %d"</span>, <a class="code" href="group__rpmbuild.html#a19">buildHost</a>(), (<span class="keywordtype">int</span>) (*<a class="code" href="group__rpmbuild.html#a20">getBuildTime</a>()));
00450         *cookie = <a class="code" href="rpmmalloc_8c.html#a4">xstrdup</a>(buf);
00451         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(h, <a class="code" href="rpmlib_8h.html#a494a198">RPMTAG_COOKIE</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, *cookie, 1);
00452     }
00453     
00454     <span class="comment">/* Reallocate the header into one contiguous region. */</span>
00455     h = <a class="code" href="group__header.html#a30">headerReload</a>(h, <a class="code" href="rpmlib_8h.html#a494a96">RPMTAG_HEADERIMMUTABLE</a>);
00456     <span class="keywordflow">if</span> (h == NULL) {    <span class="comment">/* XXX can't happen */</span>
00457         rc = <a class="code" href="rpmerr_8h.html#a91a50">RPMERR_RELOAD</a>;
00458         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a50">RPMERR_RELOAD</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to create immutable header region.\n"</span>));
00459         <span class="keywordflow">goto</span> exit;
00460     }
00461     <span class="comment">/* Re-reference reallocated header. */</span>
00462     *hdrp = <a class="code" href="group__header.html#a14">headerLink</a>(h);
00463 
00464     <span class="comment">/*</span>
00465 <span class="comment">     * Write the header+archive into a temp file so that the size of</span>
00466 <span class="comment">     * archive (after compression) can be added to the header.</span>
00467 <span class="comment">     */</span>
00468     <span class="keywordflow">if</span> (<a class="code" href="lib_2misc_8c.html#a8">makeTempFile</a>(NULL, &amp;sigtarget, &amp;fd)) {
00469         rc = <a class="code" href="rpmerr_8h.html#a91a38">RPMERR_CREATE</a>;
00470         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a38">RPMERR_CREATE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to open temp file.\n"</span>));
00471         <span class="keywordflow">goto</span> exit;
00472     }
00473 
00474     <span class="keywordflow">if</span> (<a class="code" href="group__header.html#a33">headerWrite</a>(fd, h, <a class="code" href="group__header.html#a92a65">HEADER_MAGIC_YES</a>)) {
00475         rc = <a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>;
00476         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to write temp header\n"</span>));
00477     } <span class="keywordflow">else</span> { <span class="comment">/* Write the archive and get the size */</span>
00478         <span class="keywordflow">if</span> (csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m2">cpioList</a> != NULL) {
00479             rc = <a class="code" href="pack_8c.html#a7">cpio_doio</a>(fd, h, csa, rpmio_flags);
00480         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a86">Fileno</a>(csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) &gt;= 0) {
00481             rc = <a class="code" href="pack_8c.html#a8">cpio_copy</a>(fd, csa);
00482         } <span class="keywordflow">else</span> {
00483             rc = <a class="code" href="rpmerr_8h.html#a91a51">RPMERR_BADARG</a>;
00484             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a51">RPMERR_BADARG</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Bad CSA data\n"</span>));
00485         }
00486     }
00487     rpmio_flags = <a class="code" href="poptint_8h.html#a14">_free</a>(rpmio_flags);
00488 
00489     <span class="keywordflow">if</span> (rc)
00490         <span class="keywordflow">goto</span> exit;
00491 
00492     <span class="comment">/*</span>
00493 <span class="comment">     * Set the actual archive size, and rewrite the header.</span>
00494 <span class="comment">     * This used to be done using headerModifyEntry(), but now that headers</span>
00495 <span class="comment">     * have regions, the value is scribbled directly into the header data</span>
00496 <span class="comment">     * area. Some new scheme for adding the final archive size will have</span>
00497 <span class="comment">     * to be devised if headerGetEntryMinMemory() ever changes to return</span>
00498 <span class="comment">     * a pointer to memory not in the region, probably by appending</span>
00499 <span class="comment">     * the archive size to the header region rather than including the</span>
00500 <span class="comment">     * archive size within the header region.</span>
00501 <span class="comment">     */</span>
00502     <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a86">Fileno</a>(csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) &lt; 0) {
00503         <a class="code" href="rpmlib_8h.html#a69">HGE_t</a> hge = (HGE_t)headerGetEntryMinMemory;
00504         <a class="code" href="header_8h.html#a9">int_32</a> * archiveSize;
00505         <span class="keywordflow">if</span> (hge(h, <a class="code" href="rpmlib_8h.html#a494a159">RPMTAG_ARCHIVESIZE</a>, NULL, (<span class="keywordtype">void</span> *)&amp;archiveSize, NULL))
00506             *archiveSize = csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m0">cpioArchiveSize</a>;
00507     }
00508 
00509     (void) <a class="code" href="group__rpmio.html#a84">Fflush</a>(fd);
00510     <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a79">Fseek</a>(fd, 0L, <a class="code" href="system_8h.html#a4">SEEK_SET</a>) == -1) {
00511         rc = <a class="code" href="rpmerr_8h.html#a91a82">RPMERR_FSEEK</a>;
00512         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a82">RPMERR_FSEEK</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"%s: Fseek failed: %s\n"</span>),
00513                         sigtarget, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fd));
00514     }
00515 
00516     <a class="code" href="group__rpmio.html#a43">fdInitDigest</a>(fd, <a class="code" href="rpmpgp_8h.html#a174a96">PGPHASHALGO_SHA1</a>, 0);
00517     <span class="keywordflow">if</span> (<a class="code" href="group__header.html#a33">headerWrite</a>(fd, h, <a class="code" href="group__header.html#a92a65">HEADER_MAGIC_YES</a>)) {
00518         rc = <a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>;
00519         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to write final header\n"</span>));
00520     }
00521     (void) <a class="code" href="group__rpmio.html#a84">Fflush</a>(fd);
00522     <a class="code" href="group__rpmio.html#a45">fdFiniDigest</a>(fd, <a class="code" href="rpmpgp_8h.html#a174a96">PGPHASHALGO_SHA1</a>, (<span class="keywordtype">void</span> **)&amp;sha1, NULL, 1);
00523 
00524     (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(fd);
00525     fd = NULL;
00526     (void) <a class="code" href="rpmrpc_8c.html#a27">Unlink</a>(fileName);
00527 
00528     <span class="keywordflow">if</span> (rc)
00529         <span class="keywordflow">goto</span> exit;
00530 
00531     <span class="comment">/* Generate the signature */</span>
00532     (void) fflush(stdout);
00533     sig = <a class="code" href="group__signature.html#a2">rpmNewSignature</a>();
00534     (void) <a class="code" href="group__signature.html#a7">rpmAddSignature</a>(sig, sigtarget, <a class="code" href="group__signature.html#a11a398">RPMSIGTAG_SIZE</a>, passPhrase);
00535     (void) <a class="code" href="group__signature.html#a7">rpmAddSignature</a>(sig, sigtarget, <a class="code" href="group__signature.html#a11a402">RPMSIGTAG_MD5</a>, passPhrase);
00536     <span class="keywordflow">if</span> ((sigtype = <a class="code" href="group__signature.html#a8">rpmLookupSignatureType</a>(<a class="code" href="signature_8h.html#a0">RPMLOOKUPSIG_QUERY</a>)) &gt; 0) {
00537         <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a2">RPMMESS_NORMAL</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Generating signature: %d\n"</span>), sigtype);
00538         (void) <a class="code" href="group__signature.html#a7">rpmAddSignature</a>(sig, sigtarget, sigtype, passPhrase);
00539     }
00540     
00541     <span class="keywordflow">if</span> (sha1) {
00542         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(sig, <a class="code" href="rpmlib_8h.html#a494a112">RPMTAG_SHA1HEADER</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, sha1, 1);
00543         sha1 = <a class="code" href="poptint_8h.html#a14">_free</a>(sha1);
00544     }
00545 
00546     <span class="comment">/* Reallocate the signature into one contiguous region. */</span>
00547     sig = <a class="code" href="group__header.html#a30">headerReload</a>(sig, <a class="code" href="rpmlib_8h.html#a494a95">RPMTAG_HEADERSIGNATURES</a>);
00548     <span class="keywordflow">if</span> (sig == NULL) {  <span class="comment">/* XXX can't happen */</span>
00549         rc = <a class="code" href="rpmerr_8h.html#a91a50">RPMERR_RELOAD</a>;
00550         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a50">RPMERR_RELOAD</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to reload signature header.\n"</span>));
00551         <span class="keywordflow">goto</span> exit;
00552     }
00553 
00554     <span class="comment">/* Open the output file */</span>
00555     fd = <a class="code" href="group__rpmio.html#a83">Fopen</a>(fileName, <span class="stringliteral">"w.ufdio"</span>);
00556     <span class="keywordflow">if</span> (fd == NULL || <a class="code" href="group__rpmio.html#a85">Ferror</a>(fd)) {
00557         rc = <a class="code" href="rpmerr_8h.html#a91a38">RPMERR_CREATE</a>;
00558         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a38">RPMERR_CREATE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not open %s: %s\n"</span>),
00559                 fileName, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fd));
00560         <span class="keywordflow">goto</span> exit;
00561     }
00562 
00563     <span class="comment">/* Write the lead section into the package. */</span>
00564     {   <span class="keywordtype">int</span> archnum = -1;
00565         <span class="keywordtype">int</span> osnum = -1;
00566         <span class="keyword">struct </span><a class="code" href="structrpmlead.html">rpmlead</a> lead;
00567 
00568         <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a86">Fileno</a>(csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) &lt; 0) {
00569 <span class="preprocessor">#ifndef DYING</span>
00570 <span class="preprocessor"></span>            <a class="code" href="group__rpmrc.html#a50">rpmGetArchInfo</a>(NULL, &amp;archnum);
00571             <a class="code" href="group__rpmrc.html#a51">rpmGetOsInfo</a>(NULL, &amp;osnum);
00572 <span class="preprocessor">#endif</span>
00573 <span class="preprocessor"></span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m3">lead</a> != NULL) {
00574             archnum = csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m3">lead</a>-&gt;<a class="code" href="structrpmlead.html#m4">archnum</a>;
00575             osnum = csa-&gt;<a class="code" href="structcpioSourceArchive__s.html#m3">lead</a>-&gt;<a class="code" href="structrpmlead.html#m6">osnum</a>;
00576         }
00577 
00578         memset(&amp;lead, 0, <span class="keyword">sizeof</span>(lead));
00579         lead.<a class="code" href="structrpmlead.html#m1">major</a> = <a class="code" href="pack_8c.html#a14">rpmLeadVersion</a>();
00580         lead.<a class="code" href="structrpmlead.html#m2">minor</a> = 0;
00581         lead.<a class="code" href="structrpmlead.html#m3">type</a> = type;
00582         lead.<a class="code" href="structrpmlead.html#m4">archnum</a> = archnum;
00583         lead.<a class="code" href="structrpmlead.html#m6">osnum</a> = osnum;
00584         lead.<a class="code" href="structrpmlead.html#m7">signature_type</a> = <a class="code" href="group__signature.html#a12a11">RPMSIGTYPE_HEADERSIG</a>;
00585 
00586         {   <span class="keyword">const</span> <span class="keywordtype">char</span> *name, *version, *release;
00587             (void) <a class="code" href="group__header.html#a88">headerNVR</a>(h, &amp;name, &amp;version, &amp;release);
00588             sprintf(buf, <span class="stringliteral">"%s-%s-%s"</span>, name, version, release);
00589             strncpy(lead.<a class="code" href="structrpmlead.html#m5">name</a>, buf, <span class="keyword">sizeof</span>(lead.<a class="code" href="structrpmlead.html#m5">name</a>));
00590         }
00591 
00592         <span class="keywordflow">if</span> (<a class="code" href="group__lead.html#a0">writeLead</a>(fd, &amp;lead)) {
00593             rc = <a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>;
00594             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to write package: %s\n"</span>),
00595                  <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fd));
00596             <span class="keywordflow">goto</span> exit;
00597         }
00598     }
00599 
00600     <span class="comment">/* Write the signature section into the package. */</span>
00601     rc = <a class="code" href="group__signature.html#a6">rpmWriteSignature</a>(fd, sig);
00602     <span class="keywordflow">if</span> (rc)
00603         <span class="keywordflow">goto</span> exit;
00604 
00605     <span class="comment">/* Append the header and archive */</span>
00606     ifd = <a class="code" href="group__rpmio.html#a83">Fopen</a>(sigtarget, <span class="stringliteral">"r.ufdio"</span>);
00607     <span class="keywordflow">if</span> (ifd == NULL || <a class="code" href="group__rpmio.html#a85">Ferror</a>(ifd)) {
00608         rc = <a class="code" href="rpmerr_8h.html#a91a53">RPMERR_READ</a>;
00609         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a53">RPMERR_READ</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to open sigtarget %s: %s\n"</span>),
00610                 sigtarget, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(ifd));
00611         <span class="keywordflow">goto</span> exit;
00612     }
00613 
00614     <span class="comment">/* Add signatures to header, and write header into the package. */</span>
00615     {   <a class="code" href="structheaderToken.html">Header</a> nh = <a class="code" href="group__header.html#a32">headerRead</a>(ifd, <a class="code" href="group__header.html#a92a65">HEADER_MAGIC_YES</a>);
00616 
00617         <span class="keywordflow">if</span> (nh == NULL) {
00618             rc = <a class="code" href="rpmerr_8h.html#a91a53">RPMERR_READ</a>;
00619             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a53">RPMERR_READ</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to read header from %s: %s\n"</span>),
00620                         sigtarget, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(ifd));
00621             <span class="keywordflow">goto</span> exit;
00622         }
00623 
00624 <span class="preprocessor">#ifdef  NOTYET</span>
00625 <span class="preprocessor"></span>        (void) <a class="code" href="group__header.html#a89">headerMergeLegacySigs</a>(nh, sig);
00626 <span class="preprocessor">#endif</span>
00627 <span class="preprocessor"></span>
00628         rc = <a class="code" href="group__header.html#a33">headerWrite</a>(fd, nh, <a class="code" href="group__header.html#a92a65">HEADER_MAGIC_YES</a>);
00629         nh = <a class="code" href="group__header.html#a16">headerFree</a>(nh);
00630 
00631         <span class="keywordflow">if</span> (rc) {
00632             rc = <a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>;
00633             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to write header to %s: %s\n"</span>),
00634                         fileName, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fd));
00635             <span class="keywordflow">goto</span> exit;
00636         }
00637     }
00638         
00639     <span class="comment">/* Write the payload into the package. */</span>
00640     <span class="keywordflow">while</span> ((count = <a class="code" href="group__rpmio.html#a77">Fread</a>(buf, <span class="keyword">sizeof</span>(buf[0]), <span class="keyword">sizeof</span>(buf), ifd)) &gt; 0) {
00641         <span class="keywordflow">if</span> (count == -1) {
00642             rc = <a class="code" href="rpmerr_8h.html#a91a53">RPMERR_READ</a>;
00643             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a53">RPMERR_READ</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to read payload from %s: %s\n"</span>),
00644                      sigtarget, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(ifd));
00645             <span class="keywordflow">goto</span> exit;
00646         }
00647         <span class="keywordflow">if</span> (<a class="code" href="group__rpmio.html#a78">Fwrite</a>(buf, <span class="keyword">sizeof</span>(buf[0]), count, fd) != count) {
00648             rc = <a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>;
00649             <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a39">RPMERR_NOSPACE</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Unable to write payload to %s: %s\n"</span>),
00650                      fileName, <a class="code" href="group__rpmio.html#a11">Fstrerror</a>(fd));
00651             <span class="keywordflow">goto</span> exit;
00652         }
00653     }
00654     rc = 0;
00655 
00656 exit:
00657     sha1 = <a class="code" href="poptint_8h.html#a14">_free</a>(sha1);
00658     h = <a class="code" href="group__header.html#a16">headerFree</a>(h);
00659     sig = <a class="code" href="group__signature.html#a9">rpmFreeSignature</a>(sig);
00660     <span class="keywordflow">if</span> (ifd) {
00661         (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(ifd);
00662         ifd = NULL;
00663     }
00664     <span class="keywordflow">if</span> (fd) {
00665         (void) <a class="code" href="group__rpmio.html#a80">Fclose</a>(fd);
00666         fd = NULL;
00667     }
00668     <span class="keywordflow">if</span> (sigtarget) {
00669         (void) <a class="code" href="rpmrpc_8c.html#a27">Unlink</a>(sigtarget);
00670         sigtarget = <a class="code" href="poptint_8h.html#a14">_free</a>(sigtarget);
00671     }
00672 
00673     <span class="keywordflow">if</span> (rc == 0)
00674         <a class="code" href="rpmmessages_8h.html#a7">rpmMessage</a>(<a class="code" href="rpmmessages_8h.html#a2">RPMMESS_NORMAL</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Wrote: %s\n"</span>), fileName);
00675     <span class="keywordflow">else</span>
00676         (void) <a class="code" href="rpmrpc_8c.html#a27">Unlink</a>(fileName);
00677 
00678     <span class="keywordflow">return</span> rc;
00679 }
00680 
00681 <span class="comment">/*@unchecked@*/</span>
<a name="l00682"></a><a class="code" href="pack_8c.html#a5">00682</a> <span class="keyword">static</span> <a class="code" href="header_8h.html#a9">int_32</a> <a class="code" href="pack_8c.html#a5">copyTags</a>[] = {
00683     <a class="code" href="rpmlib_8h.html#a494a184">RPMTAG_CHANGELOGTIME</a>,
00684     <a class="code" href="rpmlib_8h.html#a494a185">RPMTAG_CHANGELOGNAME</a>,
00685     <a class="code" href="rpmlib_8h.html#a494a186">RPMTAG_CHANGELOGTEXT</a>,
00686     0
00687 };
00688 
<a name="l00689"></a><a class="code" href="group__rpmbuild.html#a49">00689</a> <span class="keywordtype">int</span> <a class="code" href="group__rpmbuild.html#a49">packageBinaries</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec)
00690 {
00691     <span class="keyword">struct </span><a class="code" href="structcpioSourceArchive__s.html">cpioSourceArchive_s</a> csabuf;
00692     <a class="code" href="structcpioSourceArchive__s.html">CSA_t</a> csa = &amp;csabuf;
00693     <span class="keywordtype">int</span> rc;
00694     <span class="keyword">const</span> <span class="keywordtype">char</span> *errorString;
00695     <a class="code" href="structPackageStruct.html">Package</a> pkg;
00696 
00697     <span class="keywordflow">for</span> (pkg = spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a>; pkg != NULL; pkg = pkg-&gt;<a class="code" href="structPackageStruct.html#m14">next</a>) {
00698         <span class="keyword">const</span> <span class="keywordtype">char</span> *fn;
00699 
00700         <span class="keywordflow">if</span> (pkg-&gt;<a class="code" href="structPackageStruct.html#m13">fileList</a> == NULL)
00701             <span class="keywordflow">continue</span>;
00702 
00703         <span class="keywordflow">if</span> ((rc = <a class="code" href="pack_8c.html#a12">processScriptFiles</a>(spec, pkg)))
00704             <span class="keywordflow">return</span> rc;
00705         
00706         <span class="keywordflow">if</span> (spec-&gt;<a class="code" href="structSpecStruct.html#m24">cookie</a>) {
00707             (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a198">RPMTAG_COOKIE</a>,
00708                            <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, spec-&gt;<a class="code" href="structSpecStruct.html#m24">cookie</a>, 1);
00709         }
00710 
00711         <span class="comment">/* Copy changelog from src rpm */</span>
00712         <a class="code" href="group__header.html#a67">headerCopyTags</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m35">packages</a>-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="pack_8c.html#a5">copyTags</a>);
00713         
00714         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a177">RPMTAG_RPMVERSION</a>,
00715                        <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, <a class="code" href="config_8h.html#a108">VERSION</a>, 1);
00716         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a120">RPMTAG_BUILDHOST</a>,
00717                        <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, buildHost(), 1);
00718         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a119">RPMTAG_BUILDTIME</a>,
00719                        <a class="code" href="group__header.html#a93a70">RPM_INT32_TYPE</a>, getBuildTime(), 1);
00720 
00721         <a class="code" href="lib_2misc_8c.html#a21">providePackageNVR</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>);
00722 
00723     {   <span class="keyword">const</span> <span class="keywordtype">char</span> * optflags = <a class="code" href="macro_8c.html#a50">rpmExpand</a>(<span class="stringliteral">"%{optflags}"</span>, NULL);
00724         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a226">RPMTAG_OPTFLAGS</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>,
00725                         optflags, 1);
00726         optflags = <a class="code" href="poptint_8h.html#a14">_free</a>(optflags);
00727     }
00728 
00729         (void) <a class="code" href="pack_8c.html#a6">genSourceRpmName</a>(spec);
00730         (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, <a class="code" href="rpmlib_8h.html#a494a157">RPMTAG_SOURCERPM</a>, <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>,
00731                        spec-&gt;<a class="code" href="structSpecStruct.html#m1">sourceRpmName</a>, 1);
00732         
00733         {   <span class="keyword">const</span> <span class="keywordtype">char</span> *binFormat = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(<span class="stringliteral">"%{_rpmfilename}"</span>, NULL);
00734             <span class="keywordtype">char</span> *binRpm, *binDir;
00735             binRpm = <a class="code" href="group__header.html#a60">headerSprintf</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, binFormat, rpmTagTable,
00736                                rpmHeaderFormats, &amp;errorString);
00737             binFormat = <a class="code" href="poptint_8h.html#a14">_free</a>(binFormat);
00738             <span class="keywordflow">if</span> (binRpm == NULL) {
00739                 <span class="keyword">const</span> <span class="keywordtype">char</span> *name;
00740                 (void) <a class="code" href="group__header.html#a88">headerNVR</a>(pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, &amp;name, NULL, NULL);
00741                 <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>, <a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"Could not generate output "</span>
00742                      <span class="stringliteral">"filename for package %s: %s\n"</span>), name, errorString);
00743                 <span class="keywordflow">return</span> <a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>;
00744             }
00745             fn = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(<span class="stringliteral">"%{_rpmdir}/"</span>, binRpm, NULL);
00746             <span class="keywordflow">if</span> ((binDir = strchr(binRpm, <span class="charliteral">'/'</span>)) != NULL) {
00747                 <span class="keyword">struct </span>stat st;
00748                 <span class="keyword">const</span> <span class="keywordtype">char</span> *dn;
00749                 *binDir = <span class="charliteral">'\0'</span>;
00750                 dn = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(<span class="stringliteral">"%{_rpmdir}/"</span>, binRpm, NULL);
00751                 <span class="keywordflow">if</span> (<a class="code" href="rpmrpc_8c.html#a45">Stat</a>(dn, &amp;st) &lt; 0) {
00752                     <span class="keywordflow">switch</span>(errno) {
00753                     <span class="keywordflow">case</span>  ENOENT:
00754                         <span class="keywordflow">if</span> (<a class="code" href="group__rpmrpc.html#a22">Mkdir</a>(dn, 0755) == 0)
00755                             <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>;
00756                         <span class="comment">/*@fallthrough@*/</span>
00757                     <span class="keywordflow">default</span>:
00758                         <a class="code" href="rpmerr_8h.html#a5">rpmError</a>(<a class="code" href="rpmerr_8h.html#a91a62">RPMERR_BADFILENAME</a>,<a class="code" href="system_8h.html#a18">_</a>(<span class="stringliteral">"cannot create %s: %s\n"</span>),
00759                             dn, <a class="code" href="popt_8c.html#a1">strerror</a>(<a class="code" href="system_8h.html#a29">errno</a>));
00760                         <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>;
00761                     }
00762                 }
00763                 dn = <a class="code" href="poptint_8h.html#a14">_free</a>(dn);
00764             }
00765             binRpm = <a class="code" href="poptint_8h.html#a14">_free</a>(binRpm);
00766         }
00767 
00768         memset(csa, 0, <span class="keyword">sizeof</span>(*csa));
00769         csa-&gt;cpioArchiveSize = 0;
00770         <span class="comment">/*@-type@*/</span> <span class="comment">/* LCL: function typedefs */</span>
00771         csa-&gt;cpioFdIn = <a class="code" href="rpmio_8h.html#a7">fdNew</a>(<span class="stringliteral">"init (packageBinaries)"</span>);
00772         <span class="comment">/*@-assignexpose -newreftrans@*/</span>
00773 <span class="comment">/*@i@*/</span> csa-&gt;cpioList = pkg-&gt;<a class="code" href="structPackageStruct.html#m1">cpioList</a>;
00774         <span class="comment">/*@=assignexpose =newreftrans@*/</span>
00775 
00776         rc = <a class="code" href="pack_8c.html#a15">writeRPM</a>(&amp;pkg-&gt;<a class="code" href="structPackageStruct.html#m0">header</a>, fn, <a class="code" href="rpmlib_8h.html#a35">RPMLEAD_BINARY</a>,
00777                     csa, spec-&gt;<a class="code" href="structSpecStruct.html#m22">passPhrase</a>, NULL);
00778         csa-&gt;cpioFdIn = <a class="code" href="rpmio_8h.html#a6">fdFree</a>(csa-&gt;cpioFdIn, <span class="stringliteral">"init (packageBinaries)"</span>);
00779         <span class="comment">/*@=type@*/</span>
00780         fn = <a class="code" href="poptint_8h.html#a14">_free</a>(fn);
00781         <span class="keywordflow">if</span> (rc)
00782             <span class="keywordflow">return</span> rc;
00783     }
00784     
00785     <span class="keywordflow">return</span> 0;
00786 }
00787 
<a name="l00788"></a><a class="code" href="group__rpmbuild.html#a50">00788</a> <span class="keywordtype">int</span> <a class="code" href="group__rpmbuild.html#a50">packageSources</a>(<a class="code" href="structSpecStruct.html">Spec</a> spec)
00789 {
00790     <span class="keyword">struct </span><a class="code" href="structcpioSourceArchive__s.html">cpioSourceArchive_s</a> csabuf;
00791     <a class="code" href="structcpioSourceArchive__s.html">CSA_t</a> csa = &amp;csabuf;
00792     <span class="keywordtype">int</span> rc;
00793 
00794     <span class="comment">/* Add some cruft */</span>
00795     (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m28">sourceHeader</a>, <a class="code" href="rpmlib_8h.html#a494a177">RPMTAG_RPMVERSION</a>,
00796                    <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, <a class="code" href="config_8h.html#a108">VERSION</a>, 1);
00797     (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m28">sourceHeader</a>, <a class="code" href="rpmlib_8h.html#a494a120">RPMTAG_BUILDHOST</a>,
00798                    <a class="code" href="group__header.html#a93a71">RPM_STRING_TYPE</a>, buildHost(), 1);
00799     (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m28">sourceHeader</a>, <a class="code" href="rpmlib_8h.html#a494a119">RPMTAG_BUILDTIME</a>,
00800                    <a class="code" href="group__header.html#a93a70">RPM_INT32_TYPE</a>, getBuildTime(), 1);
00801 
00802     (void) <a class="code" href="pack_8c.html#a6">genSourceRpmName</a>(spec);
00803 
00804     spec-&gt;<a class="code" href="structSpecStruct.html#m24">cookie</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(spec-&gt;<a class="code" href="structSpecStruct.html#m24">cookie</a>);
00805     
00806     <span class="comment">/* XXX this should be %_srpmdir */</span>
00807     {   <span class="keyword">const</span> <span class="keywordtype">char</span> *fn = <a class="code" href="macro_8c.html#a53">rpmGetPath</a>(<span class="stringliteral">"%{_srcrpmdir}/"</span>, spec-&gt;<a class="code" href="structSpecStruct.html#m1">sourceRpmName</a>,NULL);
00808 
00809         memset(csa, 0, <span class="keyword">sizeof</span>(*csa));
00810         csa-&gt;cpioArchiveSize = 0;
00811         <span class="comment">/*@-type@*/</span> <span class="comment">/* LCL: function typedefs */</span>
00812         csa-&gt;cpioFdIn = <a class="code" href="rpmio_8h.html#a7">fdNew</a>(<span class="stringliteral">"init (packageSources)"</span>);
00813         <span class="comment">/*@-assignexpose -newreftrans@*/</span>
00814 <span class="comment">/*@i@*/</span> csa-&gt;cpioList = spec-&gt;<a class="code" href="structSpecStruct.html#m29">sourceCpioList</a>;
00815         <span class="comment">/*@=assignexpose =newreftrans@*/</span>
00816 
00817         rc = <a class="code" href="pack_8c.html#a15">writeRPM</a>(&amp;spec-&gt;<a class="code" href="structSpecStruct.html#m28">sourceHeader</a>, fn, <a class="code" href="rpmlib_8h.html#a36">RPMLEAD_SOURCE</a>,
00818                 csa, spec-&gt;<a class="code" href="structSpecStruct.html#m22">passPhrase</a>, &amp;(spec-&gt;<a class="code" href="structSpecStruct.html#m24">cookie</a>));
00819         csa-&gt;cpioFdIn = <a class="code" href="rpmio_8h.html#a6">fdFree</a>(csa-&gt;cpioFdIn, <span class="stringliteral">"init (packageSources)"</span>);
00820         <span class="comment">/*@=type@*/</span>
00821         fn = <a class="code" href="poptint_8h.html#a14">_free</a>(fn);
00822     }
00823     <span class="keywordflow">return</span> rc;
00824 }
</pre></div><hr><address style="align: right;"><small>Generated on Thu Sep 12 22:14:55 2002 for rpm by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.17 </small></address>
</body>
</html>