From uclibc Fri Jun 28 21:51:08 2013 From: James Hogan Date: Fri, 28 Jun 2013 21:51:08 +0000 To: uclibc Subject: Re: [PATCH] bits/waitstatus.h: correctly interpret status 0x007f Message-Id: X-MARC-Message: https://marc.info/?l=uclibc&m=137245678031923 On 28 June 2013 22:16, Denys Vlasenko wrote: > I'm not sure we really want this (it adds double evaluation in WIFSTOPPED macro), > but this waitpid status does happen on MIPS. > > Signed-off-by: Denys Vlasenko This patch looks correct and optimal to me. Thanks James > --- > libc/sysdeps/linux/common/bits/waitstatus.h | 14 +++++++++----- > 1 files changed, 9 insertions(+), 5 deletions(-) > > diff --git a/libc/sysdeps/linux/common/bits/waitstatus.h b/libc/sysdeps/linux/common/bits/waitstatus.h > index 45d0fd3..fbca0d2 100644 > --- a/libc/sysdeps/linux/common/bits/waitstatus.h > +++ b/libc/sysdeps/linux/common/bits/waitstatus.h > @@ -24,7 +24,7 @@ > /* Everything extant so far uses these same bits. */ > > > -/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ > +/* If WIFEXITED(STATUS), the low-order 8 bits of exit(N). */ > #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8) > > /* If WIFSIGNALED(STATUS), the terminating signal. */ > @@ -36,12 +36,16 @@ > /* Nonzero if STATUS indicates normal termination. */ > #define __WIFEXITED(status) (__WTERMSIG(status) == 0) > > -/* Nonzero if STATUS indicates termination by a signal. */ > -#define __WIFSIGNALED(status) \ > - (((signed char) (((status) & 0x7f) + 1) >> 1) > 0) > +/* Nonzero if STATUS indicates termination by a signal. > + * Note that status 0x007f is "died from signal 127", not "stopped by signal 0". > + * This does happen on MIPS. > + * The comparison is "< 0xff", not "< 0x7f", because WCOREDUMP bit (0x80) > + * can be set too. > + */ > +#define __WIFSIGNALED(status) (((unsigned)((status) & 0xffff) - 1U) < 0xffU) > > /* Nonzero if STATUS indicates the child is stopped. */ > -#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f) > +#define __WIFSTOPPED(status) (((status) & 0xff) == 0x7f && ((status) & 0xff00)) > > /* Nonzero if STATUS indicates the child continued after a stop. We only > define this if provides the WCONTINUED flag bit. */ _______________________________________________ uClibc mailing list uClibc@uclibc.org http://lists.busybox.net/mailman/listinfo/uclibc