From 2cc5142fb13e00e4c11179b156fdcec7cd4cde77 Mon Sep 17 00:00:00 2001 From: Andy Polyakov Date: Sat, 19 Jan 2013 21:23:13 +0100 Subject: [PATCH] Improve WINCE support. Submitted by: Pierre Delaage (cherry picked from commit a006fef78e56b078549a80f4bb4518b6a02eba84) Resolved conflicts: crypto/bio/bss_dgram.c ssl/d1_lib.c util/pl/VC-32.pl --- apps/apps.c | 2 +- apps/apps.h | 2 +- crypto/bio/bss_dgram.c | 16 ++++++++++------ crypto/bio/bss_fd.c | 20 ++++++++++++++++++-- crypto/cryptlib.c | 2 ++ crypto/o_str.c | 2 +- e_os.h | 5 ++++- ssl/d1_lib.c | 16 ++++++++++------ util/pl/VC-32.pl | 2 +- 9 files changed, 48 insertions(+), 19 deletions(-) diff --git a/apps/apps.c b/apps/apps.c index 999dc80fc4..d501eebd76 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -118,7 +118,7 @@ #include #include #include -#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB) +#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && !defined(NETWARE_CLIB) #include #endif #include diff --git a/apps/apps.h b/apps/apps.h index 4b4ae8b38d..5f083d4097 100644 --- a/apps/apps.h +++ b/apps/apps.h @@ -204,7 +204,7 @@ extern BIO *bio_err; # endif #endif -#ifdef OPENSSL_SYSNAME_WIN32 +#if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE) # define openssl_fdset(a,b) FD_SET((unsigned int)a, b) #else # define openssl_fdset(a,b) FD_SET(a, b) diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c index a20f264bfc..6912aa1278 100644 --- a/crypto/bio/bss_dgram.c +++ b/crypto/bio/bss_dgram.c @@ -66,7 +66,7 @@ #include #ifndef OPENSSL_NO_DGRAM -#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) +#if defined(OPENSSL_SYS_VMS) #include #endif @@ -1895,11 +1895,15 @@ int BIO_dgram_non_fatal_error(int err) static void get_current_time(struct timeval *t) { -#ifdef OPENSSL_SYS_WIN32 - struct _timeb tb; - _ftime(&tb); - t->tv_sec = (long)tb.time; - t->tv_usec = (long)tb.millitm * 1000; +#if defined(_WIN32) + SYSTEMTIME st; + union { unsigned __int64 ul; FILETIME ft; } now; + + GetSystemTime(&st); + SystemTimeToFileTime(&st,&now.ft); + now.ul -= 116444736000000000UI64; /* re-bias to 1/1/1970 */ + t->tv_sec = (long)(now.ul/10000000); + t->tv_usec = ((int)(now.ul%10000000))/10; #elif defined(OPENSSL_SYS_VMS) struct timeb tb; ftime(&tb); diff --git a/crypto/bio/bss_fd.c b/crypto/bio/bss_fd.c index d1bf85aae1..c274877c13 100644 --- a/crypto/bio/bss_fd.c +++ b/crypto/bio/bss_fd.c @@ -63,9 +63,25 @@ #if defined(OPENSSL_NO_POSIX_IO) /* - * One can argue that one should implement dummy placeholder for - * BIO_s_fd here... + * Dummy placeholder for BIO_s_fd... */ +BIO *BIO_new_fd(int fd,int close_flag) + { + return NULL; + } +int BIO_fd_non_fatal_error(int err) + { + return 0; + } +int BIO_fd_should_retry(int i) + { + return 0; + } + +BIO_METHOD *BIO_s_fd(void) + { + return NULL; + } #else /* * As for unconditional usage of "UPLINK" interface in this module. diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index 680dd0a78c..2903bac2a8 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -935,7 +935,9 @@ void OpenSSLDie(const char *file,int line,const char *assertion) abort(); #else /* Win32 abort() customarily shows a dialog, but we just did that... */ +#if !defined(_WIN32_WCE) raise(SIGABRT); +#endif _exit(3); #endif } diff --git a/crypto/o_str.c b/crypto/o_str.c index 56104a6c34..60c01c10a4 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -61,7 +61,7 @@ #include "o_str.h" #if !defined(OPENSSL_IMPLEMENTS_strncasecmp) && \ - !defined(OPENSSL_SYSNAME_WIN32) && \ + !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && \ !defined(NETWARE_CLIB) # include #endif diff --git a/e_os.h b/e_os.h index c965541a56..3688c4e0f9 100644 --- a/e_os.h +++ b/e_os.h @@ -270,7 +270,7 @@ extern "C" { */ # define _WIN32_WINNT 0x0400 # endif -# if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT) +# if !defined(OPENSSL_NO_SOCK) && (defined(_WIN32_WINNT) || defined(_WIN32_WCE)) /* * Just like defining _WIN32_WINNT including winsock2.h implies * certain "discipline" for maintaining [broad] binary compatibility. @@ -286,6 +286,9 @@ extern "C" { # include # include # include +# if defined(_WIN32_WCE) && !defined(EACCES) +# define EACCES 13 +# endif # include # ifdef _WIN64 # define strlen(s) _strlen31(s) diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c index d372a61bea..2b066e0165 100644 --- a/ssl/d1_lib.c +++ b/ssl/d1_lib.c @@ -62,7 +62,7 @@ #include #include "ssl_locl.h" -#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) +#if defined(OPENSSL_SYS_VMS) #include #endif @@ -481,11 +481,15 @@ int dtls1_handle_timeout(SSL *s) static void get_current_time(struct timeval *t) { -#ifdef OPENSSL_SYS_WIN32 - struct _timeb tb; - _ftime(&tb); - t->tv_sec = (long)tb.time; - t->tv_usec = (long)tb.millitm * 1000; +#if defined(_WIN32) + SYSTEMTIME st; + union { unsigned __int64 ul; FILETIME ft; } now; + + GetSystemTime(&st); + SystemTimeToFileTime(&st,&now.ft); + now.ul -= 116444736000000000UI64; /* re-bias to 1/1/1970 */ + t->tv_sec = (long)(now.ul/10000000); + t->tv_usec = ((int)(now.ul%10000000))/10; #elif defined(OPENSSL_SYS_VMS) struct timeb tb; ftime(&tb); diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl index f3fe3242ca..e44ad6171a 100644 --- a/util/pl/VC-32.pl +++ b/util/pl/VC-32.pl @@ -116,7 +116,7 @@ elsif ($FLAVOR =~ /CE/) $base_cflags.=" $wcecdefs"; $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'})); $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'})); - if (`cl 2>&1` =~ /Version 1[4-9]\./) { + if (`$cc 2>&1` =~ /Version ([0-9]+)\./ && $1>=14) { $base_cflags.=($shlib and !$fipscanisterbuild)?' /MD':' /MT'; } else { $base_cflags.=' /MC'; -- 2.25.1