typedef struct cpioSourceArchive_s {
rpm_loff_t cpioArchiveSize;
- FD_t cpioFdIn;
rpmfi cpioList;
} * CSA_t;
return rc;
}
-/**
- */
-static rpmRC cpio_copy(FD_t fdo, CSA_t csa)
-{
- char buf[BUFSIZ];
- size_t nb;
-
- while((nb = Fread(buf, sizeof(buf[0]), sizeof(buf), csa->cpioFdIn)) > 0) {
- if (Fwrite(buf, sizeof(buf[0]), nb, fdo) != nb) {
- rpmlog(RPMLOG_ERR, _("cpio_copy write failed: %s\n"),
- Fstrerror(fdo));
- return RPMRC_FAIL;
- }
- csa->cpioArchiveSize += nb;
- }
- if (Ferror(csa->cpioFdIn)) {
- rpmlog(RPMLOG_ERR, _("cpio_copy read failed: %s\n"),
- Fstrerror(csa->cpioFdIn));
- return RPMRC_FAIL;
- }
- return RPMRC_OK;
-}
-
static rpmRC addFileToTag(rpmSpec spec, const char * file,
Header h, rpmTagVal tag, int append)
{
fdFiniDigest(fd, PGPHASHALGO_SHA1, (void **)&SHA1, NULL, 1);
if (csa->cpioList != NULL) {
rc = cpio_doio(fd, h, csa, rpmio_flags);
- } else if (Fileno(csa->cpioFdIn) >= 0) {
- rc = cpio_copy(fd, csa);
} else {
rc = RPMRC_FAIL;
rpmlog(RPMLOG_ERR, _("Bad CSA data\n"));
memset(csa, 0, sizeof(*csa));
csa->cpioArchiveSize = 0;
- csa->cpioFdIn = fdNew();
csa->cpioList = rpmfiLink(pkg->cpioList);
rc = writeRPM(&pkg->header, NULL, fn, csa, NULL);
csa->cpioList = rpmfiFree(csa->cpioList);
- csa->cpioFdIn = fdFree(csa->cpioFdIn);
if (rc == RPMRC_OK) {
/* Do check each written package if enabled */
char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", fn, NULL);
memset(csa, 0, sizeof(*csa));
csa->cpioArchiveSize = 0;
- csa->cpioFdIn = fdNew();
csa->cpioList = rpmfiLink(spec->sourceCpioList);
spec->sourcePkgId = NULL;
}
csa->cpioList = rpmfiFree(csa->cpioList);
- csa->cpioFdIn = fdFree(csa->cpioFdIn);
pkgcheck = _free(pkgcheck);
fn = _free(fn);
}