WinCE patches
authorRichard Levitte <levitte@openssl.org>
Fri, 15 Nov 2002 22:44:08 +0000 (22:44 +0000)
committerRichard Levitte <levitte@openssl.org>
Fri, 15 Nov 2002 22:44:08 +0000 (22:44 +0000)
26 files changed:
CHANGES
Configure
INSTALL.W32
apps/apps.c
apps/s_client.c
apps/s_server.c
apps/s_socket.c
apps/s_time.c
crypto/aes/aes_locl.h
crypto/bio/b_sock.c
crypto/bio/bss_log.c
crypto/crypto.h
crypto/des/read2pwd.c
crypto/des/read_pwd.c
crypto/dso/dso_win32.c
crypto/ec/ectest.c
crypto/engine/enginetest.c
crypto/rand/rand_win.c
crypto/ui/ui_openssl.c
crypto/ui/ui_util.c
e_os.h
e_os2.h
ms/do_ms.bat
ssl/ssl_cert.c
ssl/ssltest.c
util/mk1mf.pl

diff --git a/CHANGES b/CHANGES
index 8a1e5270fe41624fb77d478cb12235b9ec823c7a..02069948cc644aa82785da766a4fb55282cd4f82 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.6h and 0.9.7  [XX xxx 2002]
 
+  *) Add the VC-CE target, introduce the WINCE sysname, and add
+     INSTALL.WCE and appropriate conditionals to make it build.
+     [Steven Reddie <smr@essemer.com.au> via Richard Levitte]
+
   *) Change the DLL names for Cygwin to cygcrypto-x.y.z.dll and
      cygssl-x.y.z.dll, where x, y and z are the major, minor and
      edit numbers of the version.
index df7e95f5527298f1aeba44f3a065919c0c966c53..63fab50ba8625d5b181cf890fd5c54312b7cb164 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -500,6 +500,7 @@ my %table=(
 # Windows NT, Microsoft Visual C++ 4.0
 
 "VC-NT","cl::::WINNT::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
+"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 "VC-WIN32","cl::::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 "VC-WIN16","cl:::(unknown):WIN16::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
 "VC-W31-16","cl:::(unknown):WIN16::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
@@ -571,8 +572,8 @@ my %table=(
 
 );
 
-my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32
-       BC-16 Mingw32 OS2-EMX);
+my @WinTargets=qw(VC-NT VC-CE VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS
+       BC-32 BC-16 Mingw32 OS2-EMX);
 
 my $idx = 0;
 my $idx_cc = $idx++;
index 8b22d9d05f06aa63a5227c9e43ed59319db8b41c..8a875cf0beff027a656411da651690cdedc0538f 100644 (file)
@@ -2,6 +2,8 @@
  INSTALLATION ON THE WIN32 PLATFORM
  ----------------------------------
 
+ [Instructions for building for Windows CE can be found in INSTALL.WCE]
+
  Heres a few comments about building OpenSSL in Windows environments.  Most
  of this is tested on Win32 but it may also work in Win 3.1 with some
  modification.
index 305227d7abd5747d9d9c4b4f6448614a6d117cbc..271dfa143938fe903b94507b4354fbc9a5ab7172 100644 (file)
@@ -345,6 +345,7 @@ void program_name(char *in, char *out, int size)
 #ifdef OPENSSL_SYS_WIN32
 int WIN32_rename(char *from, char *to)
        {
+#ifndef OPENSSL_SYS_WINCE
        /* Windows rename gives an error if 'to' exists, so delete it
         * first and ignore file not found errror
         */
@@ -352,6 +353,30 @@ int WIN32_rename(char *from, char *to)
                return -1;
 #undef rename
        return rename(from, to);
+#else
+       /* convert strings to UNICODE */
+       {
+       BOOL result = FALSE;
+       WCHAR* wfrom;
+       WCHAR* wto;
+       int i;
+       wfrom = malloc((strlen(from)+1)*2);
+       wto = malloc((strlen(to)+1)*2);
+       if (wfrom != NULL && wto != NULL)
+               {
+               for (i=0; i<(int)strlen(from)+1; i++)
+                       wfrom[i] = (short)from[i];
+               for (i=0; i<(int)strlen(to)+1; i++)
+                       wto[i] = (short)to[i];
+               result = MoveFile(wfrom, wto);
+               }
+       if (wfrom != NULL)
+               free(wfrom);
+       if (wto != NULL)
+               free(wto);
+       return result;
+       }
+#endif
        }
 #endif
 
