FREE(spec->cookie);
+ memset(csa, 0, sizeof(*csa));
csa->cpioArchiveSize = 0;
csa->cpioFdIn = -1;
csa->cpioList = spec->sourceCpioList;
sprintf(fileName, "%s/%s", rpmGetVar(RPMVAR_RPMDIR), binRpm);
FREE(binRpm);
+ memset(csa, 0, sizeof(*csa));
csa->cpioArchiveSize = 0;
csa->cpioFdIn = -1;
csa->cpioList = pkg->cpioList;
Header sig;
struct rpmlead lead;
- csa->cpioArchiveSize = 0;
- /* Add the a bogus archive size to the Header */
- headerAddEntry(header, RPMTAG_ARCHIVESIZE, RPM_INT32_TYPE,
- &csa->cpioArchiveSize, 1);
+ if (csa->cpioList != NULL) {
+ csa->cpioArchiveSize = 0;
+ /* Add the a bogus archive size to the Header */
+ headerAddEntry(header, RPMTAG_ARCHIVESIZE, RPM_INT32_TYPE,
+ &csa->cpioArchiveSize, 1);
+ }
/* Create and add the cookie */
if (cookie) {
}
/* Now set the real archive size in the Header */
- headerModifyEntry(header, RPMTAG_ARCHIVESIZE,
- RPM_INT32_TYPE, &csa->cpioArchiveSize, 1);
+ if (csa->cpioList != NULL) {
+ headerModifyEntry(header, RPMTAG_ARCHIVESIZE,
+ RPM_INT32_TYPE, &csa->cpioArchiveSize, 1);
+ }
lseek(fd, 0, SEEK_SET);
headerWrite(fd, header, HEADER_MAGIC_YES);
headerGetEntry(header, RPMTAG_VERSION, NULL, (void **)&version, NULL);
headerGetEntry(header, RPMTAG_RELEASE, NULL, (void **)&release, NULL);
sprintf(buf, "%s-%s-%s", name, version, release);
- rpmGetArchInfo(NULL, &arch);
- rpmGetOsInfo(NULL, &os);
+
+ if (csa->cpioList != NULL) {
+ rpmGetArchInfo(NULL, &arch);
+ rpmGetOsInfo(NULL, &os);
+ } else if (csa->lead != NULL) { /* XXX FIXME: exorcize lead/arch/os */
+ arch = csa->lead->archnum;
+ os = csa->lead->osnum;
+ } else {
+ arch = -1;
+ os = -1;
+ }
+
memset(&lead, 0, sizeof(lead));
lead.major = RPM_MAJOR_NUMBER;
lead.minor = 0;