misc/156637: sys/types.h can't be included when _XOPEN_SOURCE
brde at optusnet.com.au
Mon Apr 25 09:20:13 UTC 2011
The following reply was made to PR misc/156637; it has been noted by GNATS.
From: Bruce Evans <brde at optusnet.com.au>
To: Robert Andersson <streambag at streambag.se>
Cc: freebsd-gnats-submit at freebsd.org, freebsd-bugs at freebsd.org
Subject: Re: misc/156637: sys/types.h can't be included when _XOPEN_SOURCE
Date: Mon, 25 Apr 2011 19:10:00 +1000 (EST)
On Mon, 25 Apr 2011, Robert Andersson wrote:
> 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:
> 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.
I've used the following fix (the first of the above) for 10 years or
so (it got lost in fixes for mounds of style bugs in <sys/file.h>).
I didn't notice it in connection with _XOPEN_SOURCE, but by general
% Index: file.h
% RCS file: /home/ncvs/src/sys/sys/file.h,v
% retrieving revision 1.65
% diff -u -2 -r1.65 file.h
% --- file.h 19 Jun 2004 11:38:00 -0000 1.65
% +++ file.h 20 Jun 2004 02:11:04 -0000
% @@ -151,5 +142,5 @@
% void *xf_data; /* file descriptor specific data */
% void *xf_vnode; /* vnode pointer */
% - u_int xf_flag; /* flags (see fcntl.h) */
% + unsigned xf_flag; /* flags (see fcntl.h) */
More information about the freebsd-bugs