index 1b670aa4ee4acf9dcfaf7018afa3c7b776730042..3b018ff0e006c05d8fc3d49965cd2080cbb1308d 100644 (file)
@@ -140,6 +140,14 @@ typedef unsigned int u_int;
 #include <conio.h>
 #endif
 
+#ifdef OPENSSL_SYS_WINCE
+/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
+#ifdef fileno
+#undef fileno
+#endif
+#define fileno(a) (int)_fileno(a)
+#endif
+
 
 #if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
 /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
@@ -662,7 +670,11 @@ re_start:
                                        tv.tv_usec = 0;
                                        i=select(width,(void *)&readfds,(void *)&writefds,
                                                 NULL,&tv);
+#ifdef OPENSSL_SYS_WINCE
+                                       if(!i && (!_kbhit() || !read_tty) ) continue;
+#else
                                        if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
+#endif
                                } else  i=select(width,(void *)&readfds,(void *)&writefds,
                                         NULL,NULL);
                        }
@@ -828,7 +840,11 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
                        }
 
 #ifdef OPENSSL_SYS_WINDOWS
+#ifdef OPENSSL_SYS_WINCE
+               else if (_kbhit())
+#else
                else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
+#endif
 #else
                else if (FD_ISSET(fileno(stdin),&readfds))
 #endif
index 4ba3bcefb0f2923da93e0386144a0ea968f244e6..7a74c41020232aafa07cf2fba004d34d0eb7057a 100644 (file)
@@ -144,6 +144,14 @@ typedef unsigned int u_int;
 #include <conio.h>
 #endif
 
+#ifdef OPENSSL_SYS_WINCE
+/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
+#ifdef fileno
+#undef fileno
+#endif
+#define fileno(a) (int)_fileno(a)
+#endif
+
 #if (defined(OPENSSL_SYS_VMS) && __VMS_VER < 70000000)
 /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */
 #undef FIONBIO
index ed15ce0c1ddcb3867032a8bbfda4b710cb669e2a..a88de6c8c85c8cafca7d1e1561251916896f5815 100644 (file)
@@ -140,7 +140,9 @@ static void ssl_sock_cleanup(void)
        if (wsa_init_done)
                {
                wsa_init_done=0;
+#ifndef OPENSSL_SYS_WINCE
                WSACancelBlockingCall();
+#endif
                WSACleanup();
                }
        }
index da7383ca21d41f3c9958d21ce2362b3ebc1e236e..181a7c82f66e80555824575e19084b3177b77536 100644 (file)
@@ -487,7 +487,7 @@ int MAIN(int argc, char **argv)
        tm_Time_F(START);
        for (;;)
                {
-               if (finishtime < time(NULL)) break;
+               if (finishtime < (long)time(NULL)) break;
 #ifdef WIN32_STUFF
 
                if( flushWinMsgs(0) == -1 )
@@ -538,9 +538,9 @@ int MAIN(int argc, char **argv)
                }
        totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
 
-       i=(int)(time(NULL)-finishtime+maxTime);
+       i=(int)((long)time(NULL)-finishtime+maxTime);
        printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
-       printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
+       printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 
        /* Now loop and time connections using the same session id over and over */
 
@@ -572,7 +572,7 @@ next:
        nConn = 0;
        totalTime = 0.0;
 
-       finishtime=time(NULL)+maxTime;
+       finishtime=(long)time(NULL)+maxTime;
 
        printf( "starting\n" );
        bytes_read=0;
