On 09/04/2012 11:23 AM, Jasper Lievisse Adriaanse wrote:
On Tue, Sep 04, 2012 at 11:08:30AM -0600, Eric Blake wrote:
> [adding gnulib]
>
> Ouch. The POSIX definition of <net/if.h> doesn't include any interface
> that needs to use struct sockaddr. Which OpenBSD extension function is
> triggering this warning? According to POSIX, this .c file should compile:
>
> #define _POSIX_C_SOURCE 200809L
> #include <net/if.h>
> #include <sys/socket.h>
> struct if_nameindex i;
>
That snippet of example code does not compile on OpenBSD:
In file included from foo.c:2:
/usr/include/net/if.h:112: error: expected specifier-qualifier-list before
'u_int'
Could you please reference where POSIX states it should, so this can hopefully
get fixed in OpenBSD.
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/net_if.h.html#ta...
doesn't mention any prerequisite headers for <net/if.h>. Furthermore,
looking at each of the functions in that header, none of them call out a
prerequisite:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/if_freenameinde...
http://pubs.opengroup.org/onlinepubs/9699919799/functions/if_indextoname....
http://pubs.opengroup.org/onlinepubs/9699919799/functions/if_nameindex.html#
http://pubs.opengroup.org/onlinepubs/9699919799/functions/if_nametoindex....
If a header cannot be used in isolation, then POSIX would call out
multiple headers. For comparison, here's a case where POSIX 2008 _does_
call out multiple headers:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/creat.html
creat() cannot use the S_IRUSR and other constants for its mode_t
argument unless you also include <sys/stat.h>, since <fcntl.h> was not
required to be self-contained on that front (there's talk underway about
getting that fixed in the next version of POSIX, but that's another
story...
http://austingroupbugs.net/view.php?id=591)
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org