aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrent Cook <bcook@openbsd.org>2015-10-18 09:28:10 -0500
committerBrent Cook <bcook@openbsd.org>2015-10-18 09:28:10 -0500
commit0197a589691274055e3a6f47a3652a6714d676bc (patch)
tree9a2c16f2cb86605522ce747c1a71bfd0c23db389
parentc8918dd0be1bbadfcebfc6631bd63f3b3e83befd (diff)
downloadportable-0197a589691274055e3a6f47a3652a6714d676bc.tar.gz
portable-0197a589691274055e3a6f47a3652a6714d676bc.tar.bz2
portable-0197a589691274055e3a6f47a3652a6714d676bc.zip
Windows compatibility fixes
VS2013 has trouble with relative include paths for apps/openssl, so move certhash_win/apps_win.c back to apps/openssl. gmtime_r on mingw64 fails with negative time_t, override gmtime_s fails all of the time unit tests, override SHUT_RD/WR are defined in newer mingw64 headers, check before overriding
-rw-r--r--.gitignore2
-rw-r--r--apps/CMakeLists.txt5
-rw-r--r--apps/openssl/Makefile.am4
-rw-r--r--apps/openssl/apps_win.c (renamed from apps/openssl/compat/apps_win.c)2
-rw-r--r--apps/openssl/certhash_win.c (renamed from apps/openssl/compat/certhash_win.c)0
-rw-r--r--crypto/compat/timegm.c12
-rw-r--r--include/compat/time.h6
-rw-r--r--include/compat/win32netcompat.h11
-rwxr-xr-xupdate.sh1
9 files changed, 32 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
index 03ed14a..83f8f0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -115,6 +115,8 @@ include/openssl/*.h
115/apps/nc/*.h 115/apps/nc/*.h
116/apps/nc/*.c 116/apps/nc/*.c
117/apps/nc/nc* 117/apps/nc/nc*
118!/apps/openssl/apps_win.c
119!/apps/openssl/certhash_win.c
118/apps/openssl/*.h 120/apps/openssl/*.h
119/apps/openssl/*.c 121/apps/openssl/*.c
120/apps/openssl/*.cnf 122/apps/openssl/*.cnf
diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
index 08bce42..6213aeb 100644
--- a/apps/CMakeLists.txt
+++ b/apps/CMakeLists.txt
@@ -2,7 +2,6 @@ include_directories(
2 . 2 .
3 ../include 3 ../include
4 ../include/compat 4 ../include/compat
5 ./openssl
6) 5)
7 6
8set( 7set(
@@ -63,8 +62,8 @@ if(CMAKE_HOST_UNIX)
63endif() 62endif()
64 63
65if(CMAKE_HOST_WIN32) 64if(CMAKE_HOST_WIN32)
66 set(OPENSSL_SRC ${OPENSSL_SRC} openssl/compat/apps_win.c) 65 set(OPENSSL_SRC ${OPENSSL_SRC} openssl/apps_win.c)
67 set(OPENSSL_SRC ${OPENSSL_SRC} openssl/compat/certhash_win.c) 66 set(OPENSSL_SRC ${OPENSSL_SRC} openssl/certhash_win.c)
68 set(OPENSSL_SRC ${OPENSSL_SRC} openssl/compat/poll_win.c) 67 set(OPENSSL_SRC ${OPENSSL_SRC} openssl/compat/poll_win.c)
69endif() 68endif()
70 69
diff --git a/apps/openssl/Makefile.am b/apps/openssl/Makefile.am
index 5a8d458..6ec3d62 100644
--- a/apps/openssl/Makefile.am
+++ b/apps/openssl/Makefile.am
@@ -60,11 +60,11 @@ openssl_SOURCES += x509.c
60if BUILD_CERTHASH 60if BUILD_CERTHASH
61openssl_SOURCES += certhash.c 61openssl_SOURCES += certhash.c
62else 62else
63openssl_SOURCES += compat/certhash_win.c 63openssl_SOURCES += certhash_win.c
64endif 64endif
65 65
66if HOST_WIN 66if HOST_WIN
67openssl_SOURCES += compat/apps_win.c 67openssl_SOURCES += apps_win.c
68else 68else
69openssl_SOURCES += apps_posix.c 69openssl_SOURCES += apps_posix.c
70endif 70endif
diff --git a/apps/openssl/compat/apps_win.c b/apps/openssl/apps_win.c
index bc999f6..37bfcc9 100644
--- a/apps/openssl/compat/apps_win.c
+++ b/apps/openssl/apps_win.c
@@ -10,7 +10,7 @@
10#include <io.h> 10#include <io.h>
11#include <fcntl.h> 11#include <fcntl.h>
12 12
13#include <apps.h> 13#include "apps.h"
14 14
15double 15double
16app_tminterval(int stop, int usertime) 16app_tminterval(int stop, int usertime)
diff --git a/apps/openssl/compat/certhash_win.c b/apps/openssl/certhash_win.c
index be57e2a..be57e2a 100644
--- a/apps/openssl/compat/certhash_win.c
+++ b/apps/openssl/certhash_win.c
diff --git a/crypto/compat/timegm.c b/crypto/compat/timegm.c
index 0655ce0..5a9e600 100644
--- a/crypto/compat/timegm.c
+++ b/crypto/compat/timegm.c
@@ -188,6 +188,18 @@ static int __secs_to_tm(long long t, struct tm *tm)
188 return 0; 188 return 0;
189} 189}
190 190
191#ifdef _WIN32
192struct tm *__gmtime_r(const time_t *t, struct tm *tm)
193{
194 if (__secs_to_tm(*t, tm) < 0) {
195 errno = EOVERFLOW;
196 return 0;
197 }
198 tm->tm_isdst = 0;
199 return tm;
200}
201#endif
202
191time_t timegm(struct tm *tm) 203time_t timegm(struct tm *tm)
192{ 204{
193 struct tm new; 205 struct tm new;
diff --git a/include/compat/time.h b/include/compat/time.h
index 9ed9c03..99a2001 100644
--- a/include/compat/time.h
+++ b/include/compat/time.h
@@ -9,11 +9,15 @@
9#else 9#else
10#include <../include/time.h> 10#include <../include/time.h>
11#endif 11#endif
12#define gmtime_r(tp, tm) ((gmtime_s((tm), (tp)) == 0) ? (tm) : NULL)
13#else 12#else
14#include_next <time.h> 13#include_next <time.h>
15#endif 14#endif
16 15
16#ifdef _WIN32
17struct tm *__gmtime_r(const time_t * t, struct tm * tm);
18#define gmtime_r(tp, tm) __gmtime_r(tp, tm)
19#endif
20
17#ifndef HAVE_TIMEGM 21#ifndef HAVE_TIMEGM
18time_t timegm(struct tm *tm); 22time_t timegm(struct tm *tm);
19#endif 23#endif
diff --git a/include/compat/win32netcompat.h b/include/compat/win32netcompat.h
index 452cfba..933f083 100644
--- a/include/compat/win32netcompat.h
+++ b/include/compat/win32netcompat.h
@@ -11,13 +11,18 @@
11#ifdef _WIN32 11#ifdef _WIN32
12 12
13#include <ws2tcpip.h> 13#include <ws2tcpip.h>
14#include <errno.h>
15#include <unistd.h>
14 16
17#ifndef SHUT_RDWR
15#define SHUT_RDWR SD_BOTH 18#define SHUT_RDWR SD_BOTH
19#endif
20#ifndef SHUT_RD
16#define SHUT_RD SD_RECEIVE 21#define SHUT_RD SD_RECEIVE
22#endif
23#ifndef SHUT_WR
17#define SHUT_WR SD_SEND 24#define SHUT_WR SD_SEND
18 25#endif
19#include <errno.h>
20#include <unistd.h>
21 26
22int posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 27int posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
23 28
diff --git a/update.sh b/update.sh
index aef190e..de9f2bb 100755
--- a/update.sh
+++ b/update.sh
@@ -223,7 +223,6 @@ done
223# copy openssl(1) source 223# copy openssl(1) source
224echo "copying openssl(1) source" 224echo "copying openssl(1) source"
225$CP $app_src/openssl/openssl.1 apps/openssl 225$CP $app_src/openssl/openssl.1 apps/openssl
226rm -f apps/openssl/*.c apps/openssl/*.h
227$CP_LIBC $libc_src/stdlib/strtonum.c apps/openssl/compat 226$CP_LIBC $libc_src/stdlib/strtonum.c apps/openssl/compat
228$CP $libcrypto_src/cert.pem apps/openssl 227$CP $libcrypto_src/cert.pem apps/openssl
229$CP $libcrypto_src/openssl.cnf apps/openssl 228$CP $libcrypto_src/openssl.cnf apps/openssl