diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2016-06-16 01:44:10 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2016-06-16 01:44:10 +0000 |
commit | 6cc8ebb4c7209e11827e7f561ba327283928f2eb (patch) | |
tree | aad33db17372793b0e6d4a210806f1f88d4b9941 /lib/libsystem.c | |
parent | 19c59f209876d5e57323a88783e26898730028e9 (diff) | |
download | netpbm-mirror-6cc8ebb4c7209e11827e7f561ba327283928f2eb.tar.gz netpbm-mirror-6cc8ebb4c7209e11827e7f561ba327283928f2eb.tar.xz netpbm-mirror-6cc8ebb4c7209e11827e7f561ba327283928f2eb.zip |
Add workaround for libc problem with termination status macros, so they work with constant argument
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@2788 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'lib/libsystem.c')
-rw-r--r-- | lib/libsystem.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/libsystem.c b/lib/libsystem.c index e13a20ac..9491c03a 100644 --- a/lib/libsystem.c +++ b/lib/libsystem.c @@ -320,12 +320,24 @@ signalName(unsigned int const signalClass) { const char * -pm_termStatusDesc(int const termStatus) { +pm_termStatusDesc(int const termStatusArg) { /*---------------------------------------------------------------------------- English description of process termination status 'termStatus'. -----------------------------------------------------------------------------*/ const char * retval; + /* WIFEXITED, etc. do not work with a constant argument in older GNU C + library. Compilation fails with "attempt to assign read-only + location". This is because The GNU C library has some magic to allow + for a BSD 'union wait' (instead of int) argument to WIFEXITED. The + magic involves defining a variable with 'typeof' the argument and + assigning to that variable. + + To work around this, we make sure the argument is not constant. + */ + + int termStatus = termStatusArg; + if (WIFEXITED(termStatus)) { int const exitStatus = WEXITSTATUS(termStatus); |