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
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Apr 25 08:20:18 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Robert Andersson
>Release: FreeBSD 8.2-RELEASE i386
>Organization:
>Environment:
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
>Description:
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:
http://www.mail-archive.com/freebsd-hackers@freebsd.org/msg69469.html
>How-To-Repeat:
Try to compile the following code:
#define _XOPEN_SOURCE 500
#include <sys/file.h>
int main(int argc, char *argv[]) {
return 0;
}
>Fix:
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.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list