* posix/sys/wait.h: Handle definitions duplicated in stdlib.h
	correctly.
	* stdlib/stdlib.h: Handle definition of wait macros correctly.
This commit is contained in:
Ulrich Drepper 2000-02-24 22:31:08 +00:00
parent 230232e5f8
commit c3fb74d389
3 changed files with 53 additions and 51 deletions

View File

@ -1,5 +1,9 @@
2000-02-24 Ulrich Drepper <drepper@redhat.com> 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. * posix/sys/wait.h: Add missing #endif.
* stdlib/stdlib.h (setstate): Don't mark argument as const (yet). * stdlib/stdlib.h (setstate): Don't mark argument as const (yet).

View File

@ -34,61 +34,61 @@ typedef __pid_t pid_t;
# define __pid_t_defined # define __pid_t_defined
#endif #endif
/* These macros could also be defined int <stdlib.h>. */
#ifndef _STDLIB_H
/* This will define the `W*' macros for the flag /* This will define the `W*' macros for the flag
bits to `waitpid', `wait3', and `wait4'. */ 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' /* Lots of hair to allow traditional BSD use of `union wait'
as well as POSIX.1 use of `int' for the status word. */ as well as POSIX.1 use of `int' for the status word. */
# if defined __GNUC__ && !defined __cplusplus # if defined __GNUC__ && !defined __cplusplus
# define __WAIT_INT(status) \ # define __WAIT_INT(status) \
(__extension__ ({ union { __typeof(status) __in; int __i; } __u; \ (__extension__ ({ union { __typeof(status) __in; int __i; } __u; \
__u.__in = (status); __u.__i; })) __u.__in = (status); __u.__i; }))
# else # else
# define __WAIT_INT(status) (*(int *) &(status)) # define __WAIT_INT(status) (*(int *) &(status))
# endif # endif
/* This is the type of the argument to `wait'. The funky union /* This is the type of the argument to `wait'. The funky union
causes redeclarations with ether `int *' or `union wait *' to be causes redeclarations with ether `int *' or `union wait *' to be
allowed without complaint. __WAIT_STATUS_DEFN is the type used in allowed without complaint. __WAIT_STATUS_DEFN is the type used in
the actual function definitions. */ the actual function definitions. */
# if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus # if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
# define __WAIT_STATUS void * # define __WAIT_STATUS void *
# define __WAIT_STATUS_DEFN void * # define __WAIT_STATUS_DEFN void *
# else # else
/* This works in GCC 2.6.1 and later. */ /* This works in GCC 2.6.1 and later. */
typedef union typedef union
{ {
union wait *__uptr; union wait *__uptr;
int *__iptr; int *__iptr;
} __WAIT_STATUS __attribute__ ((__transparent_union__)); } __WAIT_STATUS __attribute__ ((__transparent_union__));
# define __WAIT_STATUS_DEFN int *
# endif
# else /* Don't use BSD. */
# define __WAIT_INT(status) (status)
# define __WAIT_STATUS int *
# define __WAIT_STATUS_DEFN int * # define __WAIT_STATUS_DEFN int *
# endif
#else /* Don't use BSD. */ # endif /* Use BSD. */
# define __WAIT_INT(status) (status)
# define __WAIT_STATUS int *
# define __WAIT_STATUS_DEFN int *
#endif /* Use BSD. */
/* This will define all the `__W*' macros. */ /* 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 WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status))
# define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status)) # define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status))
# define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status)) # define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status))
# define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status)) # define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status))
# define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status)) # define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status))
# define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status)) # define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status))
#endif #endif /* <stdlib.h> not included. */
#ifdef __USE_BSD #ifdef __USE_BSD
# define WCOREFLAG __WCOREFLAG # define WCOREFLAG __WCOREFLAG

View File

@ -37,60 +37,58 @@ __BEGIN_DECLS
#ifndef __need_malloc_and_calloc #ifndef __need_malloc_and_calloc
#define _STDLIB_H 1 #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. */ /* XPG requires a few symbols from <sys/wait.h> being defined. */
# include <bits/waitflags.h> # include <bits/waitflags.h>
# include <bits/waitstatus.h> # include <bits/waitstatus.h>
# ifndef WEXITSTATUS # ifdef __USE_BSD
# ifdef __USE_BSD
/* Lots of hair to allow traditional BSD use of `union wait' /* Lots of hair to allow traditional BSD use of `union wait'
as well as POSIX.1 use of `int' for the status word. */ as well as POSIX.1 use of `int' for the status word. */
# if defined __GNUC__ && !defined __cplusplus # if defined __GNUC__ && !defined __cplusplus
# define __WAIT_INT(status) \ # define __WAIT_INT(status) \
(__extension__ ({ union { __typeof(status) __in; int __i; } __u; \ (__extension__ ({ union { __typeof(status) __in; int __i; } __u; \
__u.__in = (status); __u.__i; })) __u.__in = (status); __u.__i; }))
# else # else
# define __WAIT_INT(status) (*(int *) &(status)) # define __WAIT_INT(status) (*(int *) &(status))
# endif # endif
/* This is the type of the argument to `wait'. The funky union /* This is the type of the argument to `wait'. The funky union
causes redeclarations with ether `int *' or `union wait *' to be causes redeclarations with ether `int *' or `union wait *' to be
allowed without complaint. __WAIT_STATUS_DEFN is the type used in allowed without complaint. __WAIT_STATUS_DEFN is the type used in
the actual function definitions. */ the actual function definitions. */
# if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus # if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
# define __WAIT_STATUS void * # define __WAIT_STATUS void *
# define __WAIT_STATUS_DEFN void * # define __WAIT_STATUS_DEFN void *
# else # else
/* This works in GCC 2.6.1 and later. */ /* This works in GCC 2.6.1 and later. */
typedef union typedef union
{ {
union wait *__uptr; union wait *__uptr;
int *__iptr; int *__iptr;
} __WAIT_STATUS __attribute__ ((__transparent_union__)); } __WAIT_STATUS __attribute__ ((__transparent_union__));
# define __WAIT_STATUS_DEFN int *
# endif
# else /* Don't use BSD. */
# define __WAIT_INT(status) (status)
# define __WAIT_STATUS int *
# define __WAIT_STATUS_DEFN int * # define __WAIT_STATUS_DEFN int *
# endif
# endif /* Use BSD. */ # else /* Don't use BSD. */
# define __WAIT_INT(status) (status)
# define __WAIT_STATUS int *
# define __WAIT_STATUS_DEFN int *
# endif /* Use BSD. */
/* Define the macros <sys/wait.h> also would define this way. */ /* Define the macros <sys/wait.h> also would define this way. */
# define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status)) # define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status))
# define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status)) # define WTERMSIG(status) __WTERMSIG(__WAIT_INT(status))
# define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status)) # define WSTOPSIG(status) __WSTOPSIG(__WAIT_INT(status))
# define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status)) # define WIFEXITED(status) __WIFEXITED(__WAIT_INT(status))
# define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status)) # define WIFSIGNALED(status) __WIFSIGNALED(__WAIT_INT(status))
# define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status)) # define WIFSTOPPED(status) __WIFSTOPPED(__WAIT_INT(status))
# endif #endif /* X/Open and <sys/wait.h> not included. */
#endif
/* Returned by `div'. */ /* Returned by `div'. */
typedef struct typedef struct