misc/156637: sys/types.h can't be included when _XOPEN_SOURCE is defined

Robert Andersson streambag at streambag.se
Mon Apr 25 08:20:19 UTC 2011

>Number:         156637
>Category:       misc
>Synopsis:       sys/types.h can't be included when _XOPEN_SOURCE is defined
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Apr 25 08:20:18 UTC 2011
>Originator:     Robert Andersson
>Release:        FreeBSD 8.2-RELEASE i386
System: FreeBSD maya 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Feb 18 02:24:46 UTC
 2011 root at almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

When including <sys/file.h> with _XOPEN_SOURCE defined to 500 or higher, compila
tion will fail with a message similar to this one (using clang, gcc fails with a
 similar message):

In file included from main.c:3:
/usr/include/sys/file.h:161:2: error: unknown type name 'u_int'
        u_int   xf_flag;        /* flags (see fcntl.h) */

u_int is defined in types.h, but it is wrapped in a #if __BSD_VISIBLE.

__BSD_VISIBLE is defined in cdefs.h only if _POSIX_C_SOURCE is not defined (whic
h it is if _XOPEN_SOURCE is defined).

I found the following (short) thread about this problem from 2009:

Try to compile the following code:

#define _XOPEN_SOURCE 500
#include <sys/file.h>

int main(int argc, char *argv[]) {
    return 0;

I'm not sure what the correct solution is. Any one of the following would solve the problem:
* sys/file.h should not use u_int
* The relevant parts of sys/file.h should be wrapped in #if __BSD_VISIBLE
* The definition of u_int should not be wrapped in #if __BSD_VISIBLE
* _XOPEN_SOURCE >= 500 should not imply _POSIX_C_SOURCE
* _POSIX_C_SOURCE should not stop __BSD_VISIBLE from being defined.


More information about the freebsd-bugs mailing list