<pthread.h> includes
Bruce Evans
bde at zeta.org.au
Fri Aug 19 14:05:02 GMT 2005
On Fri, 19 Aug 2005, Stefan Farfeleder wrote:
> I think some of the headers included by <pthread.h> violate the POSIX
> specification (I'm looking at SUSv3/POSIX 1003.1 2004) by making more
> symbols visible than allowed.
>
> <sys/cdefs.h> Ok
> <sys/types.h> Ok
> <sys/_pthreadtypes.h> Ok
> <sys/time.h> No? (POSIX allows <time.h> which is a subset)
> <sys/signal.h> No?
> <limits.h> No?
> <sched.h> Ok
>
> Is this correct? Should it be fixed?
All of these includes except <sys/cdefs.h> and <sys/pthreadtypes.h> are
wrong IMO:
<sys/cdefs.h> needed, but can be obtained as a side effect
of including almost any other header in the list.
<sys/types.h> only used to declare size_t. We handle this better
in many other headers. The old draft of POSIX that
I'm looking at doesn't say that <pthread.h> declares
size_t, so it might be conformant to use __size_t
in the prototypes.
<sys/_pthreadtypes.h> Ok
<sys/time.h> only used to declare sigset_t and struct timespec.
We have a whole header, <sys/_sigset.h>, to help
declare sigset_t better (it only declares __sigset_t),
and use it in many other headers. We have 2 headers,
<sys/timespec.h> and <sys/_timespec.h>, just to
declare struct timespec, and use them in many other
headers. Here we only need a forward declaration of
struct timespec or maybe struct __timespec, modulo
POSIX bugs. It is a bug in POSIX that <time.h> is
allowed. The old draft of POSIX doesn't say that
<pthread.h> declares sigset_t or struct timespec
(just that it may declare the latter). This is
unlike what it says for other headers. E.g., we
use <sys/timespec.h> in <sys/select.h> to satisfy
the POSIX mistake that a complete struct timespec
must be declared there.
<sys/signal.h> Just namespace pollution.
<limits.h> Just namespace pollution.
<sched.h> only used to declare struct sched_param and to
satisfy a POSIX mistake. A forward declaration
would suffice.
POSIX should say that size_t, sigset_t and struct timespec are completely
declared, and then it would say that [low quality] implementations may
declare everything else in the primary headers that declare these.
Bruce
More information about the freebsd-standards
mailing list