summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2013-01-19 21:23:13 +0100
committerAndy Polyakov <appro@openssl.org>2014-02-01 22:48:56 +0100
commit2cc5142fb13e00e4c11179b156fdcec7cd4cde77 (patch)
treea8139bbecbffdc23c2b0abbc940265667b05d7ed
parentd451ece4e7edce8c954daa084c83686647dcda0f (diff)
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
-rw-r--r--apps/apps.c2
-rw-r--r--apps/apps.h2
-rw-r--r--crypto/bio/bss_dgram.c16
-rw-r--r--crypto/bio/bss_fd.c20
-rw-r--r--crypto/cryptlib.c2
-rw-r--r--crypto/o_str.c2
-rw-r--r--e_os.h5
-rw-r--r--ssl/d1_lib.c16
-rw-r--r--util/pl/VC-32.pl2
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
-#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB)
+#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && !defined(NETWARE_CLIB)
#include <strings.h>
#endif
#include <sys/types.h>
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 <openssl/bio.h>
#ifndef OPENSSL_NO_DGRAM
-#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_VMS)
#include <sys/timeb.h>
#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 <strings.h>
#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 <stdio.h>
# include <stddef.h>
# include <errno.h>
+# if defined(_WIN32_WCE) && !defined(EACCES)
+# define EACCES 13
+# endif
# include <string.h>
# 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 <openssl/objects.h>
#include "ssl_locl.h"
-#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_VMS)
#include <sys/timeb.h>
#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';