@@ -580,7 +580,7 @@ next:
                
        for (;;)
                {
-               if (finishtime < time(NULL)) break;
+               if (finishtime < (long)time(NULL)) break;
 
 #ifdef WIN32_STUFF
                if( flushWinMsgs(0) == -1 )
@@ -630,7 +630,7 @@ next:
 
 
        printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
-       printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,time(NULL)-finishtime+maxTime,bytes_read/nConn);
+       printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
 
        ret=0;
 end:
index 18fc2d074765581da416bfa9d29b64d6975806d8..f290946058eb1247800f65aae6c238d1ff0a29a1 100644 (file)
@@ -62,7 +62,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE)
 # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
 # define GETU32(p) SWAP(*((u32 *)(p)))
 # define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
index a7da2581014275ce32421a11dd3ce0ddb2ee3732..86f38172fba682f8b46b8b477bf0358f0a03add9 100644 (file)
@@ -482,7 +482,9 @@ void BIO_sock_cleanup(void)
        if (wsa_init_done)
                {
                wsa_init_done=0;
+#ifndef OPENSSL_SYS_WINCE
                WSACancelBlockingCall();
+#endif
                WSACleanup();
                }
 #endif
index 534181267216418ee238c17ef41e9192bedc7ab3..1eb678cac0950bc98b213aca09a5c82f7224ab67 100644 (file)
@@ -68,7 +68,8 @@
 
 #include "cryptlib.h"
 
-#if defined(OPENSSL_SYS_WIN32)
+#if defined(OPENSSL_SYS_WINCE)
+#elif defined(OPENSSL_SYS_WIN32)
 #  include <process.h>
 #elif defined(OPENSSL_SYS_VMS)
 #  include <opcdef.h>
index a135ee96c7b87dea8e160b7664a07cddada1274d..4b9ece9762d7fc238b170a7ada6c418c74c5b5ef 100644 (file)
@@ -63,6 +63,9 @@
 
 #ifndef OPENSSL_NO_FP_API
 #include <stdio.h>
+#ifdef OPENSSL_SYS_WINCE
+#include <stdio_extras.h>
+#endif
 #endif
 
 #include <openssl/stack.h>
index b4720c3a9810546c448f3ff1d897bfef100b2eb6..241adfa342d6caa0cdc38e6b1d62e4ba0c48d3da 100644 (file)
 #include <string.h>
 #include <openssl/des.h>
 #include <openssl/ui.h>
