From 721a660a507d6d062e7aecafad886c643970a5d5 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Thu, 25 May 2017 18:15:27 +0300 Subject: [PATCH 1/4] Split binary package building into a separate function So that it can be run as a thread pool task. Upstream-Status: Submitted [https://github.com/rpm-software-management/rpm/pull/226] Signed-off-by: Alexander Kanavin --- build/pack.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/build/pack.c b/build/pack.c index 518f4e92a..ccfd614cc 100644 --- a/build/pack.c +++ b/build/pack.c @@ -546,18 +546,13 @@ static rpmRC checkPackages(char *pkgcheck) return RPMRC_OK; } -rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) +static rpmRC packageBinary(rpmSpec spec, Package pkg, const char *cookie, int cheating, char** filename) { - rpmRC rc; - const char *errorString; - Package pkg; - char *pkglist = NULL; - - for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { - char *fn; + const char *errorString; + rpmRC rc = RPMRC_OK; if (pkg->fileList == NULL) - continue; + return rc; if ((rc = processScriptFiles(spec, pkg))) return rc; @@ -587,7 +582,7 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) headerGetString(pkg->header, RPMTAG_NAME), errorString); return RPMRC_FAIL; } - fn = rpmGetPath("%{_rpmdir}/", binRpm, NULL); + *filename = rpmGetPath("%{_rpmdir}/", binRpm, NULL); if ((binDir = strchr(binRpm, '/')) != NULL) { struct stat st; char *dn; @@ -609,14 +604,28 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) free(binRpm); } - rc = writeRPM(pkg, NULL, fn, NULL); + rc = writeRPM(pkg, NULL, *filename, NULL); if (rc == RPMRC_OK) { /* Do check each written package if enabled */ - char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", fn, NULL); + char *pkgcheck = rpmExpand("%{?_build_pkgcheck} ", *filename, NULL); if (pkgcheck[0] != ' ') { rc = checkPackages(pkgcheck); } free(pkgcheck); + } + return rc; +} + +rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) +{ + rpmRC rc; + Package pkg; + char *pkglist = NULL; + + for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) { + char *fn = NULL; + rc = packageBinary(spec, pkg, cookie, cheating, &fn); + if (rc == RPMRC_OK) { rstrcat(&pkglist, fn); rstrcat(&pkglist, " "); } -- 2.11.0