On Mon, 25 Apr 2011, Robert Andersson wrote:


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

...
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 <sys/file.h>).
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
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to