<!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> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>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 <<a class="code" href="rpmio__internal_8h.html">rpmio_internal.h</a>></span> 00009 <span class="preprocessor">#include <<a class="code" href="rpmbuild_8h.html">rpmbuild.h</a>></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->sourceRpmName @*/</span> 00031 { 00032 <span class="keywordflow">if</span> (spec-><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-><a class="code" href="structSpecStruct.html#m35">packages</a>-><a class="code" href="structPackageStruct.html#m0">header</a>, &name, &version, &release); 00037 sprintf(fileName, <span class="stringliteral">"%s-%s-%s.%ssrc.rpm"</span>, name, version, release, 00038 spec-><a class="code" href="structSpecStruct.html#m27">noSource</a> ? <span class="stringliteral">"no"</span> : <span class="stringliteral">""</span>); 00039 spec-><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-><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 && 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-><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 &csa-><a class="code" href="structcpioSourceArchive__s.html#m0">cpioArchiveSize</a>, &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-><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-><a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>)) > 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-><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-><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-><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-><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-><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> **)&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>, &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->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-><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-><a class="code" href="structPackageStruct.html#m5">preInFile</a>, pkg-><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-><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-><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-><a class="code" href="structPackageStruct.html#m7">preUnFile</a>, pkg-><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-><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-><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-><a class="code" href="structPackageStruct.html#m6">postInFile</a>, pkg-><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-><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-><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-><a class="code" href="structPackageStruct.html#m8">postUnFile</a>, pkg-><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-><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-><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-><a class="code" href="structPackageStruct.html#m9">verifyFile</a>, pkg-><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-><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-><a class="code" href="structPackageStruct.html#m11">triggerFiles</a>; p != NULL; p = p-><a class="code" href="structTriggerFileEntry.html#m4">next</a>) { 00252 (void) <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(pkg-><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>, &(p-><a class="code" href="structTriggerFileEntry.html#m3">prog</a>), 1); 00254 <span class="keywordflow">if</span> (p-><a class="code" href="structTriggerFileEntry.html#m2">script</a>) { 00255 (void) <a class="code" href="group__header.html#a47">headerAddOrAppendEntry</a>(pkg-><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>, &(p-><a class="code" href="structTriggerFileEntry.html#m2">script</a>), 1); 00257 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p-><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-><a class="code" href="structTriggerFileEntry.html#m1">fileName</a>, pkg-><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-><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-><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>, &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">"<stdin>"</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">"<stdin>"</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 <stdin> */</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">"<stdin>"</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-><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-><a class="code" href="structSpecStruct.html#m35">packages</a>-><a class="code" href="structPackageStruct.html#m0">header</a> = <a class="code" href="group__header.html#a16">headerFree</a>(spec-><a class="code" href="structSpecStruct.html#m35">packages</a>-><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, &spec-><a class="code" href="structSpecStruct.html#m35">packages</a>-><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">"<stdin>"</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">"<stdin>"</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-><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> < 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> < <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> > <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 < 3 || rpmlead_version > 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-><a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) < 0) { 00405 csa-><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 &csa-><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 && *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> && 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> && 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, &sigtarget, &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-><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-><a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) >= 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-><a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) < 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> *)&archiveSize, NULL)) 00506 *archiveSize = csa-><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> **)&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>)) > 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-><a class="code" href="structcpioSourceArchive__s.html#m1">cpioFdIn</a>) < 0) { 00569 <span class="preprocessor">#ifndef DYING</span> 00570 <span class="preprocessor"></span> <a class="code" href="group__rpmrc.html#a50">rpmGetArchInfo</a>(NULL, &archnum); 00571 <a class="code" href="group__rpmrc.html#a51">rpmGetOsInfo</a>(NULL, &osnum); 00572 <span class="preprocessor">#endif</span> 00573 <span class="preprocessor"></span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (csa-><a class="code" href="structcpioSourceArchive__s.html#m3">lead</a> != NULL) { 00574 archnum = csa-><a class="code" href="structcpioSourceArchive__s.html#m3">lead</a>-><a class="code" href="structrpmlead.html#m4">archnum</a>; 00575 osnum = csa-><a class="code" href="structcpioSourceArchive__s.html#m3">lead</a>-><a class="code" href="structrpmlead.html#m6">osnum</a>; 00576 } 00577 00578 memset(&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, &name, &version, &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, &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)) > 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 = &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-><a class="code" href="structSpecStruct.html#m35">packages</a>; pkg != NULL; pkg = pkg-><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-><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-><a class="code" href="structSpecStruct.html#m24">cookie</a>) { 00707 (void) <a class="code" href="group__header.html#a45">headerAddEntry</a>(pkg-><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-><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-><a class="code" href="structSpecStruct.html#m35">packages</a>-><a class="code" href="structPackageStruct.html#m0">header</a>, pkg-><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-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structPackageStruct.html#m0">header</a>, binFormat, rpmTagTable, 00736 rpmHeaderFormats, &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-><a class="code" href="structPackageStruct.html#m0">header</a>, &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, &st) < 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->cpioArchiveSize = 0; 00770 <span class="comment">/*@-type@*/</span> <span class="comment">/* LCL: function typedefs */</span> 00771 csa->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->cpioList = pkg-><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>(&pkg-><a class="code" href="structPackageStruct.html#m0">header</a>, fn, <a class="code" href="rpmlib_8h.html#a35">RPMLEAD_BINARY</a>, 00777 csa, spec-><a class="code" href="structSpecStruct.html#m22">passPhrase</a>, NULL); 00778 csa->cpioFdIn = <a class="code" href="rpmio_8h.html#a6">fdFree</a>(csa->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 = &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-><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-><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-><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-><a class="code" href="structSpecStruct.html#m24">cookie</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(spec-><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-><a class="code" href="structSpecStruct.html#m1">sourceRpmName</a>,NULL); 00808 00809 memset(csa, 0, <span class="keyword">sizeof</span>(*csa)); 00810 csa->cpioArchiveSize = 0; 00811 <span class="comment">/*@-type@*/</span> <span class="comment">/* LCL: function typedefs */</span> 00812 csa->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->cpioList = spec-><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>(&spec-><a class="code" href="structSpecStruct.html#m28">sourceHeader</a>, fn, <a class="code" href="rpmlib_8h.html#a36">RPMLEAD_SOURCE</a>, 00818 csa, spec-><a class="code" href="structSpecStruct.html#m22">passPhrase</a>, &(spec-><a class="code" href="structSpecStruct.html#m24">cookie</a>)); 00819 csa->cpioFdIn = <a class="code" href="rpmio_8h.html#a6">fdFree</a>(csa->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>