Просмотр исходного кода

Proper detection of .sin?_len members, fixed build on *BSD

Evgeny Grin (Karlson2k) 6 лет назад
Родитель
Сommit
2eb0a5f92d
4 измененных файлов с 11 добавлено и 12 удалено
  1. 4 5
      configure.ac
  2. 2 2
      src/lib/daemon_start.c
  3. 4 4
      src/microhttpd/daemon.c
  4. 1 1
      src/microhttpd/test_shutdown_select.c

+ 4 - 5
configure.ac

@@ -774,10 +774,9 @@ AM_CONDITIONAL([HAVE_ZLIB], [[test "x$have_zlib" = xyes]])
 # Check for generic functions
 AC_CHECK_FUNCS([rand random])
 
-AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
-   [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?])
-   ],
-   [],
+AC_CHECK_MEMBERS([struct sockaddr_in.sin_len, struct sockaddr_in6.sin6_len, 
+                  struct sockaddr_storage.ss_len],
+   [], [],
    [
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -849,7 +848,7 @@ int main(void)
   {
     zr_mem(&sa, c_addr_size);
     sa.sin_family = AF_INET;
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
     sa.sin_len = c_addr_size;
 #endif
     if (0 == bind (sckt, (struct sockaddr *)&sa, c_addr_size))

+ 2 - 2
src/lib/daemon_start.c

@@ -310,7 +310,7 @@ open_listen_socket (struct MHD_Daemon *daemon)
 #ifdef IN6ADDR_ANY_INIT
 	  sin6->sin6_addr = static_in6any;
 #endif
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#if HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
 	  sin6->sin6_len = sizeof (struct sockaddr_in6);
 #endif
 	}
@@ -327,7 +327,7 @@ open_listen_socket (struct MHD_Daemon *daemon)
 	  sin4->sin_port = htons (daemon->listen_port);
 	  if (0 != INADDR_ANY)
 	    sin4->sin_addr.s_addr = htonl (INADDR_ANY);
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#if HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
 	  sin4->sin_len = sizeof (struct sockaddr_in);
 #endif
 	}

+ 4 - 4
src/microhttpd/daemon.c

@@ -5981,7 +5981,7 @@ MHD_start_daemon_va (unsigned int flags,
 #ifdef IN6ADDR_ANY_INIT
 	      servaddr6.sin6_addr = static_in6any;
 #endif
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#if HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
 	      servaddr6.sin6_len = sizeof (struct sockaddr_in6);
 #endif
 	      servaddr = (struct sockaddr *) &servaddr6;
@@ -5996,7 +5996,7 @@ MHD_start_daemon_va (unsigned int flags,
 	      servaddr4.sin_port = htons (port);
 	      if (0 != INADDR_ANY)
 	        servaddr4.sin_addr.s_addr = htonl (INADDR_ANY);
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#if HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
 	      servaddr4.sin_len = sizeof (struct sockaddr_in);
 #endif
 	      servaddr = (struct sockaddr *) &servaddr4;
@@ -6084,8 +6084,8 @@ MHD_start_daemon_va (unsigned int flags,
               0,
               sizeof (struct sockaddr_storage));
       addrlen = sizeof (struct sockaddr_storage);
-#ifdef HAVE_SOCKADDR_IN_SIN_LEN
-      bindaddr.sin_len = addrlen;
+#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
+      bindaddr.ss_len = addrlen;
 #endif
       if (0 != getsockname (listen_fd,
                             (struct sockaddr *) &bindaddr,

+ 1 - 1
src/microhttpd/test_shutdown_select.c

@@ -173,7 +173,7 @@ start_socket_listen(int domain)
   memset (&sock_addr, 0, sizeof (struct sockaddr_in));
   sock_addr.sin_family = AF_INET;
   sock_addr.sin_port = htons (0);
-#if HAVE_SOCKADDR_IN_SIN_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
   sock_addr.sin_len = sizeof (struct sockaddr_in);
 #endif
   addrlen = sizeof (struct sockaddr_in);