summaryrefslogtreecommitdiff
path: root/rpmbuild.c
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2010-08-20 13:47:05 +0300
committerPanu Matilainen <pmatilai@redhat.com>2010-08-20 13:52:47 +0300
commit2c2faa299e6c1f2a9b6f8220c75cf878d4e005b0 (patch)
tree0c8aaf9202d523a61de95b3f623b76e1ad1adf84 /rpmbuild.c
parentd391d5ec60c9fadb10236b8af236ac4b130cd2bd (diff)
downloadrpm-2c2faa299e6c1f2a9b6f8220c75cf878d4e005b0.tar.gz
rpm-2c2faa299e6c1f2a9b6f8220c75cf878d4e005b0.tar.bz2
rpm-2c2faa299e6c1f2a9b6f8220c75cf878d4e005b0.zip
Move --pipe handling to cliutils helpers
Diffstat (limited to 'rpmbuild.c')
-rw-r--r--rpmbuild.c32
1 files changed, 3 insertions, 29 deletions
diff --git a/rpmbuild.c b/rpmbuild.c
index 3b0b8cecd..51fcbfe63 100644
--- a/rpmbuild.c
+++ b/rpmbuild.c
@@ -6,7 +6,6 @@ const char *__progname;
#include <errno.h>
#include <libgen.h>
#include <ctype.h>
-#include <sys/wait.h>
#include <rpm/rpmcli.h>
#include <rpm/rpmlib.h> /* RPMSIGTAG, rpmReadPackageFile .. */
@@ -387,11 +386,8 @@ int main(int argc, char *argv[])
char * passPhrase = "";
const char *pkg = NULL;
- pid_t pipeChild = 0;
poptContext optCon;
int ec = 0;
- int status;
- int p[2];
setprogname(argv[0]); /* Retrofit glibc __progname */
@@ -451,25 +447,8 @@ int main(int argc, char *argv[])
/* rpmbuild is rather chatty by default */
rpmSetVerbosity(quiet ? RPMLOG_WARNING : RPMLOG_INFO);
- if (rpmcliPipeOutput) {
- if (pipe(p) < 0) {
- fprintf(stderr, _("creating a pipe for --pipe failed: %m\n"));
- goto exit;
- }
-
- if (!(pipeChild = fork())) {
- (void) signal(SIGPIPE, SIG_DFL);
- (void) close(p[1]);
- (void) dup2(p[0], STDIN_FILENO);
- (void) close(p[0]);
- (void) execl("/bin/sh", "/bin/sh", "-c", rpmcliPipeOutput, NULL);
- fprintf(stderr, _("exec failed\n"));
- }
-
- (void) close(p[0]);
- (void) dup2(p[1], STDOUT_FILENO);
- (void) close(p[1]);
- }
+ if (rpmcliPipeOutput && initPipe())
+ exit(EXIT_FAILURE);
ts = rpmtsCreate();
(void) rpmtsSetRootDir(ts, rpmcliRootDir);
@@ -550,12 +529,7 @@ int main(int argc, char *argv[])
exit:
ts = rpmtsFree(ts);
-
- if (pipeChild) {
- (void) fclose(stdout);
- (void) waitpid(pipeChild, &status, 0);
- }
-
+ finishPipe();
freeNames();
ba->buildRootOverride = _free(ba->buildRootOverride);
ba->targets = _free(ba->targets);