From e1513c5645bf5ba9aebe17c48bc178e0b6c01282 Mon Sep 17 00:00:00 2001 From: cheloha Date: Tue, 9 Jan 2018 17:59:29 +0000 Subject: [PATCH] Extract compile_mode command status with WEXITSTATUS. Also tell the user if the parent shell spawned by popen(3) was killed by a signal. Discussed with jca@. ok millert@ jca@ deraadt@ --- usr.bin/mg/grep.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/usr.bin/mg/grep.c b/usr.bin/mg/grep.c index 6ee750b04b4..d2c257f5ae4 100644 --- a/usr.bin/mg/grep.c +++ b/usr.bin/mg/grep.c @@ -1,9 +1,11 @@ -/* $OpenBSD: grep.c,v 1.45 2017/10/12 14:12:00 florian Exp $ */ +/* $OpenBSD: grep.c,v 1.46 2018/01/09 17:59:29 cheloha Exp $ */ /* This file is in the public domain */ #include #include +#include + #include #include #include @@ -180,7 +182,7 @@ compile_mode(const char *name, const char *command) char *buf; size_t sz; ssize_t len; - int ret, n; + int ret, n, status; char cwd[NFILEN], qcmd[NFILEN]; char timestr[NTIME]; time_t t; @@ -226,11 +228,16 @@ compile_mode(const char *name, const char *command) t = time(NULL); strftime(timestr, sizeof(timestr), "%a %b %e %T %Y", localtime(&t)); addline(bp, ""); - if (ret != 0) - addlinef(bp, "Command exited abnormally with code %d" - " at %s", ret, timestr); - else - addlinef(bp, "Command finished at %s", timestr); + if (WIFEXITED(ret)) { + status = WEXITSTATUS(ret); + if (status == 0) + addlinef(bp, "Command finished at %s", timestr); + else + addlinef(bp, "Command exited abnormally with code %d " + "at %s", status, timestr); + } else + addlinef(bp, "Subshell killed by signal %d at %s", + WTERMSIG(ret), timestr); bp->b_dotp = bfirstlp(bp); bp->b_modes[0] = name_mode("fundamental"); -- 2.20.1