On Mon, Feb 18, 2002 at 04:51:17PM -0700, Joel Baker wrote: > > This is a fix I had considered... but really should happen upstream. I > guess perhaps I'll check the CVS version of things, and file a bug if it's > still got this problem... Teach me to check upstream first. PR 10791 under NetBSD. Of course, the only way to get the fix natively is to run -current... and I'm not sure what the consequences of backporting only that file would be (need to get it and diff it against current).
hmm... i vaguely remember this :-) revision 1.60 date: 2001/05/05 12:47:58; author: kleink; state: Exp; lines: +7 -7 branches: 1.60.2; * Replace a couple of cases of u_char and u_short with uint8_t and uint16_t, respectively. * Simplify sockaddr_storage calculations a bit by the fact that, per defintion, sizeof (char) == 1. Fixes PR standards/10791. i'm not sure that NetBSD 1.5 has the "uintN_t" family of types or not. it would probably be safest to used an explicit "unsigned char" for this is guess, and "unsigned short" for the final delta... Index: socket.h =================================================================== RCS file: /cvsroot/syssrc/sys/sys/socket.h,v retrieving revision 1.59 retrieving revision 1.60 diff -p -c -r1.59 -r1.60 *** socket.h 2000/10/04 08:59:16 1.59 --- socket.h 2001/05/05 12:47:58 1.60 *************** *** 1,4 **** ! /* $NetBSD: socket.h,v 1.59 2000/10/04 08:59:16 toshii Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. --- 1,4 ---- ! /* $NetBSD: socket.h,v 1.60 2001/05/05 12:47:58 kleink Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. *************** struct linger { *** 189,195 **** * addresses. */ struct sockaddr { ! u_char sa_len; /* total length */ sa_family_t sa_family; /* address family */ char sa_data[14]; /* actually longer; address value */ }; --- 189,195 ---- * addresses. */ struct sockaddr { ! uint8_t sa_len; /* total length */ sa_family_t sa_family; /* address family */ char sa_data[14]; /* actually longer; address value */ }; *************** struct sockproto { *** 211,223 **** */ #define _SS_MAXSIZE 128 #define _SS_ALIGNSIZE (sizeof(int64_t)) ! #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2) ! #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \ _SS_PAD1SIZE - _SS_ALIGNSIZE) #if !defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE - 0) >= 500 struct sockaddr_storage { ! u_char ss_len; /* address length */ sa_family_t ss_family; /* address family */ char __ss_pad1[_SS_PAD1SIZE]; int64_t __ss_align;/* force desired structure storage alignment */ --- 211,223 ---- */ #define _SS_MAXSIZE 128 #define _SS_ALIGNSIZE (sizeof(int64_t)) ! #define _SS_PAD1SIZE (_SS_ALIGNSIZE - 2) ! #define _SS_PAD2SIZE (_SS_MAXSIZE - 2 - \ _SS_PAD1SIZE - _SS_ALIGNSIZE) #if !defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE - 0) >= 500 struct sockaddr_storage { ! uint8_t ss_len; /* address length */ sa_family_t ss_family; /* address family */ char __ss_pad1[_SS_PAD1SIZE]; int64_t __ss_align;/* force desired structure storage alignment */ *************** struct cmsghdr { *** 455,462 **** * 4.3 compat sockaddr, move to compat file later */ struct osockaddr { ! u_short sa_family; /* address family */ ! char sa_data[14]; /* up to 14 bytes of direct address */ }; /* --- 455,462 ---- * 4.3 compat sockaddr, move to compat file later */ struct osockaddr { ! uint16_t sa_family; /* address family */ ! char sa_data[14]; /* up to 14 bytes of direct address */ }; /*