struct sockaddr has unsigned char sa_len as the first member in BSD

in BSD variants and the family member is also an unsigned char instead
of (unsigned) short. So we define HAVE_SA_LEN for those BDS variants
and check for the offsetof for the sa_family member and also change
the struct qsockaddr to mirror that.  This should matter only when
PLATFORM_UNIX is defined.


git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@260 af15c1b1-3010-417e-b628-4374ebc0bcbd
This commit is contained in:
Ozkan Sezer 2010-08-09 12:20:39 +00:00
parent 0f5f656a00
commit f89750857f
2 changed files with 30 additions and 0 deletions

View file

@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
net_defs.h
functions and data private to the network layer
net_sys.h and its dependencies must be included
before net_defs.h.
*/
#ifndef __NET_DEFS_H
@ -31,7 +33,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
struct qsockaddr
{
#if defined(HAVE_SA_LEN)
unsigned char qsa_len;
unsigned char qsa_family;
#else
short qsa_family;
#endif /* BSD, sockaddr */
unsigned char qsa_data[14];
};

View file

@ -29,6 +29,8 @@
limited SDL_net functionality. */
#undef BAN_TEST
#undef HAVE_SA_LEN
#define sys_socket_t int
#define INVALID_SOCKET (-1)
#define SOCKET_ERROR (-1)
@ -53,11 +55,26 @@
#ifndef __NET_SYS_H__
#define __NET_SYS_H__
#undef HAVE_SA_LEN
#include <sys/types.h>
#include <errno.h>
#include <stddef.h>
#include <limits.h>
#if defined(__FreeBSD__) || defined(__DragonFly__) || \
defined(__OpenBSD__) || defined(__NetBSD__) || \
defined(__MACOSX__)
/* struct sockaddr has unsigned char sa_len as the first member in BSD
* in BSD variants and the family member is also an unsigned char instead
* of (unsigned) short. This should matter only when PLATFORM_UNIX is
* defined. */
#define HAVE_SA_LEN 1
#define SA_FAM_OFFSET 1
#else
#define SA_FAM_OFFSET 0
#endif /* BSD, sockaddr */
/* unix includes and compatibility macros */
#if defined(PLATFORM_UNIX) || defined(PLATFORM_AMIGA)
@ -95,6 +112,9 @@ typedef int socklen_t;
#define socketerror(x) strerror((x))
/* Verify that we defined HAVE_SA_LEN correctly: */
typedef char _check_sockaddr[2 * (offsetof(struct sockaddr, sa_family) == SA_FAM_OFFSET) - 1];
#endif /* end of unix stuff */
@ -126,6 +146,9 @@ typedef SOCKET sys_socket_t;
/* must #include "wsaerror.h" for this : */
#define socketerror(x) __WSAE_StrError((x))
/* Verify that we defined HAVE_SA_LEN correctly: */
typedef char _check_sockaddr[2 * (offsetof(struct sockaddr, sa_family) == SA_FAM_OFFSET) - 1];
#endif /* end of windows stuff */