From 4a126e24e7b780c3ad0196b72f813ce4a90215e3 Mon Sep 17 00:00:00 2001 From: "Evgeny Grin (Karlson2k)" Date: Sun, 26 Nov 2017 15:33:55 +0300 Subject: Improved compatibility with Cygwin --- src/include/platform.h | 6 ++--- src/microhttpd/daemon.c | 46 +++++++++++++++++------------------ src/microhttpd/digestauth.c | 4 +-- src/microhttpd/mhd_compat.h | 6 ++--- src/microhttpd/mhd_mono_clock.c | 4 +-- src/microhttpd/mhd_sockets.h | 2 +- src/microhttpd/response.c | 20 +++++++-------- src/microhttpd/test_helpers.h | 4 +-- src/microhttpd/test_shutdown_select.c | 4 +-- 9 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/include/platform.h b/src/include/platform.h index 6d51747d..20d4df52 100644 --- a/src/include/platform.h +++ b/src/include/platform.h @@ -118,11 +118,11 @@ typedef intptr_t ssize_t; #endif /* !_SSIZE_T_DEFINED */ -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) typedef time_t _MHD_TIMEVAL_TV_SEC_TYPE; -#else /* _WIN32 */ +#else /* _WIN32 && ! __CYGWIN__ */ typedef long _MHD_TIMEVAL_TV_SEC_TYPE; -#endif /* _WIN32 */ +#endif /* _WIN32 && ! __CYGWIN__ */ #if !defined(IPPROTO_IPV6) && defined(_MSC_FULL_VER) && _WIN32_WINNT >= 0x0501 /* VC use IPPROTO_IPV6 as part of enum */ diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index f9bebd35..794acfbd 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c @@ -52,7 +52,7 @@ #endif /* MHD_HTTPS_REQUIRE_GRYPT */ #endif /* HTTPS_SUPPORT */ -#ifdef _WIN32 +#if defined(_WIN32) && ! defined(__CYGWIN__) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif /* !WIN32_LEAN_AND_MEAN */ @@ -152,7 +152,7 @@ MHD_PanicCallback mhd_panic; */ void *mhd_panic_cls; -#ifdef _WIN32 +#if defined(_WIN32) && ! defined(__CYGWIN__) /** * Track initialization of winsock */ @@ -1822,14 +1822,14 @@ thread_main_handle_connection (void *data) else { const time_t seconds_left = timeout - (now - con->last_activity); -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) tv.tv_sec = seconds_left; -#else /* _WIN32 */ +#else /* _WIN32 && !__CYGWIN__ */ if (seconds_left > TIMEVAL_TV_SEC_MAX) tv.tv_sec = TIMEVAL_TV_SEC_MAX; else tv.tv_sec = (_MHD_TIMEVAL_TV_SEC_TYPE) seconds_left; -#endif /* _WIN32 */ +#endif /* _WIN32 && ! __CYGWIN__ */ } tv.tv_usec = 0; tvp = &tv; @@ -2073,7 +2073,7 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon); * and if possible. */ #define MHD_TLSLIB_NEED_PUSH_FUNC 1 -#endif /* !_WIN32 && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */ +#endif /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */ #ifdef MHD_TLSLIB_NEED_PUSH_FUNC /** @@ -5489,7 +5489,7 @@ MHD_start_daemon_va (unsigned int flags, /* Apply the socket options according to listening_address_reuse. */ if (0 == daemon->listening_address_reuse) { -#ifndef _WIN32 +#ifdef MHD_WINSOCK_SOCKETS /* No user requirement, use "traditional" default SO_REUSEADDR * on non-W32 platforms, and do not fail if it doesn't work. * Don't use it on W32, because on W32 it will allow multiple @@ -5505,12 +5505,12 @@ MHD_start_daemon_va (unsigned int flags, MHD_socket_last_strerr_ ()); #endif } -#endif /* ! _WIN32 */ +#endif /* ! MHD_WINSOCK_SOCKETS */ } else if (daemon->listening_address_reuse > 0) { /* User requested to allow reusing listening address:port. */ -#ifndef _WIN32 +#ifndef MHD_WINSOCK_SOCKETS /* Use SO_REUSEADDR on non-W32 platforms, and do not fail if * it doesn't work. */ if (0 > setsockopt (listen_fd, @@ -5524,20 +5524,20 @@ MHD_start_daemon_va (unsigned int flags, MHD_socket_last_strerr_ ()); #endif } -#endif /* ! _WIN32 */ +#endif /* ! MHD_WINSOCK_SOCKETS */ /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms. * Fail if SO_REUSEPORT is not defined or setsockopt fails. */ /* SO_REUSEADDR on W32 has the same semantics as SO_REUSEPORT on BSD/Linux */ -#if defined(_WIN32) || defined(SO_REUSEPORT) +#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT) if (0 > setsockopt (listen_fd, SOL_SOCKET, -#ifndef _WIN32 +#ifndef MHD_WINSOCK_SOCKETS SO_REUSEPORT, -#else /* _WIN32 */ +#else /* MHD_WINSOCK_SOCKETS */ SO_REUSEADDR, -#endif /* _WIN32 */ +#endif /* MHD_WINSOCK_SOCKETS */ (void *) &on, sizeof (on))) { @@ -5548,7 +5548,7 @@ MHD_start_daemon_va (unsigned int flags, #endif goto free_and_fail; } -#else /* !_WIN32 && !SO_REUSEPORT */ +#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ /* we're supposed to allow address:port re-use, but on this platform we cannot; fail hard */ #ifdef HAVE_MESSAGES @@ -5556,7 +5556,7 @@ MHD_start_daemon_va (unsigned int flags, _("Cannot allow listening address reuse: SO_REUSEPORT not defined\n")); #endif goto free_and_fail; -#endif /* !_WIN32 && !SO_REUSEPORT */ +#endif /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */ } else /* if (daemon->listening_address_reuse < 0) */ { @@ -5566,7 +5566,7 @@ MHD_start_daemon_va (unsigned int flags, * Fail if MHD was compiled for W32 without SO_EXCLUSIVEADDRUSE * or setsockopt fails. */ -#if (defined(_WIN32) && defined(SO_EXCLUSIVEADDRUSE)) || \ +#if (defined(MHD_WINSOCK_SOCKETS) && defined(SO_EXCLUSIVEADDRUSE)) || \ (defined(__sun) && defined(SO_EXCLBIND)) if (0 > setsockopt (listen_fd, SOL_SOCKET, @@ -5585,13 +5585,13 @@ MHD_start_daemon_va (unsigned int flags, #endif goto free_and_fail; } -#elif defined(_WIN32) /* SO_EXCLUSIVEADDRUSE not defined on W32? */ +#elif defined(MHD_WINSOCK_SOCKETS) /* SO_EXCLUSIVEADDRUSE not defined on W32? */ #ifdef HAVE_MESSAGES MHD_DLOG (daemon, _("Cannot disallow listening address reuse: SO_EXCLUSIVEADDRUSE not defined\n")); #endif goto free_and_fail; -#endif /* _WIN32 */ +#endif /* MHD_WINSOCK_SOCKETS */ } /* check for user supplied sockaddr */ @@ -6698,13 +6698,13 @@ static struct gcry_thread_cbs gcry_threads_w32 = { void MHD_init(void) { -#ifdef _WIN32 +#if defined(_WIN32) && ! defined(__CYGWIN__) WSADATA wsd; -#endif /* _WIN32 */ +#endif /* _WIN32 && ! __CYGWIN__ */ mhd_panic = &mhd_panic_std; mhd_panic_cls = NULL; -#ifdef _WIN32 +#if defined(_WIN32) && ! defined(__CYGWIN__) if (0 != WSAStartup(MAKEWORD(2, 2), &wsd)) MHD_PANIC (_("Failed to initialize winsock\n")); mhd_winsock_inited_ = 1; @@ -6744,7 +6744,7 @@ MHD_fini(void) #ifdef HTTPS_SUPPORT gnutls_global_deinit (); #endif /* HTTPS_SUPPORT */ -#ifdef _WIN32 +#if defined(_WIN32) && ! defined(__CYGWIN__) if (mhd_winsock_inited_) WSACleanup(); #endif diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c index 509652e8..7226becf 100644 --- a/src/microhttpd/digestauth.c +++ b/src/microhttpd/digestauth.c @@ -30,12 +30,12 @@ #include "mhd_str.h" #include "mhd_compat.h" -#if defined(_WIN32) && defined(MHD_W32_MUTEX_) +#if defined(MHD_W32_MUTEX_) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif /* !WIN32_LEAN_AND_MEAN */ #include -#endif /* _WIN32 && MHD_W32_MUTEX_ */ +#endif /* MHD_W32_MUTEX_ */ #define HASH_MD5_HEX_LEN (2 * MD5_DIGEST_SIZE) /* 32 bit value is 4 bytes */ diff --git a/src/microhttpd/mhd_compat.h b/src/microhttpd/mhd_compat.h index fca84b84..b4e2c66c 100644 --- a/src/microhttpd/mhd_compat.h +++ b/src/microhttpd/mhd_compat.h @@ -47,13 +47,13 @@ #if defined(HAVE_SNPRINTF) #define MHD_snprintf_ snprintf #else /* ! HAVE_SNPRINTF */ -#if defined(_WIN32) +#if defined(_WIN32) && ! defined(__CYGWIN__) /* Emulate snprintf function on W32 */ int W32_snprintf(char *__restrict s, size_t n, const char *__restrict format, ...); #define MHD_snprintf_ W32_snprintf -#else /* ! _WIN32*/ +#else /* ! _WIN32 || __CYGWIN__ */ #error Your platform does not support snprintf() and MHD does not know how to emulate it on your platform. -#endif /* ! _WIN32*/ +#endif /* ! _WIN32 || __CYGWIN__ */ #endif /* ! HAVE_SNPRINTF */ #ifdef HAVE_RANDOM diff --git a/src/microhttpd/mhd_mono_clock.c b/src/microhttpd/mhd_mono_clock.c index 353e04c0..97dbfb9f 100644 --- a/src/microhttpd/mhd_mono_clock.c +++ b/src/microhttpd/mhd_mono_clock.c @@ -25,10 +25,10 @@ #include "mhd_mono_clock.h" -#if defined(_WIN32) && defined(HAVE_CLOCK_GETTIME) +#if defined(_WIN32) && ! defined(__CYGWIN__) && defined(HAVE_CLOCK_GETTIME) /* Prefer native clock source over wrappers */ #undef HAVE_CLOCK_GETTIME -#endif /* _WIN32 && HAVE_CLOCK_GETTIME */ +#endif /* _WIN32 && ! __CYGWIN__ && HAVE_CLOCK_GETTIME */ #ifdef HAVE_CLOCK_GETTIME #include diff --git a/src/microhttpd/mhd_sockets.h b/src/microhttpd/mhd_sockets.h index 4a4c5cd9..b013baad 100644 --- a/src/microhttpd/mhd_sockets.h +++ b/src/microhttpd/mhd_sockets.h @@ -358,7 +358,7 @@ /* MHD_POLL_EVENTS_ERR_DISC is 'events' mask for errors and disconnect. * Note: Out-of-band data is treated as error. */ -# if defined(_WIN32) +# if defined(_WIN32) && ! defined(__CYGWIN__) # define MHD_POLL_EVENTS_ERR_DISC POLLRDBAND # elif defined(__linux__) # define MHD_POLL_EVENTS_ERR_DISC POLLPRI diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c index 18ba625d..d677cf62 100644 --- a/src/microhttpd/response.c +++ b/src/microhttpd/response.c @@ -30,9 +30,9 @@ #ifdef HAVE_SYS_IOCTL_H #include #endif /* HAVE_SYS_IOCTL_H */ -#ifdef _WIN32 +#if defined(_WIN32) && ! defined(__CYGWIN__) #include -#endif /* _WIN32 */ +#endif /* _WIN32 && !__CYGWIN__ */ #include "internal.h" #include "response.h" @@ -45,12 +45,12 @@ #include "mhd_compat.h" -#if defined(_WIN32) && defined(MHD_W32_MUTEX_) +#if defined(MHD_W32_MUTEX_) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif /* !WIN32_LEAN_AND_MEAN */ #include -#endif /* _WIN32 && MHD_W32_MUTEX_ */ +#endif /* MHD_W32_MUTEX_ */ #if defined(_WIN32) #include /* for lseek(), read() */ #endif /* _WIN32 */ @@ -393,17 +393,17 @@ file_reader (void *cls, size_t max) { struct MHD_Response *response = cls; -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) ssize_t n; -#else /* _WIN32 */ +#else /* _WIN32 && !__CYGWIN__ */ const HANDLE fh = (HANDLE) _get_osfhandle (response->fd); -#endif /* _WIN32 */ +#endif /* _WIN32 && !__CYGWIN__ */ const int64_t offset64 = (int64_t)(pos + response->fd_off); if (offset64 < 0) return MHD_CONTENT_READER_END_WITH_ERROR; /* seek to required position is not possible */ -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__CYGWIN__) if (max > SSIZE_MAX) max = SSIZE_MAX; /* Clamp to maximum return value. */ @@ -441,7 +441,7 @@ file_reader (void *cls, if (n < 0) return MHD_CONTENT_READER_END_WITH_ERROR; return n; -#else /* _WIN32 */ +#else /* _WIN32 && !__CYGWIN__ */ if (INVALID_HANDLE_VALUE == fh) return MHD_CONTENT_READER_END_WITH_ERROR; /* Value of 'response->fd' is not valid. */ else @@ -460,7 +460,7 @@ file_reader (void *cls, return MHD_CONTENT_READER_END_OF_STREAM; return (ssize_t) resRead; } -#endif /* _WIN32 */ +#endif /* _WIN32 && !__CYGWIN__ */ } diff --git a/src/microhttpd/test_helpers.h b/src/microhttpd/test_helpers.h index c3f0f7be..4f015ef2 100644 --- a/src/microhttpd/test_helpers.h +++ b/src/microhttpd/test_helpers.h @@ -53,10 +53,10 @@ has_in_name(const char *prog_name, const char *marker) { if ('/' == prog_name[pos]) name_pos = pos + 1; -#ifdef _WIN32 +#if defined(_WIN32) || defined(__CYGWIN__) else if ('\\' == prog_name[pos]) name_pos = pos + 1; -#endif /* _WIN32 */ +#endif /* _WIN32 || __CYGWIN__ */ pos++; } if (name_pos == pos) diff --git a/src/microhttpd/test_shutdown_select.c b/src/microhttpd/test_shutdown_select.c index 1e4e3d82..934cde79 100644 --- a/src/microhttpd/test_shutdown_select.c +++ b/src/microhttpd/test_shutdown_select.c @@ -105,10 +105,10 @@ has_in_name(const char *prog_name, const char *marker) { if ('/' == prog_name[pos]) name_pos = pos + 1; -#ifdef _WIN32 +#if defined(_WIN32) || defined(__CYGWIN__) else if ('\\' == prog_name[pos]) name_pos = pos + 1; -#endif /* _WIN32 */ +#endif /* _WIN32 || __CYGWIN__ */ pos++; } if (name_pos == pos) -- cgit v1.2.3