Subject: Re: _POSIX_C_SOURCE 199309L and when to use _NETBSD_SOURCE?
To: None <current-users@NetBSD.org>
From: Jeremy C. Reed <reed@reedmedia.net>
List: current-users
Date: 12/15/2006 13:17:01
I didn't get any feedback.

I have done more research.

Are our headers broken? This is NetBSD/i386 3.99.24.

> > /usr/include/unistd.h:321: error: expected declaration specifiers or '...' before 'u_int'
> > In file included from ../include/misc.h:143,
> >                  from utils.c:83:
> > /usr/include/stdlib.h:246: error: expected ')' before '*' token

u_char is unknown. It is defined in /usr/include/sys/types.h:

#if defined(_NETBSD_SOURCE)
typedef unsigned char   u_char;
typedef unsigned short  u_short;
...

This _NETBSD_SOURCE is defined in /usr/include/sys/featuretest.h which 
basically pulled in by every NetBSD include header.

#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
    !defined(_XOPEN_SOURCE) && !defined(_NETBSD_SOURCE)
#define _NETBSD_SOURCE 1
#endif

So because _POSIX_C_SOURCE is defined by default I have _NETBSD_SOURCE not 
defined and so u_char is not defined.

Note that u_char is not used directly by the code I am trying to build.

> > In file included from utils.c:102:
> > /usr/include/signal.h:69: error: expected ')' before 'int'

pthread_t is unknown. It is defined in /usr/include/pthread_types.h which 
is is included by /usr/include/pthread.h and /usr/include/sys/types.h.
The sys/types.h only pulls it in like:

#if !defined(_KERNEL) && !defined(_STANDALONE)
#if (_POSIX_C_SOURCE - 0L) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
    defined(_NETBSD_SOURCE)
#include <pthread_types.h>
#endif
#endif

In this case, 199506L is too new.

Why is pthread_t being used?

Are our headers broken?

> > In file included from utils.c:107:
> > /usr/include/sys/wait.h:135: error: duplicate member 'w_Filler'
> > [lots of these elided]
> > /usr/include/sys/wait.h:155: error: duplicate member '({anonymous})'