diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-07-23 22:11:22 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-07-23 22:11:22 +0300 |
commit | 52c4321094c627a582834866e33a892d778d755c (patch) | |
tree | b537162878076ca29191d54da608d9a9382bbf49 /builtin.c | |
parent | 6b6f36281032c034e08fada3181437c1162b55c9 (diff) | |
parent | de23ab7bfbea6ee03ef7386c6c203a4b2b7b7116 (diff) | |
download | egawk-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.c | 37 |
1 files changed, 24 insertions, 13 deletions
@@ -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; +} |