Update.
* 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:
parent
230232e5f8
commit
c3fb74d389
@ -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).
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user