Skip to content

Commit

Permalink
Installed-header hygiene (BZ#20366): obsolete BSD u_* types.
Browse files Browse the repository at this point in the history
The types u_char, u_short, u_int, u_long, ushort, uint, ulong, u_int8_t,
u_int16_t, u_int32_t, u_int64_t, quad_t, and u_quad_t are BSDisms that
have never been standardized.  While glibc should continue to *provide*
these types for compatibility's sake, its public headers should not
use them.

The meat of this change was mechanically generated by the following
shell command:

    perl -pi~ -e '
        s/\b(__)?u_char\b/unsigned char/g;
        s/\b(__)?u_?short\b/unsigned short/g;
        s/\b(__)?u_?int\b/unsigned int/g;
        s/\b(__)?u_?long\b/unsigned long/g;
        s/\b(__)?u_int8_t\b/uint8_t/g;
        s/\b(__)?u_int16_t\b/uint16_t/g;
        s/\b(__)?u_int32_t\b/uint32_t/g;
        s/\b(__)?u_int64_t\b/uint64_t/g;
        s/\b(__)?u_quad_t\b/uint64_t/g;
        s/\b(__)?quad_t\b/uint64_t/g;
    ' $(grep -lE -e '\<((__)?(quad_t|u(short|int|long|_(char|short|int([0-9]+_t)?|long|quad_t))))\>' \
        $(grep -LE '\<(_(SYS|BITS)_TYPES_H|rpc/(rpc|rpc_msg|types|xdr)\.h)\>' \
          $(find . \( -false $(sed 's/^/-o -name /' all-installed-headers) \
                   \) -printf '%P\n' | sort -u)))

where 'all-installed-headers' was a list of the basenames of all installed
header files, manually extracted from the Makefiles.  Non-installed
wrapper headers in include/ are also adjusted, for consistency.
I then manually fixed up indentation and line-wrapping.

sys/types.h and bits/types.h are excluded because they must continue
to define the u_* types (under __USE_MISC) for compatibility with
applications.  They do not use these types themselves.

All headers that (transitively) include rpc/types.h are also excluded,
for three reasons.  First, the u_* types are defined by rpc/types.h,
unconditionally (not just under __USE_MISC) so they are logically part
of the SunRPC API.  Second, many of those headers appear to be
machine-generated.  Third, it's my understanding that we are getting
rid of as much of SunRPC as possible in the near future.

(The one file under sunrpc/ that's touched, sunrpc/rpc/rpc_des.h, does
*not* include rpc/types.h.  This may itself be a bug.)

After changing from u_intNN_t to uintNN_t, a number of headers now
need to include stdint.h to pick up those types.  It might be more
hygenic, namespace-wise, to use __uintNN_t instead, but none of these
headers are bound by ISO or POSIX to do so, and it's unlikely that
anyone using them will be bothered.  (The two files that were using
__-prefixed versions of the u_types, sysdeps/mach/hurd/net/route.h and
sysdeps/unix/sysv/linux/net/route.h, both already also contained uses of
the unprefixed versions.)

Some of these files directly included features.h and/or sys/cdefs.h,
which I removed, as the style generally seems to be to let sys/types.h
do that for us.  (This does not change the set of definitions exposed
by any header; sys/types.h unconditionally includes both features.h
and sys/cdefs.h.)

One file included asm/types.h unnecessarily.

	* bits/in.h, gmon/sys/gmon.h, inet/netinet/igmp.h
	* inet/protocols/routed.h, inet/protocols/talkd.h
	* inet/protocols/timed.h, io/fts.h, nptl_db/thread_db.h
	* resolv/arpa/nameser.h, resolv/resolv.h, sunrpc/rpc/rpc_des.h
	* sysdeps/generic/netinet/if_ether.h
	* sysdeps/generic/netinet/in_systm.h
	* sysdeps/generic/netinet/ip.h, sysdeps/generic/netinet/tcp.h
	* sysdeps/gnu/netinet/ip_icmp.h, sysdeps/gnu/netinet/tcp.h
	* sysdeps/gnu/netinet/udp.h, sysdeps/mach/hurd/net/ethernet.h
	* sysdeps/mach/hurd/net/if_arp.h
	* sysdeps/mach/hurd/net/if_ppp.h
	* sysdeps/mach/hurd/net/route.h, sysdeps/mach/sys/reboot.h
	* sysdeps/unix/sysv/linux/bits/in.h
	* sysdeps/unix/sysv/linux/net/ethernet.h
	* sysdeps/unix/sysv/linux/net/if_arp.h
	* sysdeps/unix/sysv/linux/net/if_ppp.h
	* sysdeps/unix/sysv/linux/net/if_shaper.h
	* sysdeps/unix/sysv/linux/net/route.h
	* sysdeps/unix/sysv/linux/netinet/if_ether.h
	* sysdeps/unix/sysv/linux/netinet/if_fddi.h
	* sysdeps/unix/sysv/linux/netinet/if_tr.h
	* sysdeps/unix/sysv/linux/netipx/ipx.h
	* sysdeps/unix/sysv/linux/sys/acct.h
	* include/arpa/nameser.h, include/resolv.h:
	Change all uses of u_char to unsigned char,
	u_short and ushort to unsigned short, u_int and uint to unsigned int,
	u_long and ulong to unsigned long, u_int8_t to uint8_t,
        u_int16_t to uint16_t, u_int32_t to uint32_t, quad_t to int64_t,
	and u_int64_t and u_quad_t to uint64_t.

	* mach/sys/reboot.h: Remove two casts of integer literals
	to the types they already have.

	* bits/in.h: Correct error in description of IP_MULTICAST_LOOP.
	* sysdeps/unix/sysv/linux/bits/in.h: Likewise.
	* sysdeps/unix/sysv/linux/netinet/if_ether.h: Change a comment
	from referring to 'unsigned char' to 'uint8_t' for consistency with
	the macro definition below.

	* gmon/sys/gmon.h, inet/netinet/igmp.h, inet/protocols/talkd.h
	* io/fts.h, resolv/arpa/nameser.h, resolv/resolv.h
	* sunrpc/rpc/rpc_des.h, sysdeps/generic/netinet/ip.h
	* sysdeps/gnu/netinet/tcp.h, sysdeps/gnu/netinet/udp.h
	* sysdeps/mach/hurd/net/if_ppp.h, sysdeps/unix/sysv/linux/net/if_ppp.h
	* sysdeps/unix/sysv/linux/sys/acct.h
	* include/arpa/nameser.h, include/resolv.h:
	Fix indentation disrupted by mechanical edits.

	* inet/protocols/talkd.h, resolv/arpa/nameser.h
	* sysdeps/generic/netinet/in_systm.h
	* sysdeps/gnu/netinet/ip_icmp.h, sysdeps/gnu/netinet/tcp.h
	* sysdeps/gnu/netinet/udp.h
	* sysdeps/unix/sysv/linux/net/ethernet.h
	* sysdeps/unix/sysv/linux/net/if_arp.h
	* sysdeps/unix/sysv/linux/net/if_ppp.h
	* sysdeps/unix/sysv/linux/net/if_shaper.h
	* sysdeps/unix/sysv/linux/netinet/if_fddi.h
	* sysdeps/unix/sysv/linux/netinet/if_tr.h
	* sysdeps/unix/sysv/linux/netipx/ipx.h
	* sysdeps/unix/sysv/linux/sys/acct.h
	Include stdint.h for uintNN_t definitions.
	Don't include sys/cdefs.h, features.h, or asm/types.h directly.
  • Loading branch information
zackw committed Sep 23, 2016
1 parent cb76580 commit 11160cb
Show file tree
Hide file tree
Showing 37 changed files with 517 additions and 431 deletions.
65 changes: 65 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,68 @@
2016-09-23 Zack Weinberg <[email protected]>

* bits/in.h, gmon/sys/gmon.h, inet/netinet/igmp.h
* inet/protocols/routed.h, inet/protocols/talkd.h
* inet/protocols/timed.h, io/fts.h, nptl_db/thread_db.h
* resolv/arpa/nameser.h, resolv/resolv.h, sunrpc/rpc/rpc_des.h
* sysdeps/generic/netinet/if_ether.h
* sysdeps/generic/netinet/in_systm.h
* sysdeps/generic/netinet/ip.h, sysdeps/generic/netinet/tcp.h
* sysdeps/gnu/netinet/ip_icmp.h, sysdeps/gnu/netinet/tcp.h
* sysdeps/gnu/netinet/udp.h, sysdeps/mach/hurd/net/ethernet.h
* sysdeps/mach/hurd/net/if_arp.h
* sysdeps/mach/hurd/net/if_ppp.h
* sysdeps/mach/hurd/net/route.h, sysdeps/mach/sys/reboot.h
* sysdeps/unix/sysv/linux/bits/in.h
* sysdeps/unix/sysv/linux/net/ethernet.h
* sysdeps/unix/sysv/linux/net/if_arp.h
* sysdeps/unix/sysv/linux/net/if_ppp.h
* sysdeps/unix/sysv/linux/net/if_shaper.h
* sysdeps/unix/sysv/linux/net/route.h
* sysdeps/unix/sysv/linux/netinet/if_ether.h
* sysdeps/unix/sysv/linux/netinet/if_fddi.h
* sysdeps/unix/sysv/linux/netinet/if_tr.h
* sysdeps/unix/sysv/linux/netipx/ipx.h
* sysdeps/unix/sysv/linux/sys/acct.h
* include/arpa/nameser.h, include/resolv.h:
Change all uses of u_char to unsigned char,
u_short and ushort to unsigned short, u_int and uint to unsigned int,
u_long and ulong to unsigned long, u_int8_t to uint8_t,
u_int16_t to uint16_t, u_int32_t to uint32_t, quad_t to int64_t,
and u_int64_t and u_quad_t to uint64_t.

* mach/sys/reboot.h: Remove two casts of integer literals
to the types they already have.

* bits/in.h: Correct error in description of IP_MULTICAST_LOOP.
* sysdeps/unix/sysv/linux/bits/in.h: Likewise.
* sysdeps/unix/sysv/linux/netinet/if_ether.h: Change a comment
from referring to 'unsigned char' to 'uint8_t' for consistency with
the macro definition below.

* gmon/sys/gmon.h, inet/netinet/igmp.h, inet/protocols/talkd.h
* io/fts.h, resolv/arpa/nameser.h, resolv/resolv.h
* sunrpc/rpc/rpc_des.h, sysdeps/generic/netinet/ip.h
* sysdeps/gnu/netinet/tcp.h, sysdeps/gnu/netinet/udp.h
* sysdeps/mach/hurd/net/if_ppp.h, sysdeps/unix/sysv/linux/net/if_ppp.h
* sysdeps/unix/sysv/linux/sys/acct.h
* include/arpa/nameser.h, include/resolv.h:
Fix indentation disrupted by mechanical edits.

* inet/protocols/talkd.h, resolv/arpa/nameser.h
* sysdeps/generic/netinet/in_systm.h
* sysdeps/gnu/netinet/ip_icmp.h, sysdeps/gnu/netinet/tcp.h
* sysdeps/gnu/netinet/udp.h
* sysdeps/unix/sysv/linux/net/ethernet.h
* sysdeps/unix/sysv/linux/net/if_arp.h
* sysdeps/unix/sysv/linux/net/if_ppp.h
* sysdeps/unix/sysv/linux/net/if_shaper.h
* sysdeps/unix/sysv/linux/netinet/if_fddi.h
* sysdeps/unix/sysv/linux/netinet/if_tr.h
* sysdeps/unix/sysv/linux/netipx/ipx.h
* sysdeps/unix/sysv/linux/sys/acct.h
Include stdint.h for uintNN_t definitions.
Don't include sys/cdefs.h, features.h, or asm/types.h directly.

2016-09-23 Zack Weinberg <[email protected]>

* rpcsvc/nislib.h: Include rpcsvc/nis.h.
Expand Down
4 changes: 2 additions & 2 deletions bits/in.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
#define IP_RECVDSTADDR 7 /* bool; Receive IP dst addr w/datagram. */
#define IP_RETOPTS 8 /* ip_opts; Set/get IP per-packet options. */
#define IP_MULTICAST_IF 9 /* in_addr; set/get IP multicast i/f */
#define IP_MULTICAST_TTL 10 /* u_char; set/get IP multicast ttl */
#define IP_MULTICAST_LOOP 11 /* i_char; set/get IP multicast loopback */
#define IP_MULTICAST_TTL 10 /* unsigned char; set/get IP multicast ttl */
#define IP_MULTICAST_LOOP 11 /* bool; set/get IP multicast loopback */
#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */

Expand Down
30 changes: 15 additions & 15 deletions gmon/sys/gmon.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ extern struct __bb *__bb_head;
/*
* The type used to represent indices into gmonparam.tos[].
*/
#define ARCINDEX u_long
#define ARCINDEX unsigned long

/*
* Maximum number of arcs we want to allow.
Expand All @@ -130,7 +130,7 @@ extern struct __bb *__bb_head;
#define MAXARCS (1 << 20)

struct tostruct {
u_long selfpc;
unsigned long selfpc;
long count;
ARCINDEX link;
};
Expand All @@ -140,9 +140,9 @@ struct tostruct {
* the called site and a count.
*/
struct rawarc {
u_long raw_frompc;
u_long raw_selfpc;
long raw_count;
unsigned long raw_frompc;
unsigned long raw_selfpc;
long raw_count;
};

/*
Expand All @@ -156,17 +156,17 @@ struct rawarc {
*/
struct gmonparam {
long int state;
u_short *kcount;
u_long kcountsize;
unsigned short *kcount;
unsigned long kcountsize;
ARCINDEX *froms;
u_long fromssize;
unsigned long fromssize;
struct tostruct *tos;
u_long tossize;
unsigned long tossize;
long tolimit;
u_long lowpc;
u_long highpc;
u_long textsize;
u_long hashfraction;
unsigned long lowpc;
unsigned long highpc;
unsigned long textsize;
unsigned long hashfraction;
long log_hashfraction;
};

Expand All @@ -190,8 +190,8 @@ struct gmonparam {
__BEGIN_DECLS

/* Set up data structures and start profiling. */
extern void __monstartup (u_long __lowpc, u_long __highpc) __THROW;
extern void monstartup (u_long __lowpc, u_long __highpc) __THROW;
extern void __monstartup (unsigned long __lowpc, unsigned long __highpc) __THROW;
extern void monstartup (unsigned long __lowpc, unsigned long __highpc) __THROW;

/* Clean up profiling and write out gmon.out. */
extern void _mcleanup (void) __THROW;
Expand Down
4 changes: 2 additions & 2 deletions include/arpa/nameser.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ extern const struct _ns_flagdata _ns_flagdata[] attribute_hidden;

#endif

extern u_int __ns_get16 (const u_char *) __THROW;
extern u_long __ns_get32 (const u_char *) __THROW;
extern unsigned int __ns_get16 (const unsigned char *) __THROW;
extern unsigned long __ns_get32 (const unsigned char *) __THROW;

#define ns_msg_getflag(handle, flag) \
(((handle)._flags & _ns_flagdata[flag].mask) >> _ns_flagdata[flag].shift)
Expand Down
24 changes: 14 additions & 10 deletions include/resolv.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ extern struct hostent *_gethtent (void);
extern struct hostent *_gethtbyname (const char *__name);
extern struct hostent *_gethtbyname2 (const char *__name, int __af);
struct hostent *_gethtbyaddr (const char *addr, size_t __len, int __af);
extern u_int32_t _getlong (const u_char *__src);
extern u_int16_t _getshort (const u_char *__src);
extern void res_pquery (const res_state __statp, const u_char *__msg,
extern uint32_t _getlong (const unsigned char *__src);
extern uint16_t _getshort (const unsigned char *__src);
extern void res_pquery (const res_state __statp, const unsigned char *__msg,
int __len, FILE *__file);
extern int res_ourserver_p (const res_state __statp,
const struct sockaddr_in6 *__inp);
extern void __res_iclose (res_state statp, bool free_addr);
extern int __res_nopt(res_state statp, int n0, u_char *buf, int buflen,
extern int __res_nopt(res_state statp, int n0, unsigned char *buf, int buflen,
int anslen);
libc_hidden_proto (__res_ninit)
libc_hidden_proto (__res_maybe_init)
Expand All @@ -45,12 +45,16 @@ libc_hidden_proto (__res_iclose)
libc_hidden_proto (__res_randomid)
libc_hidden_proto (__res_state)

int __libc_res_nquery (res_state, const char *, int, int, u_char *, int,
u_char **, u_char **, int *, int *, int *);
int __libc_res_nsearch (res_state, const char *, int, int, u_char *, int,
u_char **, u_char **, int *, int *, int *);
int __libc_res_nsend (res_state, const u_char *, int, const u_char *, int,
u_char *, int, u_char **, u_char **, int *, int *, int *)
int __libc_res_nquery (res_state, const char *, int, int,
unsigned char *, int, unsigned char **,
unsigned char **, int *, int *, int *);
int __libc_res_nsearch (res_state, const char *, int, int,
unsigned char *, int, unsigned char **,
unsigned char **, int *, int *, int *);
int __libc_res_nsend (res_state, const unsigned char *, int,
const unsigned char *, int, unsigned char *,
int, unsigned char **, unsigned char **,
int *, int *, int *)
attribute_hidden;

libresolv_hidden_proto (_sethtent)
Expand Down
8 changes: 4 additions & 4 deletions inet/netinet/igmp.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ __BEGIN_DECLS
*/

struct igmp {
u_int8_t igmp_type; /* IGMP type */
u_int8_t igmp_code; /* routing code */
u_int16_t igmp_cksum; /* checksum */
struct in_addr igmp_group; /* group address */
uint8_t igmp_type; /* IGMP type */
uint8_t igmp_code; /* routing code */
uint16_t igmp_cksum; /* checksum */
struct in_addr igmp_group; /* group address */
};

#define IGMP_MINLEN 8
Expand Down
6 changes: 3 additions & 3 deletions inet/protocols/routed.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ struct netinfo {
};

struct rip {
u_char rip_cmd; /* request/response */
u_char rip_vers; /* protocol version # */
u_char rip_res1[2]; /* pad to 32-bit boundary */
unsigned char rip_cmd; /* request/response */
unsigned char rip_vers; /* protocol version # */
unsigned char rip_res1[2]; /* pad to 32-bit boundary */
union {
struct netinfo ru_nets[1]; /* variable length... */
char ru_tracefile[1]; /* ditto ... */
Expand Down
21 changes: 11 additions & 10 deletions inet/protocols/talkd.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,17 @@

#include <sys/types.h>
#include <sys/socket.h>
#include <stdint.h>

/*
* Client->server request message format.
*/
typedef struct {
u_char vers; /* protocol version */
u_char type; /* request type, see below */
u_char answer; /* not used */
u_char pad;
u_int32_t id_num; /* message id */
unsigned char vers; /* protocol version */
unsigned char type; /* request type, see below */
unsigned char answer; /* not used */
unsigned char pad;
uint32_t id_num; /* message id */
struct osockaddr addr; /* old (4.3) style */
struct osockaddr ctl_addr; /* old (4.3) style */
int32_t pid; /* caller's process id */
Expand All @@ -76,11 +77,11 @@ typedef struct {
* Server->client response message format.
*/
typedef struct {
u_char vers; /* protocol version */
u_char type; /* type of request message, see below */
u_char answer; /* response to request message, see below */
u_char pad;
u_int32_t id_num; /* message id */
unsigned char vers; /* protocol version */
unsigned char type; /* type of request message, see below */
unsigned char answer; /* response to request message, see below */
unsigned char pad;
uint32_t id_num; /* message id */
struct osockaddr addr; /* address for establishing conversation */
} CTL_RESPONSE;

Expand Down
6 changes: 3 additions & 3 deletions inet/protocols/timed.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@
#define MAXHOSTNAMELEN 64

struct tsp {
u_char tsp_type;
u_char tsp_vers;
u_short tsp_seq;
unsigned char tsp_type;
unsigned char tsp_vers;
unsigned short tsp_seq;
union {
struct timeval tspu_time;
char tspu_hopcnt;
Expand Down
20 changes: 10 additions & 10 deletions io/fts.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ typedef struct _ftsent {
char *fts_path; /* root path */
int fts_errno; /* errno for this node */
int fts_symfd; /* fd for symlink */
u_short fts_pathlen; /* strlen(fts_path) */
u_short fts_namelen; /* strlen(fts_name) */
unsigned short fts_pathlen; /* strlen(fts_path) */
unsigned short fts_namelen; /* strlen(fts_name) */

ino_t fts_ino; /* inode */
dev_t fts_dev; /* device */
Expand All @@ -130,17 +130,17 @@ typedef struct _ftsent {
#define FTS_SL 12 /* symbolic link */
#define FTS_SLNONE 13 /* symbolic link without target */
#define FTS_W 14 /* whiteout object */
u_short fts_info; /* user flags for FTSENT structure */
unsigned short fts_info; /* user flags for FTSENT structure */

#define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */
#define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */
u_short fts_flags; /* private flags for FTSENT structure */
unsigned short fts_flags; /* private flags for FTSENT structure */

#define FTS_AGAIN 1 /* read node again */
#define FTS_FOLLOW 2 /* follow symbolic link */
#define FTS_NOINSTR 3 /* no instructions */
#define FTS_SKIP 4 /* discard node */
u_short fts_instr; /* fts_set() instructions */
unsigned short fts_instr; /* fts_set() instructions */

struct stat *fts_statp; /* stat(2) information */
char fts_name[1]; /* file name */
Expand All @@ -157,20 +157,20 @@ typedef struct _ftsent64 {
char *fts_path; /* root path */
int fts_errno; /* errno for this node */
int fts_symfd; /* fd for symlink */
u_short fts_pathlen; /* strlen(fts_path) */
u_short fts_namelen; /* strlen(fts_name) */
unsigned short fts_pathlen; /* strlen(fts_path) */
unsigned short fts_namelen; /* strlen(fts_name) */

ino64_t fts_ino; /* inode */
dev_t fts_dev; /* device */
nlink_t fts_nlink; /* link count */

short fts_level; /* depth (-1 to N) */

u_short fts_info; /* user flags for FTSENT structure */
unsigned short fts_info; /* user flags for FTSENT structure */

u_short fts_flags; /* private flags for FTSENT structure */
unsigned short fts_flags; /* private flags for FTSENT structure */

u_short fts_instr; /* fts_set() instructions */
unsigned short fts_instr; /* fts_set() instructions */

struct stat64 *fts_statp; /* stat(2) information */
char fts_name[1]; /* file name */
Expand Down
2 changes: 1 addition & 1 deletion nptl_db/thread_db.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ struct link_map;

#define TD_EVENTSIZE 2
#define BT_UISHIFT 5 /* log base 2 of BT_NBIPUI, to extract word index */
#define BT_NBIPUI (1 << BT_UISHIFT) /* n bits per uint */
#define BT_NBIPUI (1 << BT_UISHIFT) /* n bits per unsigned int */
#define BT_UIMASK (BT_NBIPUI - 1) /* to extract bit index */

/* Bitmask of enabled events. */
Expand Down
Loading

0 comments on commit 11160cb

Please sign in to comment.