mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 01:33:36 +08:00
Installed-header hygiene (BZ#20366): conditionally defined structures.
Several network-related structures are defined conditionally under __USE_MISC, but unconditionally used by other headers. The path of least resistance is usually to condition the uses on __USE_MISC as well. * sysdeps/mach/hurd/net/if_ppp.h * sysdeps/unix/sysv/linux/net/if_ppp.h: Only define struct ifpppstatsreq and struct ifpppcstatsreq if __USE_MISC is defined, to ensure struct ifreq is declared. * inet/netinet/ether.h: Condition all function prototypes on __USE_MISC, to ensure struct ether_addr is declared. sys/socket.h defines struct osockaddr only under __USE_MISC, whereas protocols/talkd.h requires it unconditionally. Here it doesn't make sense to condition the entire body of protocols/talkd.h on __USE_MISC. Rather than complicate sys/socket.h with a __need macro or duplicate the definition, I am introducing a new concept: tiny headers named bits/types/TYPE.h that define TYPE and nothing else. This can, I hope, ultimately replace *all* the __need macros. The guard macro for such headers will be __TYPE_defined, just in case application or third-party library code is looking at them. * socket/bits/types/struct_osockaddr.h: New header. * include/bits/types/struct_osockaddr.h: New wrapper. * socket/Makefile: Install the new header. * socket/sys/socket.h, inet/protocols/talkd.h: Refer to bits/types/struct_osockaddr.h for the definition of struct osockaddr.
This commit is contained in:
parent
11160cb76f
commit
f2bea4da2e
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
||||
2016-09-23 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* sysdeps/mach/hurd/net/if_ppp.h
|
||||
* sysdeps/unix/sysv/linux/net/if_ppp.h:
|
||||
Only define struct ifpppstatsreq and struct ifpppcstatsreq
|
||||
if __USE_MISC is defined, to ensure struct ifreq is declared.
|
||||
|
||||
* inet/netinet/ether.h: Condition all function prototypes
|
||||
on __USE_MISC, to ensure struct ether_addr is declared.
|
||||
|
||||
* socket/bits/types/struct_osockaddr.h: New header.
|
||||
* include/bits/types/struct_osockaddr.h: New wrapper.
|
||||
* socket/Makefile: Install the new header.
|
||||
* socket/sys/socket.h, inet/protocols/talkd.h:
|
||||
Refer to bits/types/struct_osockaddr.h for the definition of
|
||||
struct osockaddr.
|
||||
|
||||
2016-09-23 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* bits/in.h, gmon/sys/gmon.h, inet/netinet/igmp.h
|
||||
|
1
include/bits/types/struct_osockaddr.h
Normal file
1
include/bits/types/struct_osockaddr.h
Normal file
@ -0,0 +1 @@
|
||||
#include "../../socket/bits/types/struct_osockaddr.h"
|
@ -24,6 +24,7 @@
|
||||
/* Get definition of `struct ether_addr'. */
|
||||
#include <netinet/if_ether.h>
|
||||
|
||||
#ifdef __USE_MISC
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Convert 48 bit Ethernet ADDRess to ASCII. */
|
||||
@ -49,5 +50,6 @@ extern int ether_line (const char *__line, struct ether_addr *__addr,
|
||||
char *__hostname) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
#endif /* Use misc. */
|
||||
|
||||
#endif /* netinet/ether.h */
|
||||
|
@ -53,6 +53,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <stdint.h>
|
||||
#include <bits/types/struct_osockaddr.h>
|
||||
|
||||
/*
|
||||
* Client->server request message format.
|
||||
|
@ -23,7 +23,8 @@ subdir := socket
|
||||
include ../Makeconfig
|
||||
|
||||
headers := sys/socket.h sys/un.h bits/sockaddr.h bits/socket.h \
|
||||
bits/socket2.h sys/socketvar.h net/if.h
|
||||
bits/socket2.h bits/types/struct_osockaddr.h \
|
||||
sys/socketvar.h net/if.h
|
||||
|
||||
routines := accept bind connect getpeername getsockname getsockopt \
|
||||
listen recv recvfrom recvmsg send sendmsg sendto \
|
||||
|
12
socket/bits/types/struct_osockaddr.h
Normal file
12
socket/bits/types/struct_osockaddr.h
Normal file
@ -0,0 +1,12 @@
|
||||
#ifndef __osockaddr_defined
|
||||
#define __osockaddr_defined 1
|
||||
|
||||
/* This is the 4.3 BSD `struct sockaddr' format, which is used as wire
|
||||
format in the grotty old 4.3 `talk' protocol. */
|
||||
struct osockaddr
|
||||
{
|
||||
unsigned short int sa_family;
|
||||
unsigned char sa_data[14];
|
||||
};
|
||||
|
||||
#endif
|
@ -38,13 +38,7 @@ __BEGIN_DECLS
|
||||
#include <bits/socket.h>
|
||||
|
||||
#ifdef __USE_MISC
|
||||
/* This is the 4.3 BSD `struct sockaddr' format, which is used as wire
|
||||
format in the grotty old 4.3 `talk' protocol. */
|
||||
struct osockaddr
|
||||
{
|
||||
unsigned short int sa_family;
|
||||
unsigned char sa_data[14];
|
||||
};
|
||||
# include <bits/types/struct_osockaddr.h>
|
||||
#endif
|
||||
|
||||
/* The following constants should be used for the second parameter of
|
||||
|
@ -119,6 +119,8 @@ struct ppp_option_data {
|
||||
int transmit;
|
||||
};
|
||||
|
||||
/* 'struct ifreq' is only available from net/if.h under __USE_MISC. */
|
||||
#ifdef __USE_MISC
|
||||
struct ifpppstatsreq {
|
||||
struct ifreq b;
|
||||
struct ppp_stats stats; /* statistic information */
|
||||
@ -131,6 +133,7 @@ struct ifpppcstatsreq {
|
||||
|
||||
#define ifr__name b.ifr_ifrn.ifrn_name
|
||||
#define stats_ptr b.ifr_ifru.ifru_data
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ioctl definitions.
|
||||
|
@ -118,6 +118,8 @@ struct ppp_option_data {
|
||||
int transmit;
|
||||
};
|
||||
|
||||
/* 'struct ifreq' is only available from net/if.h under __USE_MISC. */
|
||||
#ifdef __USE_MISC
|
||||
struct ifpppstatsreq {
|
||||
struct ifreq b;
|
||||
struct ppp_stats stats; /* statistic information */
|
||||
@ -130,6 +132,7 @@ struct ifpppcstatsreq {
|
||||
|
||||
#define ifr__name b.ifr_ifrn.ifrn_name
|
||||
#define stats_ptr b.ifr_ifru.ifru_data
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ioctl definitions.
|
||||
|
Loading…
Reference in New Issue
Block a user