aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-07-23 22:11:22 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-07-23 22:11:22 +0300
commit52c4321094c627a582834866e33a892d778d755c (patch)
treeb537162878076ca29191d54da608d9a9382bbf49 /builtin.c
parent6b6f36281032c034e08fada3181437c1162b55c9 (diff)
parentde23ab7bfbea6ee03ef7386c6c203a4b2b7b7116 (diff)
downloadegawk-52c4321094c627a582834866e33a892d778d755c.tar.gz
egawk-52c4321094c627a582834866e33a892d778d755c.tar.bz2
egawk-52c4321094c627a582834866e33a892d778d755c.zip
Merge branch 'master' into feature/cmake
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/builtin.c b/builtin.c
index 77cf3fc5..87f7fb23 100644
--- a/builtin.c
+++ b/builtin.c
@@ -2124,22 +2124,12 @@ do_system(int nargs)
; /* leave it alone, full 16 bits */
else if (do_traditional)
#ifdef __MINGW32__
- ret = (((unsigned)status) & ~0xC0000000);
+ ret = (((unsigned)status) & ~0xC0000000);
#else
ret = (status / 256.0);
#endif
- else if (WIFEXITED(status))
- ret = WEXITSTATUS(status); /* normal exit */
- else if (WIFSIGNALED(status)) {
- bool coredumped = false;
-#ifdef WCOREDUMP
- coredumped = WCOREDUMP(status);
-#endif
- /* use 256 since exit values are 8 bits */
- ret = WTERMSIG(status) +
- (coredumped ? 512 : 256);
- } else
- ret = 0; /* shouldn't get here */
+ else
+ ret = sanitize_exit_status(status);
}
if ((BINMODE & BINMODE_INPUT) != 0)
@@ -4054,3 +4044,24 @@ mbc_char_count(const char *ptr, size_t numbytes)
return sum;
}
+
+/* sanitize_exit_status --- convert a 16 bit Unix exit status into something reasonable */
+
+int sanitize_exit_status(int status)
+{
+ int ret = 0;
+
+ if (WIFEXITED(status))
+ ret = WEXITSTATUS(status); /* normal exit */
+ else if (WIFSIGNALED(status)) {
+ bool coredumped = false;
+#ifdef WCOREDUMP
+ coredumped = WCOREDUMP(status);
+#endif
+ /* use 256 since exit values are 8 bits */
+ ret = WTERMSIG(status) + (coredumped ? 512 : 256);
+ } else
+ ret = 0; /* shouldn't get here */
+
+ return ret;
+}