summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2008-10-19 05:46:27 +0200
committerDan McGee <dan@archlinux.org>2008-10-19 06:59:28 +0200
commitd1fec15d8148dec186e437da912d6a03a8d26b11 (patch)
tree4ee2273a50efe4d83afe3a385644ef2acc688521
parentd24592cbcdff03d397a185946a15b170d0cd75c9 (diff)
downloadpacman-d1fec15d8148dec186e437da912d6a03a8d26b11.tar.gz
pacman-d1fec15d8148dec186e437da912d6a03a8d26b11.tar.xz
Correctly close the pipe used for scriptlet execution
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@archlinux.org>
-rw-r--r--lib/libalpm/trans.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index f996c02c..acad84e8 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -560,8 +560,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];
@@ -570,7 +569,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;