[pacman-dev] [PATCH] Correctly close the pipe used for scriptlet execution

Dan McGee dan at archlinux.org
Sat Oct 18 23:49:00 EDT 2008


We never had a call to pclose() in here before, leaving our file descriptor
in some sort of limbo state. In addition, clean up some of the other logic
such as directly calling exit(1) on a popen() failure rather than going to
our cleanup block, and handling and respecting the exit status of the
subprocess correctly.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 lib/libalpm/trans.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 73ae822..96ac1bc 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -551,8 +551,7 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
 		if(!pipe) {
 			_alpm_log(PM_LOG_ERROR, _("call to popen failed (%s)"),
 					strerror(errno));
-			retval = 1;
-			goto cleanup;
+			exit(1);
 		}
 		while(!feof(pipe)) {
 			char line[PATH_MAX];
@@ -561,7 +560,8 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
 			alpm_logaction("%s", line);
 			EVENT(trans, PM_TRANS_EVT_SCRIPTLET_INFO, line, NULL);
 		}
-		exit(0);
+		retval = pclose(pipe);
+		exit(WEXITSTATUS(retval));
 	} else {
 		/* this code runs for the parent only (wait on the child) */
 		pid_t retpid;
-- 
1.6.0.2




More information about the pacman-dev mailing list