+#ifdef OPENSSL_SYS_WINCE
+#include <stdio_extras.h>      /* BUFSIZ */
+#endif
 
 int DES_read_password(DES_cblock *key, const char *prompt, int verify)
        {
index b893a1b03a3ed8af121de384f81c31e0a68d41de..c79c9a0e2aab9e94eb0f9bdc1c8206adff714a04 100644 (file)
 
 #ifdef WIN_CONSOLE_BUG
 #include <windows.h>
+#ifndef OPENSSL_SYS_WINCE
 #include <wincon.h>
 #endif
+#endif
 
 
 /* There are 5 types of terminal interface supported,
 #include <sys/ioctl.h>
 #endif
 
-#if defined(OPENSSL_SYS_MSDOS) && !defined(__CYGWIN32__)
+#if defined(OPENSSL_SYS_MSDOS) && !defined(__CYGWIN32__) && !defined(OPENSSL_SYS_WINCE)
 #include <conio.h>
 #define fgets(a,b,c) noecho_fgets(a,b,c)
 #endif
@@ -222,7 +224,25 @@ int des_read_pw_string(char *buf, int length, const char *prompt,
        return(ret);
        }
 
-#ifndef OPENSSL_SYS_WIN16
+#ifdef OPENSSL_SYS_WINCE
+
+int des_read_pw(char *buf, char *buff, int size, const char *prompt, int verify)
+       { 
+       memset(buf,0,size);
+       memset(buff,0,size);
+       return(0);
+       }
+
+#elif defined(OPENSSL_SYS_WIN16)
+
+int des_read_pw(char *buf, char *buff, int size, char *prompt, int verify)
+       { 
+       memset(buf,0,size);
+       memset(buff,0,size);
+       return(0);
+       }
+
+#else /* !OPENSSL_SYS_WINCE && !OPENSSL_SYS_WIN16 */
 
 static void read_till_nl(FILE *in)
        {
@@ -393,17 +413,6 @@ error:
        return(!ok);
        }
 
-#else /* OPENSSL_SYS_WIN16 */
-
-int des_read_pw(char *buf, char *buff, int size, char *prompt, int verify)
-       { 
-       memset(buf,0,size);
-       memset(buff,0,size);
-       return(0);
-       }
-
-#endif
-
 static void pushsig(void)
        {
        int i;
@@ -466,7 +475,7 @@ static void recsig(int i)
 #endif
        }
 
-#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16)
+#ifdef OPENSSL_SYS_MSDOS
 static int noecho_fgets(char *buf, int size, FILE *tty)
        {
        int i;
@@ -509,3 +518,4 @@ static int noecho_fgets(char *buf, int size, FILE *tty)
        return(strlen(buf));
        }
 #endif
+#endif /* !OPENSSL_SYS_WINCE && !WIN16 */
index af8586d7542364c801b26c3c1783440274f7dd51..6c30deb250b25c4d2a13f23e3d90b4a490b9956d 100644 (file)
@@ -61,7 +61,7 @@
 #include "cryptlib.h"
 #include <openssl/dso.h>
 
-#ifndef OPENSSL_SYS_WIN32
+#if !defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE)
 DSO_METHOD *DSO_METHOD_win32(void)
        {
        return NULL;
index eab46cc0806eb945e93d4aa9397905f0ed6d6c1d..f3cb3e722456f52afc86d84f6a36012d3d06e667 100644 (file)
 
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef FLAT_INC
+#include "e_os.h"
+#else
+#include "../../e_os.h"
+#endif
 #include <string.h>
 #include <time.h>
 
index 87fa8c57b72ce2b4bfc056ad41ba27799d815be7..51eb091e60c96c52574da18747a81fcb35c83b8e 100644 (file)
@@ -58,6 +58,9 @@
 
 #include <openssl/e_os2.h>
 #include <stdio.h>
+#ifdef OPENSSL_SYS_WINCE
+#include <stdlib_extras.h>
+#endif
 #include <string.h>
 #include <openssl/buffer.h>
 #include <openssl/crypto.h>
index 242febe270ba40320b138f6cdfa0bda9269755c0..37f172f8a4d7d7482c7dbb493cd3ea7d9a76baed 100644 (file)
  * http://developer.intel.com/design/security/rng/redist_license.htm
  */
 #define PROV_INTEL_SEC 22
-#define INTEL_DEF_PROV "Intel Hardware Cryptographic Service Provider"
+#define INTEL_DEF_PROV TEXT("Intel Hardware Cryptographic Service Provider")
 
 static void readtimer(void);
 static void readscreen(void);
@@ -170,7 +170,9 @@ typedef BOOL (WINAPI *THREAD32)(HANDLE, LPTHREADENTRY32);
 typedef BOOL (WINAPI *MODULE32)(HANDLE, LPMODULEENTRY32);
 
 #include <lmcons.h>
+#ifndef OPENSSL_SYS_WINCE
 #include <lmstats.h>
+#endif
 #if 1 /* The NET API is Unicode only.  It requires the use of the UNICODE
        * macro.  When UNICODE is defined LPTSTR becomes LPWSTR.  LMSTR was
        * was added to the Platform SDK to allow the NET API to be used in
@@ -209,20 +211,32 @@ int RAND_poll(void)
         osverinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO) ;
         GetVersionEx( &osverinfo ) ;
 
+#ifdef OPENSSL_SYS_WINCE
+       /* poll the CryptoAPI PRNG */
+       /* The CryptoAPI returns sizeof(buf) bytes of randomness */
+       if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
+               {
+               if (CryptGenRandom(hProvider, sizeof(buf), buf))
+                       RAND_add(buf, sizeof(buf), sizeof(buf));
+               CryptReleaseContext(hProvider, 0); 
+               }
+#endif
+
        /* load functions dynamically - not available on all systems */
-       advapi = LoadLibrary("ADVAPI32.DLL");
-       kernel = LoadLibrary("KERNEL32.DLL");
-       user = LoadLibrary("USER32.DLL");
-       netapi = LoadLibrary("NETAPI32.DLL");
+       advapi = LoadLibrary(TEXT("ADVAPI32.DLL"));
+       kernel = LoadLibrary(TEXT("KERNEL32.DLL"));
+       user = LoadLibrary(TEXT("USER32.DLL"));
+       netapi = LoadLibrary(TEXT("NETAPI32.DLL"));
 
+#ifndef OPENSSL_SYS_WINCE
 #if 1 /* There was previously a problem with NETSTATGET.  Currently, this
        * section is still experimental, but if all goes well, this conditional
        * will be removed
        */
        if (netapi)
                {
-               netstatget = (NETSTATGET) GetProcAddress(netapi,"NetStatisticsGet");
-               netfree = (NETFREE) GetProcAddress(netapi,"NetApiBufferFree");
+               netstatget = (NETSTATGET) GetProcAddress(netapi,TEXT("NetStatisticsGet"));
+               netfree = (NETFREE) GetProcAddress(netapi,TEXT("NetApiBufferFree"));
                }
 
        if (netstatget && netfree)
@@ -249,7 +263,9 @@ int RAND_poll(void)
        if (netapi)
                FreeLibrary(netapi);
 #endif /* 1 */
+#endif /* !OPENSSL_SYS_WINCE */
  
+#ifndef OPENSSL_SYS_WINCE
         /* It appears like this can cause an exception deep within ADVAPI32.DLL
          * at random times on Windows 2000.  Reported by Jeffrey Altman.  
          * Only use it on NT.
@@ -280,7 +296,7 @@ int RAND_poll(void)
                        bufsz += 8192;
 
                        length = bufsz;
-                       rc = RegQueryValueEx(HKEY_PERFORMANCE_DATA, "Global",
+                       rc = RegQueryValueEx(HKEY_PERFORMANCE_DATA, TEXT("Global"),
                                NULL, NULL, buf, &length);
                        }
                if (rc == ERROR_SUCCESS)
@@ -304,15 +320,16 @@ int RAND_poll(void)
                        free(buf);
                }
 #endif
+#endif /* !OPENSSL_SYS_WINCE */
 
        if (advapi)
                {
                acquire = (CRYPTACQUIRECONTEXT) GetProcAddress(advapi,
-                       "CryptAcquireContextA");
+                       TEXT("CryptAcquireContextA"));
                gen = (CRYPTGENRANDOM) GetProcAddress(advapi,
-                       "CryptGenRandom");
+                       TEXT("CryptGenRandom"));
                release = (CRYPTRELEASECONTEXT) GetProcAddress(advapi,
-                       "CryptReleaseContext");
+                       TEXT("CryptReleaseContext"));
                }
 
        if (acquire && gen && release)
