r15161@tombo: nickm | 2007-12-05 11:30:37 -0500

Fix bug reported by Steve Murphy on or-talk: detect the s6_addr32 and s6_addr16 fields via autoconf.


svn:r12679
This commit is contained in:
Nick Mathewson 2007-12-05 16:30:52 +00:00
parent 29045d21b3
commit f948caad7b
3 changed files with 34 additions and 5 deletions

View File

@ -33,6 +33,8 @@ Changes in version 0.2.0.13-alpha - 2007-12-??
- Reject uploaded descriptors and extrainfo documents if they're - Reject uploaded descriptors and extrainfo documents if they're
huge. Otherwise we'll cache them all over the network and it'll huge. Otherwise we'll cache them all over the network and it'll
clog everything up. Reported by Aljosha Judmayer. clog everything up. Reported by Aljosha Judmayer.
- Check for presence of s6_addr16 and s6_addr32 fields in in6_addr
via autoconf. Should fix compile on solaris.
o Minor features: o Minor features:
- On USR1, when dmalloc is in use, log the top 10 memory - On USR1, when dmalloc is in use, log the top 10 memory

View File

@ -361,6 +361,31 @@ AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, struct sockaddr_storage, s
#endif #endif
#endif #endif
]) ])
AC_CHECK_MEMBERS([struct in6_addr.s6_addr32, struct in6_addr.s6_addr16], , ,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_NETINET_IN6_H
#include <netinet/in6.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef MS_WINDOWS
#define WIN32_WINNT 0x400
#define _WIN32_WINNT 0x400
#define WIN32_LEAN_AND_MEAN
#if defined(_MSC_VER) && (_MSC_VER < 1300)
#include <winsock.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
#endif
])
AC_CHECK_TYPES([rlim_t], , , AC_CHECK_TYPES([rlim_t], , ,
[#ifdef HAVE_SYS_TYPES_H [#ifdef HAVE_SYS_TYPES_H

View File

@ -302,15 +302,17 @@ struct in6_addr
typedef uint16_t sa_family_t; typedef uint16_t sa_family_t;
#endif #endif
#ifndef _MSC_VER /* Apparently, MS and Solaris don't define s6_addr16 or s6_addr32. */
/* Apparently, MSVC doesn't define s6_addr16 or s6_addr32. How dumb. */ #ifdef HAVE_STRUCT_IN6_ADDR_S6_ADDR32
/* XXXX020 detect with autoconf. */
#define S6_ADDR16(x) ((uint16_t*)(x).s6_addr16)
#define S6_ADDR32(x) ((uint32_t*)(x).s6_addr32) #define S6_ADDR32(x) ((uint32_t*)(x).s6_addr32)
#else #else
#define S6_ADDR16(x) ((uint16_t*)((char*)&(x).s6_addr))
#define S6_ADDR32(x) ((uint32_t*)((char*)&(x).s6_addr)) #define S6_ADDR32(x) ((uint32_t*)((char*)&(x).s6_addr))
#endif #endif
#ifdef HAVE_STRUCT_IN6_ADDR_S6_ADDR16
#define S6_ADDR16(x) ((uint16_t*)(x).s6_addr16)
#else
#define S6_ADDR16(x) ((uint16_t*)((char*)&(x).s6_addr))
#endif
/* XXXX020 detect sockaddr_in6 correctly on ms_windows; this is also a hack. */ /* XXXX020 detect sockaddr_in6 correctly on ms_windows; this is also a hack. */
#if !defined(HAVE_STRUCT_SOCKADDR_IN6) && !defined(MS_WINDOWS) #if !defined(HAVE_STRUCT_SOCKADDR_IN6) && !defined(MS_WINDOWS)