diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-02-24 22:31:08 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-02-24 22:31:08 +0000 |
commit | c3fb74d389db31b189fbaab2370bdbb3a8f2c652 (patch) | |
tree | b416a868d939001c63c1c1d103798550d9302730 | |
parent | 230232e5f8aec363bbbab90b52fd21e046fee0e9 (diff) | |
download | glibc-c3fb74d389db31b189fbaab2370bdbb3a8f2c652.zip glibc-c3fb74d389db31b189fbaab2370bdbb3a8f2c652.tar.gz glibc-c3fb74d389db31b189fbaab2370bdbb3a8f2c652.tar.bz2 |
Update.
* posix/sys/wait.h: Handle definitions duplicated in stdlib.h
correctly.
* stdlib/stdlib.h: Handle definition of wait macros correctly.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | posix/sys/wait.h | 44 | ||||
-rw-r--r-- | stdlib/stdlib.h | 52 |
3 files changed, 51 insertions, 49 deletions
@@ -1,5 +1,9 @@ 2000-02-24 Ulrich Drepper <drepper@redhat.com> + * posix/sys/wait.h: Handle definitions duplicated in stdlib.h + correctly. + * stdlib/stdlib.h: Handle definition of wait macros correctly. + * posix/sys/wait.h: Add missing #endif. * stdlib/stdlib.h (setstate): Don't mark argument as const (yet). diff --git a/posix/sys/wait.h b/posix/sys/wait.h index cccbcb8..81b0eb4 100644 --- a/posix/sys/wait.h +++ b/posix/sys/wait.h @@ -34,61 +34,61 @@ typedef __pid_t pid_t; # define __pid_t_defined #endif +/* These macros could also be defined int <stdlib.h>. */ +#ifndef _STDLIB_H /* This will define the `W*' macros for the flag bits to `waitpid', `wait3', and `wait4'. */ -#include <bits/waitflags.h> +# include <bits/waitflags.h> -#ifdef __USE_BSD +# ifdef __USE_BSD /* Lots of hair to allow traditional BSD use of `union wait' as well as POSIX.1 use of `int' for the status word. */ -# if defined __GNUC__ && !defined __cplusplus -# define __WAIT_INT(status) \ +# if defined __GNUC__ && !defined __cplusplus +# define __WAIT_INT(status) \ (__extension__ ({ union { __typeof(status) __in; int __i; } __u; \ __u.__in = (status); __u.__i; })) -# else -# define __WAIT_INT(status) (*(int *) &(status)) -# endif +# else +# define __WAIT_INT(status) (*(int *) &(status)) +# endif /* This is the type of the argument to `wait'. The funky union causes redeclarations with ether `int *' or `union wait *' to be allowed without complaint. __WAIT_STATUS_DEFN is the type used in the actual function definitions. */ -# if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus -# define __WAIT_STATUS void * -# define __WAIT_STATUS_DEFN void * -# else +# if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus +# define __WAIT_STATUS void * +# define __WAIT_STATUS_DEFN void * +# else /* This works in GCC 2.6.1 and later. */ typedef union { union wait *__uptr; int *__iptr; } __WAIT_STATUS __attribute__ ((__transparent_union__)); -# define __WAIT_STATUS_DEFN int * -# endif +# define __WAIT_STATUS_DEFN int * +# endif -#else /* Don't use BSD. */ +# else /* Don't use BSD. */ -# define __WAIT_INT(status) (status) -# define __WAIT_STATUS int * -# define __WAIT_STATUS_DEFN int * +# define __WAIT_INT(status) (status) +# define __WAIT_STATUS int * +# define __WAIT_STATUS_DEFN int * -#endif /* Use BSD. */ +# endif /* Use BSD. */ /* This will define all the `__W*' macros. */ -#include <bits/waitstatus.h> +# include <bits/waitstatus.h> -/* These macros could also be defined int <stdlib.h>. */ -#ifndef WEXITSTATUS # define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status)) # define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status)) # define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status)) # define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status)) # define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status)) # define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status)) -#endif +#endif /* <stdlib.h> not included. */ #ifdef __USE_BSD # define WCOREFLAG __WCOREFLAG diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index 8857f35..604ab64 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -37,60 +37,58 @@ __BEGIN_DECLS #ifndef __need_malloc_and_calloc #define _STDLIB_H 1 -#ifdef __USE_XOPEN +#if defined __USE_XOPEN && !defined _SYS_WAIT_H /* XPG requires a few symbols from <sys/wait.h> being defined. */ # include <bits/waitflags.h> # include <bits/waitstatus.h> -# ifndef WEXITSTATUS -# ifdef __USE_BSD +# ifdef __USE_BSD /* Lots of hair to allow traditional BSD use of `union wait' as well as POSIX.1 use of `int' for the status word. */ -# if defined __GNUC__ && !defined __cplusplus -# define __WAIT_INT(status) \ +# if defined __GNUC__ && !defined __cplusplus +# define __WAIT_INT(status) \ (__extension__ ({ union { __typeof(status) __in; int __i; } __u; \ __u.__in = (status); __u.__i; })) -# else -# define __WAIT_INT(status) (*(int *) &(status)) -# endif +# else +# define __WAIT_INT(status) (*(int *) &(status)) +# endif /* This is the type of the argument to `wait'. The funky union causes redeclarations with ether `int *' or `union wait *' to be allowed without complaint. __WAIT_STATUS_DEFN is the type used in the actual function definitions. */ -# if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus -# define __WAIT_STATUS void * -# define __WAIT_STATUS_DEFN void * -# else +# if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus +# define __WAIT_STATUS void * +# define __WAIT_STATUS_DEFN void * +# else /* This works in GCC 2.6.1 and later. */ typedef union { union wait *__uptr; int *__iptr; } __WAIT_STATUS __attribute__ ((__transparent_union__)); -# define __WAIT_STATUS_DEFN int * -# endif +# define __WAIT_STATUS_DEFN int * +# endif -# else /* Don't use BSD. */ +# else /* Don't use BSD. */ -# define __WAIT_INT(status) (status) -# define __WAIT_STATUS int * -# define __WAIT_STATUS_DEFN int * +# define __WAIT_INT(status) (status) +# define __WAIT_STATUS int * +# define __WAIT_STATUS_DEFN int * -# endif /* Use BSD. */ +# endif /* Use BSD. */ /* Define the macros <sys/wait.h> also would define this way. */ -# define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status)) -# define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status)) -# define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status)) -# define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status)) -# define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status)) -# define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status)) -# endif -#endif +# define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status)) +# define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status)) +# define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status)) +# define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status)) +# define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status)) +# define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status)) +#endif /* X/Open and <sys/wait.h> not included. */ /* Returned by `div'. */ typedef struct |