@@ -366,9 +383,9 @@ int RAND_poll(void)
                GETFOREGROUNDWINDOW win;
                GETQUEUESTATUS queue;
 
-               win = (GETFOREGROUNDWINDOW) GetProcAddress(user, "GetForegroundWindow");
-               cursor = (GETCURSORINFO) GetProcAddress(user, "GetCursorInfo");
-               queue = (GETQUEUESTATUS) GetProcAddress(user, "GetQueueStatus");
+               win = (GETFOREGROUNDWINDOW) GetProcAddress(user, TEXT("GetForegroundWindow"));
+               cursor = (GETCURSORINFO) GetProcAddress(user, TEXT("GetCursorInfo"));
+               queue = (GETQUEUESTATUS) GetProcAddress(user, TEXT("GetQueueStatus"));
 
                if (win)
                        {
@@ -439,17 +456,17 @@ int RAND_poll(void)
                MODULEENTRY32 m;
 
                snap = (CREATETOOLHELP32SNAPSHOT)
-                       GetProcAddress(kernel, "CreateToolhelp32Snapshot");
-               heap_first = (HEAP32FIRST) GetProcAddress(kernel, "Heap32First");
-               heap_next = (HEAP32NEXT) GetProcAddress(kernel, "Heap32Next");
-               heaplist_first = (HEAP32LIST) GetProcAddress(kernel, "Heap32ListFirst");
-               heaplist_next = (HEAP32LIST) GetProcAddress(kernel, "Heap32ListNext");
-               process_first = (PROCESS32) GetProcAddress(kernel, "Process32First");
-               process_next = (PROCESS32) GetProcAddress(kernel, "Process32Next");
-               thread_first = (THREAD32) GetProcAddress(kernel, "Thread32First");
-               thread_next = (THREAD32) GetProcAddress(kernel, "Thread32Next");
-               module_first = (MODULE32) GetProcAddress(kernel, "Module32First");
-               module_next = (MODULE32) GetProcAddress(kernel, "Module32Next");
+                       GetProcAddress(kernel, TEXT("CreateToolhelp32Snapshot"));
+               heap_first = (HEAP32FIRST) GetProcAddress(kernel, TEXT("Heap32First"));
+               heap_next = (HEAP32NEXT) GetProcAddress(kernel, TEXT("Heap32Next"));
+               heaplist_first = (HEAP32LIST) GetProcAddress(kernel, TEXT("Heap32ListFirst"));
+               heaplist_next = (HEAP32LIST) GetProcAddress(kernel, TEXT("Heap32ListNext"));
+               process_first = (PROCESS32) GetProcAddress(kernel, TEXT("Process32First"));
+               process_next = (PROCESS32) GetProcAddress(kernel, TEXT("Process32Next"));
+               thread_first = (THREAD32) GetProcAddress(kernel, TEXT("Thread32First"));
+               thread_next = (THREAD32) GetProcAddress(kernel, TEXT("Thread32Next"));
+               module_first = (MODULE32) GetProcAddress(kernel, TEXT("Module32First"));
+               module_next = (MODULE32) GetProcAddress(kernel, TEXT("Module32Next"));
 
                if (snap && heap_first && heap_next && heaplist_first &&
                        heaplist_next && process_first && process_next &&
@@ -584,7 +601,7 @@ static void readtimer(void)
        DWORD w;
        LARGE_INTEGER l;
        static int have_perfc = 1;
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && !defined(OPENSSL_SYS_WINCE)
        static int have_tsc = 1;
        DWORD cyclecount;
 
@@ -637,6 +654,7 @@ static void readtimer(void)
 
 static void readscreen(void)
 {
+#ifndef OPENSSL_SYS_WINCE
   HDC          hScrDC;         /* screen DC */
   HDC          hMemDC;         /* memory DC */
   HBITMAP      hBitmap;        /* handle for our bitmap */
@@ -650,7 +668,7 @@ static void readscreen(void)
   int          n = 16;         /* number of screen lines to grab at a time */
 
   /* Create a screen DC and a memory DC compatible to screen DC */
-  hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
+  hScrDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
   hMemDC = CreateCompatibleDC(hScrDC);
 
   /* Get screen resolution */
@@ -697,6 +715,7 @@ static void readscreen(void)
   DeleteObject(hBitmap);
   DeleteDC(hMemDC);
   DeleteDC(hScrDC);
+#endif /* !OPENSSL_SYS_WINCE */
 }
 
 #endif
index 793846cbc64f4b86a67917574d40b77f0dcd0aa6..6d5f9cd8b139d704212d35d07e326de7e93b3414 100644 (file)
 
 #ifdef WIN_CONSOLE_BUG
 # include <windows.h>
+#ifndef OPENSSL_SYS_WINCE
 # include <wincon.h>
 #endif
+#endif
 
 
 /* There are 5 types of terminal interface supported,
@@ -281,10 +283,12 @@ static FILE *tty_in, *tty_out;
 static int is_a_tty;
 
 /* Declare static functions */
+#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
 static void read_till_nl(FILE *);
 static void recsig(int);
 static void pushsig(void);
 static void popsig(void);
+#endif
 #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16)
 static int noecho_fgets(char *buf, int size, FILE *tty);
 #endif
@@ -371,6 +375,7 @@ static int read_string(UI *ui, UI_STRING *uis)
        }
 
 
+#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
 /* Internal functions to read a string without echoing */
 static void read_till_nl(FILE *in)
        {
@@ -383,6 +388,7 @@ static void read_till_nl(FILE *in)
        }
 
 static volatile sig_atomic_t intr_signal;
+#endif
 
 static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
        {
@@ -390,9 +396,9 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
        int ok;
        char result[BUFSIZ];
        int maxsize = BUFSIZ-1;
+#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
        char *p;
 
-#ifndef OPENSSL_SYS_WIN16
        intr_signal=0;
        ok=0;
        ps=0;
@@ -555,6 +561,7 @@ static int close_console(UI *ui)
        }
 
 
+#if !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
 /* Internal functions to handle signals and act on them */
 static void pushsig(void)
        {
@@ -618,9 +625,10 @@ static void recsig(int i)
        {
        intr_signal=i;
        }
+#endif
 
 /* Internal functions specific for Windows */
-#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16)
+#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16) && !defined(OPENSSL_SYS_WINCE)
 static int noecho_fgets(char *buf, int size, FILE *tty)
        {
        int i;
index f05573df3384e9ea7dc7276713ef96a848244f45..8876128e56a2fb155120e4020d6b67d01514fdd8 100644 (file)
@@ -55,6 +55,9 @@
 
 #include <string.h>
 #include <openssl/ui.h>
+#ifdef OPENSSL_SYS_WINCE
+#include <stdio_extras.h>      /* BUFSIZ */
+#endif
 
 int UI_UTIL_read_pw_string(char *buf,int length,const char *prompt,int verify)
        {
diff --git a/e_os.h b/e_os.h
index 2455f993861f9d13e29c2b6b51bdb4e3e47fa9f4..9992c8521830070d6a0f8c4781bb6c895cf4f3a4 100644 (file)
--- a/e_os.h
+++ b/e_os.h
@@ -229,6 +229,13 @@ extern "C" {
 #  include <io.h>
 #  include <fcntl.h>
 
+#  ifdef OPENSSL_SYS_WINCE
+#    include <stdio_extras.h>
+#    include <stdlib_extras.h>
+#    include <string_extras.h>
+#    include <winsock_extras.h>
+#  endif
+
 #  define ssize_t long
 
 #  if defined (__BORLANDC__)
@@ -258,7 +265,11 @@ extern "C" {
 #  define SSLEAY_CONF  OPENSSL_CONF
 #  define NUL_DEV      "nul"
 #  define RFILE                ".rnd"
-#  define DEFAULT_HOME  "C:"
+#  ifdef OPENSSL_SYS_WINCE
+#    define DEFAULT_HOME  ""
+#  else
+#    define DEFAULT_HOME  "C:"
+#  endif
 
 #else /* The non-microsoft world world */
 
diff --git a/e_os2.h b/e_os2.h
index 3d61afeb5077d1a28d20aeeea97c00dc1f168244..81be3025f602282fdf43e9569276a6d47093eeb3 100644 (file)
--- a/e_os2.h
+++ b/e_os2.h
@@ -106,11 +106,15 @@ extern "C" {
 #   undef OPENSSL_SYS_UNIX
 #   define OPENSSL_SYS_WINNT
 #  endif
+#  if defined(OPENSSL_SYSNAME_WINCE)
+#   undef OPENSSL_SYS_UNIX
+#   define OPENSSL_SYS_WINCE
+#  endif
 # endif
 #endif
 
 /* Anything that tries to look like Microsoft is "Windows" */
-#if defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT)
+#if defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE)
 # undef OPENSSL_SYS_UNIX
 # define OPENSSL_SYS_WINDOWS
 # ifndef OPENSSL_SYS_MSDOS
index 5cbc6f7d5f85ba7557de331e06fb2595e973f9c1..a8cf515bac2bdf5c281cdf08719cfb5b752e31d9 100755 (executable)
@@ -5,6 +5,8 @@ rem perl util\mk1mf.pl VC-W31-32 >ms\w31.mak
 perl util\mk1mf.pl dll VC-W31-32 >ms\w31dll.mak\r
 perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak\r
 perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak\r
+perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak\r
+perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak\r
 \r
 perl util\mkdef.pl 16 libeay > ms\libeay16.def\r
 perl util\mkdef.pl 32 libeay > ms\libeay32.def\r
index 3d31bbf05f039369467db876f9400860b324bcf6..1f122559ba1428f15a86638bb09eb9ececd04aa5 100644 (file)
@@ -789,10 +789,30 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
        WIN32_FIND_DATA FindFileData;
        HANDLE hFind;
        int ret = 0;
+#ifdef OPENSSL_SYS_WINCE
+       WCHAR* wdir = NULL;
+#endif
 
        CRYPTO_w_lock(CRYPTO_LOCK_READDIR);
        
+#ifdef OPENSSL_SYS_WINCE
+       /* convert strings to UNICODE */
+       {
+               BOOL result = FALSE;
+               int i;
+               wdir = malloc((strlen(dir)+1)*2);
+               if (wdir == NULL)
+                       goto err_noclose;
+               for (i=0; i<(int)strlen(dir)+1; i++)
+                       wdir[i] = (short)dir[i];
+       }
+#endif
+
+#ifdef OPENSSL_SYS_WINCE
+       hFind = FindFirstFile(wdir, &FindFileData);
+#else
        hFind = FindFirstFile(dir, &FindFileData);
+#endif
        /* Note that a side effect is that the CAs will be sorted by name */
        if(hFind == INVALID_HANDLE_VALUE)
                {
@@ -807,7 +827,11 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
                char buf[1024];
                int r;
                
+#ifdef OPENSSL_SYS_WINCE
+               if(strlen(dir)+_tcslen(FindFileData.cFileName)+2 > sizeof buf)
+#else
                if(strlen(dir)+strlen(FindFileData.cFileName)+2 > sizeof buf)
+#endif
                        {
                        SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG);
                        goto err;
@@ -825,6 +849,10 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
 err:   
        FindClose(hFind);
 err_noclose:
+#ifdef OPENSSL_SYS_WINCE
+       if (wdir != NULL)
+               free(wdir);
+#endif
        CRYPTO_w_unlock(CRYPTO_LOCK_READDIR);
        return ret;
        }
index d8c8579d6f323791deafad91fa62121d2b93f87d..ed163a22fbe3b2d7e376bf5f6b6bcb981dc6fc7d 100644 (file)
 #ifdef OPENSSL_SYS_VMS
 #  define TEST_SERVER_CERT "SYS$DISK:[-.APPS]SERVER.PEM"
 #  define TEST_CLIENT_CERT "SYS$DISK:[-.APPS]CLIENT.PEM"
+#elif defined(OPENSSL_SYS_WINCE)
+#  define TEST_SERVER_CERT "\\OpenSSL\\server.pem"
+#  define TEST_CLIENT_CERT "\\OpenSSL\\client.pem"
 #else
 #  define TEST_SERVER_CERT "../apps/server.pem"
 #  define TEST_CLIENT_CERT "../apps/client.pem"
index c9271bbffeeb8adb1ab51aa72bcec37d98d28183..cc65f25d4f0726e990c6e66b4c5fa1396edda641 100755 (executable)
@@ -24,6 +24,7 @@ $infile="MINFO";
 
 %ops=(
        "VC-WIN32",   "Microsoft Visual C++ [4-6] - Windows NT or 9X",
+       "VC-CE",   "Microsoft eMbedded Visual C++ 3.0 - Windows CE ONLY",
        "VC-NT",   "Microsoft Visual C++ [4-6] - Windows NT ONLY",
        "VC-W31-16",  "Microsoft Visual C++ 1.52 - Windows 3.1 - 286",
        "VC-WIN16",   "Alias for VC-W31-32",
@@ -137,6 +138,10 @@ elsif (($platform eq "VC-WIN32") || ($platform eq "VC-NT"))
        $NT = 1 if $platform eq "VC-NT";
        require 'VC-32.pl';
        }
+elsif ($platform eq "VC-CE")
+       {
+       require 'VC-CE.pl';
+       }
 elsif ($platform eq "Mingw32")
        {
        require 'Mingw32.pl';