From owner-freebsd-bugs@FreeBSD.ORG Mon Apr 25 09:20:13 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7CBBD1065677 for ; Mon, 25 Apr 2011 09:20:13 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 503278FC14 for ; Mon, 25 Apr 2011 09:20:13 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p3P9KDuc084985 for ; Mon, 25 Apr 2011 09:20:13 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p3P9KCqa084984; Mon, 25 Apr 2011 09:20:12 GMT (envelope-from gnats) Date: Mon, 25 Apr 2011 09:20:12 GMT Message-Id: <201104250920.p3P9KCqa084984@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Bruce Evans Cc: Subject: Re: misc/156637: sys/types.h can't be included when _XOPEN_SOURCE is defined X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Bruce Evans List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Apr 2011 09:20:13 -0000 The following reply was made to PR misc/156637; it has been noted by GNATS. From: Bruce Evans To: Robert Andersson Cc: freebsd-gnats-submit@freebsd.org, freebsd-bugs@freebsd.org Subject: Re: misc/156637: sys/types.h can't be included when _XOPEN_SOURCE is defined Date: Mon, 25 Apr 2011 19:10:00 +1000 (EST) On Mon, 25 Apr 2011, Robert Andersson wrote: > >> Description: > When including 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 > > ... >> 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. 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 ). I didn't notice it in connection with _XOPEN_SOURCE, but by general principles. % 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) */ % }; % Bruce