mirror of
https://github.com/troglobit/finit.git
synced 2026-10-02 05:52:48 +07:00
Fix #400: resolve exit code from pclose() by calling WEXITSTATUS()
This problem affects all calls to run_interactive() that check the return value of the command. Causing HOOK_MOUNT_ERROR to *not* run on mount failure, and sulogin() to *not* be started on fsck error. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
+18
-17
@@ -138,31 +138,32 @@ int run(char *cmd, char *log)
|
||||
|
||||
pid = fork();
|
||||
if (0 == pid) {
|
||||
int rc = EX_OSERR;
|
||||
char *pfx = *log ? ": " : "";
|
||||
char buf[256];
|
||||
FILE *pp;
|
||||
int rc;
|
||||
|
||||
setsid();
|
||||
sig_unblock();
|
||||
if (!log) {
|
||||
do_redirect();
|
||||
execvp(args[0], args);
|
||||
} else {
|
||||
char *pfx = *log ? ": " : "";
|
||||
FILE *pp;
|
||||
|
||||
pp = popen(cmd, "r");
|
||||
if (pp) {
|
||||
char buf[256];
|
||||
|
||||
while (fgets(buf, sizeof(buf), pp)) {
|
||||
chomp(buf);
|
||||
logit(LOG_NOTICE, "%s%s%s", log, pfx, buf);
|
||||
}
|
||||
|
||||
rc = pclose(pp);
|
||||
}
|
||||
_exit(EX_OSERR);
|
||||
}
|
||||
|
||||
_exit(rc);
|
||||
pp = popen(cmd, "r");
|
||||
if (!pp)
|
||||
_exit(EX_OSERR);
|
||||
|
||||
while (fgets(buf, sizeof(buf), pp)) {
|
||||
chomp(buf);
|
||||
logit(LOG_NOTICE, "%s%s%s", log, pfx, buf);
|
||||
}
|
||||
|
||||
rc = pclose(pp);
|
||||
if (rc == -1)
|
||||
_exit(EX_OSERR);
|
||||
_exit(WEXITSTATUS(rc));
|
||||
} else if (-1 == pid) {
|
||||
err(1, "%s", !log ? args[0] : cmd);
|
||||
if (backup)
|
||||
|
||||
Reference in New Issue
Block a user