diff -rupbN curl-curl-7_37_1/lib/connect.c curl-curl-7_37_1_new/lib/connect.c
--- curl-curl-7_37_1/lib/connect.c	2014-07-16 11:29:02.000000000 +0000
+++ curl-curl-7_37_1_new/lib/connect.c	2014-09-02 19:54:08.928137200 +0000
@@ -929,7 +929,7 @@ void Curl_sndbufset(curl_socket_t sockfd
 
   if(detectOsState == DETECT_OS_NONE) {
 #if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
-    (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
+    (_WIN32_WINNT < _WIN32_WINNT_WIN2K) || defined(_WIN32_WCE)
     OSVERSIONINFO osver;
 
     memset(&osver, 0, sizeof(osver));
diff -rupbN curl-curl-7_37_1/lib/curl_sspi.c curl-curl-7_37_1_new/lib/curl_sspi.c
--- curl-curl-7_37_1/lib/curl_sspi.c	2014-07-16 11:29:02.000000000 +0000
+++ curl-curl-7_37_1_new/lib/curl_sspi.c	2014-09-02 19:54:08.937137200 +0000
@@ -83,7 +83,7 @@ CURLcode Curl_sspi_global_init(void)
     DWORD platformId = VER_PLATFORM_WIN32_NT;
 
 #if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
-    (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
+    (_WIN32_WINNT < _WIN32_WINNT_WIN2K) || defined(_WIN32_WCE)
     OSVERSIONINFO osver;
 
     memset(&osver, 0, sizeof(osver));
diff -rupbN curl-curl-7_37_1/lib/formdata.c curl-curl-7_37_1_new/lib/formdata.c
--- curl-curl-7_37_1/lib/formdata.c	2014-07-16 11:29:02.000000000 +0000
+++ curl-curl-7_37_1_new/lib/formdata.c	2014-09-02 13:35:09.705128200 +0000
@@ -892,6 +892,7 @@ static CURLcode AddFormData(struct FormD
     else {
       /* Since this is a file to be uploaded here, add the size of the actual
          file */
+#ifndef _WIN32_WCE
       if(!strequal("-", newform->line)) {
         struct_stat file;
         if(!stat(newform->line, &file) && !S_ISDIR(file.st_mode))
@@ -899,6 +900,7 @@ static CURLcode AddFormData(struct FormD
         else
           return CURLE_BAD_FUNCTION_ARGUMENT;
       }
+#endif
     }
   }
   return CURLE_OK;
diff -rupbN curl-curl-7_37_1/lib/vtls/curl_schannel.c curl-curl-7_37_1_new/lib/vtls/curl_schannel.c
--- curl-curl-7_37_1/lib/vtls/curl_schannel.c	2014-07-16 11:29:02.000000000 +0000
+++ curl-curl-7_37_1_new/lib/vtls/curl_schannel.c	2014-09-11 12:03:54.500883600 +0000
@@ -117,6 +117,9 @@ schannel_connect_step1(struct connectdat
   SECURITY_STATUS sspi_status = SEC_E_OK;
   struct curl_schannel_cred *old_cred = NULL;
   struct in_addr addr;
+#ifdef _WIN32_WCE
+  ALG_ID algs[] = { CALG_RC4 };
+#endif
 #ifdef ENABLE_IPV6
   struct in6_addr addr6;
 #endif
@@ -192,6 +195,11 @@ schannel_connect_step1(struct connectdat
         break;
     }
 
+#ifdef _WIN32_WCE
+    schannel_cred.palgSupportedAlgs = algs;
+    schannel_cred.cSupportedAlgs = sizeof(algs) / sizeof(ALG_ID);
+#endif
+
     /* allocate memory for the re-usable credential handle */
     connssl->cred = (struct curl_schannel_cred *)
                      malloc(sizeof(struct curl_schannel_cred));
@@ -1293,11 +1301,11 @@ static CURLcode verify_certificate(struc
                               cert_hostname.tchar_ptr,
                               128);
       if(len > 0 && *cert_hostname.tchar_ptr == '*') {
-        /* this is a wildcard cert.  try matching the last len - 1 chars */
+        /* this is a wildcard cert.  try matching the last len - 2 chars */
         int hostname_len = strlen(conn->host.name);
-        cert_hostname.tchar_ptr++;
+        cert_hostname.tchar_ptr += 2;
         if(_tcsicmp(cert_hostname.const_tchar_ptr,
-                    hostname.const_tchar_ptr + hostname_len - len + 2) != 0)
+                    hostname.const_tchar_ptr) != 0)
           result = CURLE_PEER_FAILED_VERIFICATION;
       }
       else if(len == 0 || _tcsicmp(hostname.const_tchar_ptr,
diff -rupbN curl-curl-7_37_1/lib/warnless.c curl-curl-7_37_1_new/lib/warnless.c
--- curl-curl-7_37_1/lib/warnless.c	2014-07-16 11:29:02.000000000 +0000
+++ curl-curl-7_37_1_new/lib/warnless.c	2014-09-08 20:30:38.688855000 +0000
@@ -419,16 +419,16 @@ curl_socket_t curlx_sitosk(int i)
 
 #endif /* USE_WINSOCK */
 
-#if defined(WIN32) || defined(_WIN32)
+#if (defined(WIN32) || defined(_WIN32))
 
 ssize_t curlx_read(int fd, void *buf, size_t count)
 {
-  return (ssize_t)read(fd, buf, curlx_uztoui(count));
+  return (ssize_t)recv(fd, buf, curlx_uztoui(count), 0);
 }
 
 ssize_t curlx_write(int fd, const void *buf, size_t count)
 {
-  return (ssize_t)write(fd, buf, curlx_uztoui(count));
+  return (ssize_t)send(fd, buf, curlx_uztoui(count), 0);
 }
 
 #endif /* WIN32 || _WIN32 */
