teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone

Blame 0001-Support-running-rpmfcExec-without-any-piped-input-ou.patch

Panu Matilainen c9c421
From ad4673589428db6e3b9fecd6f151eb899500336d Mon Sep 17 00:00:00 2001
Panu Matilainen c9c421
Message-Id: <ad4673589428db6e3b9fecd6f151eb899500336d.1566556207.git.pmatilai@redhat.com>
Panu Matilainen c9c421
From: Panu Matilainen <pmatilai@redhat.com>
Panu Matilainen c9c421
Date: Thu, 15 Aug 2019 14:00:43 +0300
Panu Matilainen c9c421
Subject: [PATCH 1/3] Support running rpmfcExec() without any piped
Panu Matilainen c9c421
 input/output
Panu Matilainen c9c421
Panu Matilainen c9c421
Having a function called getOutputFrom() which doesn't is a wee bit
Panu Matilainen c9c421
weird but what the hey...
Panu Matilainen c9c421
Panu Matilainen c9c421
No behavior changes here, but this is needed for the next steps.
Panu Matilainen c9c421
---
Panu Matilainen c9c421
 build/rpmfc.c | 7 ++++++-
Panu Matilainen c9c421
 1 file changed, 6 insertions(+), 1 deletion(-)
Panu Matilainen c9c421
Panu Matilainen c9c421
diff --git a/build/rpmfc.c b/build/rpmfc.c
Panu Matilainen c9c421
index 80da96f3a..94b4620d2 100644
Panu Matilainen c9c421
--- a/build/rpmfc.c
Panu Matilainen c9c421
+++ b/build/rpmfc.c
Panu Matilainen c9c421
@@ -268,8 +268,9 @@ static int getOutputFrom(ARGV_t argv,
Panu Matilainen c9c421
     int status;
Panu Matilainen c9c421
     int myerrno = 0;
Panu Matilainen c9c421
     int ret = 1; /* assume failure */
Panu Matilainen c9c421
+    int doio = (writePtr || sb_stdout || dup);
Panu Matilainen c9c421
 
Panu Matilainen c9c421
-    if (pipe(toProg) < 0 || pipe(fromProg) < 0) {
Panu Matilainen c9c421
+    if (doio && (pipe(toProg) < 0 || pipe(fromProg) < 0)) {
Panu Matilainen c9c421
 	rpmlog(RPMLOG_ERR, _("Couldn't create pipe for %s: %m\n"), argv[0]);
Panu Matilainen c9c421
 	return -1;
Panu Matilainen c9c421
     }
Panu Matilainen c9c421
@@ -303,6 +304,9 @@ static int getOutputFrom(ARGV_t argv,
Panu Matilainen c9c421
 	return -1;
Panu Matilainen c9c421
     }
Panu Matilainen c9c421
 
Panu Matilainen c9c421
+    if (!doio)
Panu Matilainen c9c421
+	goto reap;
Panu Matilainen c9c421
+
Panu Matilainen c9c421
     close(toProg[0]);
Panu Matilainen c9c421
     close(fromProg[1]);
Panu Matilainen c9c421
 
Panu Matilainen c9c421
@@ -376,6 +380,7 @@ static int getOutputFrom(ARGV_t argv,
Panu Matilainen c9c421
     if (fromProg[0] >= 0)
Panu Matilainen c9c421
 	close(fromProg[0]);
Panu Matilainen c9c421
 
Panu Matilainen c9c421
+reap:
Panu Matilainen c9c421
     /* Collect status from prog */
Panu Matilainen c9c421
     reaped = waitpid(child, &status, 0);
Panu Matilainen c9c421
     rpmlog(RPMLOG_DEBUG, "\twaitpid(%d) rc %d status %x\n",
Panu Matilainen c9c421
-- 
Panu Matilainen c9c421
2.21.0
Panu Matilainen c9c421