Only include winsock2.h for struct timeval if needed
authorHugo Landau <hlandau@openssl.org>
Fri, 24 Nov 2023 10:03:30 +0000 (10:03 +0000)
committerHugo Landau <hlandau@openssl.org>
Mon, 27 Nov 2023 07:33:19 +0000 (07:33 +0000)
Fixes #22811

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/22813)

(cherry picked from commit ba58e9f1e22dd9ee2e37078640dcbe9f520a555d)

include/openssl/e_ostime.h

index 8a7cc9880fa797e98a2ea562afb5ebf75e2bd75c..0e17487504992ac9e01fa8f28b14d9a68ddc80ff 100644 (file)
  */
 
 # if defined(OPENSSL_SYS_WINDOWS)
-#  include <winsock2.h>
+#  if !defined(_WINSOCKAPI_)
+    /*
+     * winsock2.h defines _WINSOCK2API_ and both winsock2.h and winsock.h define
+     * _WINSOCKAPI_. Both of these provide struct timeval. Don't include
+     * winsock2.h if either header has been included to avoid breakage with
+     * applications that prefer to use <winsock.h> over <winsock2.h>.
+     */
+#   include <winsock2.h>
+#  endif
 # else
 #  include <sys/time.h>
 # endif