diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2010-08-20 13:47:05 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2010-08-20 13:52:47 +0300 |
commit | 2c2faa299e6c1f2a9b6f8220c75cf878d4e005b0 (patch) | |
tree | 0c8aaf9202d523a61de95b3f623b76e1ad1adf84 /rpmbuild.c | |
parent | d391d5ec60c9fadb10236b8af236ac4b130cd2bd (diff) | |
download | rpm-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.c | 32 |
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); |