aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--include/curl/curl.h6
-rw-r--r--include/curl/multi.h3
-rw-r--r--lib/Makefile.am6
-rw-r--r--lib/config-win32ce.h258
-rw-r--r--lib/connect.c13
-rw-r--r--lib/dict.c4
-rw-r--r--lib/easy.c9
-rw-r--r--lib/file.c7
-rw-r--r--lib/formdata.c2
-rw-r--r--lib/ftp.c13
-rw-r--r--lib/getenv.c4
-rw-r--r--lib/hostthre.c9
-rw-r--r--lib/http.c4
-rw-r--r--lib/if2ip.c4
-rw-r--r--lib/ldap.c4
-rw-r--r--lib/mprintf.c18
-rw-r--r--lib/setup.h6
-rw-r--r--lib/strerror.c20
-rw-r--r--lib/telnet.c5
-rw-r--r--lib/transfer.c2
-rw-r--r--lib/url.c5
22 files changed, 385 insertions, 20 deletions
diff --git a/CHANGES b/CHANGES
index 195faa291..7112294f3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,9 @@
Changelog
+Daniel (2 November 2004)
+- Paul Nolan provided a patch to make libcurl build nicely on Windows CE.
+
Daniel (1 November 2004)
- When cross-compiling, the configure script no longer attempts to use
pkg-config on the build host in order to detect OpenSSL compiler options.
diff --git a/include/curl/curl.h b/include/curl/curl.h
index c631fc119..ca2c78eb3 100644
--- a/include/curl/curl.h
+++ b/include/curl/curl.h
@@ -52,10 +52,16 @@ extern "C" {
* platforms. We also provide a CURL_FORMAT_OFF_T define to use in *printf
* format strings when outputting a variable of type curl_off_t.
*/
+
#if defined(_MSC_VER) || defined(__LCC__)
/* MSVC */
+#ifdef _WIN32_WCE
+ typedef long curl_off_t;
+#define CURL_FORMAT_OFF_T "%ld"
+#else
typedef signed __int64 curl_off_t;
#define CURL_FORMAT_OFF_T "%I64d"
+#endif
#else /* _MSC_VER || __LCC__ */
#if (defined(__GNUC__) && defined(WIN32)) || defined(__WATCOMC__)
/* gcc on windows or Watcom */
diff --git a/include/curl/multi.h b/include/curl/multi.h
index da9df2e15..65b672d2c 100644
--- a/include/curl/multi.h
+++ b/include/curl/multi.h
@@ -51,7 +51,8 @@
#define WIN32 1
#endif
-#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)
+#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) || \
+ defined(__MINGW32__)
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
included, since they can't co-exist without problems */
diff --git a/lib/Makefile.am b/lib/Makefile.am
index d7f9f7d44..d5cca407f 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -24,14 +24,14 @@ AUTOMAKE_OPTIONS = foreign nostdinc
DSP = curllib.dsp
-EXTRA_DIST = Makefile.b32 Makefile.m32 \
+EXTRA_DIST = Makefile.b32 Makefile.m32 \
Makefile.vc6 Makefile.riscos libcurl.def $(DSP) curllib.dsw \
config-vms.h config-win32.h config-riscos.h config-mac.h config.h.in \
ca-bundle.crt README.encoding README.memoryleak README.ares \
README.curlx makefile.dj config.dj libcurl.framework.make \
libcurl.plist libcurl.rc config-amigaos.h amigaos.c amigaos.h \
- makefile.amiga Makefile.netware nwlib.c libcurl.imp \
- msvcproj.head msvcproj.foot
+ makefile.amiga Makefile.netware nwlib.c libcurl.imp \
+ msvcproj.head msvcproj.foot config-win32ce.h
CLEANFILES = $(DSP)
diff --git a/lib/config-win32ce.h b/lib/config-win32ce.h
new file mode 100644
index 000000000..e217d4c81
--- /dev/null
+++ b/lib/config-win32ce.h
@@ -0,0 +1,258 @@
+/* config.h. Generated automatically by configure. */
+/* config.h.in. Generated automatically from configure.in by autoheader. */
+
+#ifndef __CONFIG_WIN32_H
+#define __CONFIG_WIN32_H
+
+/* Define if on AIX 3.
+ System headers sometimes define this.
+ We just want to avoid a redefinition error message. */
+#ifndef _ALL_SOURCE
+/* #undef _ALL_SOURCE */
+#endif
+
+/* Define to empty if the keyword does not work. */
+/* #undef const */
+
+/* Define if you don't have vprintf but do have _doprnt. */
+/* #undef HAVE_DOPRNT */
+
+/* Define if you have the vprintf function. */
+#define HAVE_VPRINTF 1
+
+/* Define as the return type of signal handlers (int or void). */
+/*#define RETSIGTYPE void */
+
+/* Define to `unsigned' if <sys/types.h> doesn't define. */
+/* #undef size_t */
+
+/* Define this to 'int' if ssize_t is not an available typedefed type */
+#define ssize_t int
+
+/* Define this to 'int' if socklen_t is not an available typedefed type */
+#if !defined(ENABLE_IPV6) && ((_MSC_VER < 1300) || !defined(USE_SSLEAY))
+#define socklen_t int
+#endif
+
+/* The size of a `curl_off_t', as computed by sizeof. */
+#ifdef SIZEOF_CURL_OFF_T
+#undef SIZEOF_CURL_OFF_T
+#endif
+
+/* Borland lacks _lseeki64(), so we don't support >2GB files */
+#define SIZEOF_CURL_OFF_T 4
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+/* #define TIME_WITH_SYS_TIME 1 */
+
+/* Define cpu-machine-OS */
+#define OS "i386-pc-win32"
+
+/* The number of bytes in a long double. */
+#define SIZEOF_LONG_DOUBLE 16
+
+/* The number of bytes in a long long. */
+/* #define SIZEOF_LONG_LONG 8 */
+
+/* Define if you have the gethostbyaddr function. */
+#define HAVE_GETHOSTBYADDR 1
+
+/* Define if you have the gethostname function. */
+#define HAVE_GETHOSTNAME 1
+
+/* Define if you have the getpass function. */
+/*#define HAVE_GETPASS 1*/
+
+/* Define if you have the getservbyname function. */
+#define HAVE_GETSERVBYNAME 1
+
+/* Define if you have the gettimeofday function. */
+/* #define HAVE_GETTIMEOFDAY 1 */
+
+/* Define if you have the inet_addr function. */
+#define HAVE_INET_ADDR 1
+
+/* Define if you have the inet_ntoa function. */
+#define HAVE_INET_NTOA 1
+
+/* Define if you have the perror function. */
+#define HAVE_PERROR 1
+
+/* Define if you have the select function. */
+#define HAVE_SELECT 1
+
+/* Define if you have the socket function. */
+#define HAVE_SOCKET 1
+
+/* Define if you have the strcasecmp function. */
+/*#define HAVE_STRCASECMP 1*/
+
+/* Define if you have the stricmp function. */
+//#define HAVE_STRICMP 1
+
+/* Define if you have the strdup function. */
+//#define HAVE_STRDUP 1
+
+/* Define if you have the strftime function. */
+//#define HAVE_STRFTIME 1
+
+/* Define if you have the strstr function. */
+#define HAVE_STRSTR 1
+
+/* Define if you have the strtoll function. */
+#ifdef MINGW32
+#define HAVE_STRTOLL 1
+#endif
+
+/* Define if you have the tcgetattr function. */
+/*#define HAVE_TCGETATTR 1*/
+
+/* Define if you have the tcsetattr function. */
+/*#define HAVE_TCSETATTR 1*/
+
+/* Define if you have the uname function. */
+/*#define HAVE_UNAME 1*/
+
+/* Define if you have utime() */
+#define HAVE_UTIME 1
+
+/* Define if you have the <alloca.h> header file. */
+/*#define HAVE_ALLOCA_H 1*/
+
+/* Define if you have the malloc.h file. */
+#define HAVE_MALLOC_H 1
+
+/* Define if you have the <arpa/inet.h> header file. */
+/* #define HAVE_ARPA_INET_H 1 */
+
+/* Define if you have the <assert.h> header file. */
+//#define HAVE_ASSERT_H 1
+
+/* Define if you have the <crypto.h> header file. */
+/* #undef HAVE_CRYPTO_H */
+
+/* Define if you have the <dlfcn.h> header file. */
+/*#define HAVE_DLFCN_H 1*/
+
+/* Define if you have the <err.h> header file. */
+/* #undef HAVE_ERR_H */
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <getopt.h> header file. */
+/* #undef HAVE_GETOPT_H */
+
+/* Define if you have the <netdb.h> header file. */
+/* #define HAVE_NETDB_H 1 */
+
+/* Define if you have the <netinet/in.h> header file. */
+/*#define HAVE_NETINET_IN_H 1*/
+
+/* Define if you have the <sgtty.h> header file. */
+/*#define HAVE_SGTTY_H 1*/
+
+/* Define if you have the <ssl.h> header file. */
+/* #undef HAVE_SSL_H */
+
+/* Define if you have the <sys/param.h> header file. */
+/*#define HAVE_SYS_PARAM_H 1*/
+
+/* Define if you have the <sys/select.h> header file. */
+/* #define HAVE_SYS_SELECT_H 1 */
+
+/* Define if you have the <sys/socket.h> header file. */
+/*#define HAVE_SYS_SOCKET_H 1*/
+
+/* Define if you have the <sys/sockio.h> header file. */
+/* #define HAVE_SYS_SOCKIO_H 1 */
+
+/* Define if you have the <sys/stat.h> header file. */
+//#define HAVE_SYS_STAT_H 1
+
+/* Define if you have the <sys/utime.h> header file */
+#define HAVE_SYS_UTIME_H 1
+
+/* Define if you have the <sys/types.h> header file. */
+//#define HAVE_SYS_TYPES_H 1
+
+/* Define if you have the <termio.h> header file. */
+/* #define HAVE_TERMIO_H 1 */
+
+/* Define if you have the <termios.h> header file. */
+/* #define HAVE_TERMIOS_H 1 */
+
+/* Name of package */
+#define PACKAGE "curl"
+
+/* Define if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <winsock.h> header file. */
+#define HAVE_WINSOCK_H 1
+
+/* Define if you have the <winsock2.h> header file. */
+//#define HAVE_WINSOCK2_H 1
+
+/* Define if you have the <ws2tcpip.h> header file. */
+//#define HAVE_WS2TCPIP_H 1
+
+/* Define if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the closesocket function. */
+#define HAVE_CLOSESOCKET 1
+
+/* Define if you have the setvbuf function. */
+#define HAVE_SETVBUF 1
+
+/* Define if you have the RAND_screen function when using SSL */
+#define HAVE_RAND_SCREEN 1
+
+/* Define if you have the `RAND_status' function. */
+#define HAVE_RAND_STATUS 1
+
+/* Define this to if in_addr_t is not an available typedefed type */
+#define in_addr_t unsigned long
+
+/* use ioctlsocket() for non-blocking sockets */
+#define HAVE_IOCTLSOCKET
+
+/*************************************************
+ * This section is for compiler specific defines.*
+ *************************************************/
+/* Borland and MS don't have this */
+#if defined(MINGW32) || defined(__WATCOMC__) || defined(__LCC__)
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+#else
+
+#endif
+
+/* WinCE */
+
+#define CURL_DISABLE_FILE
+
+#define CURL_DISABLE_TELNET
+#define CURL_DISABLE_LDAP
+#define WITHOUT_MM_LIB
+
+#include <winsock.h>
+#include <process.h>
+
+extern int errno;
+
+#define ENOSPC 1
+#define ENOMEM 2
+
+extern int stat(const char *path,struct stat *buffer );
+
+#endif
diff --git a/lib/connect.c b/lib/connect.c
index 5d464acbd..c61301ad2 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -156,6 +156,7 @@ int Curl_nonblock(curl_socket_t sockfd, /* operate on this */
/* Windows? */
unsigned long flags;
flags = nonblock;
+
return ioctlsocket(sockfd, FIONBIO, &flags);
#define SETBLOCK 3
#endif
@@ -406,13 +407,25 @@ static bool verifyconnect(curl_socket_t sockfd, int *error)
*
* Someone got to verify this on Win-NT 4.0, 2000."
*/
+
+#ifdef _WIN32_WCE
+ Sleep(0);
+#else
SleepEx(0, FALSE);
#endif
+#endif
+
if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR,
(void *)&err, &errSize))
err = Curl_ourerrno();
+#ifdef _WIN32_WCE
+ /* Always returns this error, bug in CE? */
+ if(WSAENOPROTOOPT==err)
+ err=0;
+#endif
+
if ((0 == err) || (EISCONN == err))
/* we are connected, awesome! */
rc = TRUE;
diff --git a/lib/dict.c b/lib/dict.c
index 1b3f00452..f8e402bcf 100644
--- a/lib/dict.c
+++ b/lib/dict.c
@@ -29,8 +29,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#include <errno.h>
diff --git a/lib/easy.c b/lib/easy.c
index 228d2aef0..7a8278dd8 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -29,8 +29,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#include <errno.h>
@@ -168,6 +172,11 @@ static long init_flags = 0;
* If a memory-using function (like curl_getenv) is used before
* curl_global_init() is called, we need to have these pointers set already.
*/
+
+#ifdef _WIN32_WCE
+#define strdup _strdup
+#endif
+
curl_malloc_callback Curl_cmalloc = (curl_malloc_callback)malloc;
curl_free_callback Curl_cfree = (curl_free_callback)free;
curl_realloc_callback Curl_crealloc = (curl_realloc_callback)realloc;
diff --git a/lib/file.c b/lib/file.c
index 6d6287d74..7831d2ef2 100644
--- a/lib/file.c
+++ b/lib/file.c
@@ -30,8 +30,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#include <errno.h>
@@ -66,9 +70,6 @@
#include <sys/param.h>
#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
diff --git a/lib/formdata.c b/lib/formdata.c
index 442c306f5..fa26ebbe5 100644
--- a/lib/formdata.c
+++ b/lib/formdata.c
@@ -112,7 +112,9 @@ Content-Disposition: form-data; name="FILECONTENT"
#include <string.h>
#include <stdarg.h>
#include <time.h>
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
#include <libgen.h>
#endif
diff --git a/lib/ftp.c b/lib/ftp.c
index e20514047..f056dd81f 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -476,7 +476,7 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
char *buf = data->state.buffer; /* this is our buffer */
struct FTP *ftp;
CURLcode result;
- int ftpcode, try;
+ int ftpcode, trynum;
ftp = (struct FTP *)malloc(sizeof(struct FTP));
if(!ftp)
@@ -564,9 +564,9 @@ CURLcode Curl_ftp_connect(struct connectdata *conn)
return CURLE_FAILED_INIT; /* we don't know what to do */
}
- for (try = start; ftpauth[count]; try=trynext, count++) {
+ for (trynum = start; ftpauth[count]; trynum=trynext, count++) {
- FTPSENDF(conn, "AUTH %s", ftpauth[try]);
+ FTPSENDF(conn, "AUTH %s", ftpauth[trynum]);
result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
@@ -842,8 +842,15 @@ CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode status)
#ifdef HAVE_KRB4
Curl_sec_fflush_fd(conn, conn->sock[SECONDARYSOCKET]);
#endif
+
/* shut down the socket to inform the server we're done */
+
+#ifdef _WIN32_WCE
+ shutdown(conn->sock[SECONDARYSOCKET],2); /* SD_BOTH */
+#endif
+
sclose(conn->sock[SECONDARYSOCKET]);
+
conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
if(!ftp->no_transfer && !status) {
diff --git a/lib/getenv.c b/lib/getenv.c
index 8f8311bf0..fbf37a992 100644
--- a/lib/getenv.c
+++ b/lib/getenv.c
@@ -43,6 +43,9 @@
static
char *GetEnv(const char *variable)
{
+#ifdef _WIN32_WCE
+ return NULL;
+#else
#ifdef WIN32
/* This shit requires windows.h (HUGE) to be included */
char env[MAX_PATH]; /* MAX_PATH is from windef.h */
@@ -62,6 +65,7 @@ char *GetEnv(const char *variable)
#endif
#endif
return (env && env[0])?strdup(env):NULL;
+#endif
}
char *curl_getenv(const char *v)
diff --git a/lib/hostthre.c b/lib/hostthre.c
index fad335b45..2d70f2ef4 100644
--- a/lib/hostthre.c
+++ b/lib/hostthre.c
@@ -195,7 +195,9 @@ static unsigned __stdcall gethostbyname_thread (void *arg)
* hopefully make printouts synchronised. I'm not sure it works
* with a static runtime lib (MSVC's libc.lib).
*/
+#ifndef _WIN32_WCE
*stderr = *td->stderr_file;
+#endif
WSASetLastError (conn->async.status = NO_DATA); /* pending status */
he = gethostbyname (conn->async.hostname);
@@ -375,8 +377,15 @@ static bool init_resolve_thread (struct connectdata *conn,
}
td->stderr_file = stderr;
+
+#ifdef _WIN32_WCE
+ td->thread_hnd=(HANDLE) CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) THREAD_FUNC,conn,0,&td->thread_id);
+#else
+
td->thread_hnd = (HANDLE) _beginthreadex(NULL, 0, THREAD_FUNC,
conn, 0, &td->thread_id);
+#endif
+
#ifdef CURLRES_IPV6
curlassert(hints);
td->hints = *hints;
diff --git a/lib/http.c b/lib/http.c
index ee5b81ff6..1de316b2f 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -30,8 +30,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#include <errno.h>
diff --git a/lib/if2ip.c b/lib/if2ip.c
index 96ecc5348..8f0a07782 100644
--- a/lib/if2ip.c
+++ b/lib/if2ip.c
@@ -127,9 +127,9 @@ char *Curl_if2ip(const char *interface, char *buf, int buf_size)
/* -- end of if2ip() -- */
#else
-char *Curl_if2ip(const char *interface, char *buf, int buf_size)
+char *Curl_if2ip(const char *interf, char *buf, int buf_size)
{
- (void) interface;
+ (void) interf;
(void) buf;
(void) buf_size;
return NULL;
diff --git a/lib/ldap.c b/lib/ldap.c
index e140f4ffa..c6f7e5490 100644
--- a/lib/ldap.c
+++ b/lib/ldap.c
@@ -30,8 +30,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#include <errno.h>
#if defined(WIN32)
diff --git a/lib/mprintf.c b/lib/mprintf.c
index 9135a1308..629a9e07c 100644
--- a/lib/mprintf.c
+++ b/lib/mprintf.c
@@ -40,6 +40,12 @@
#include <curl/mprintf.h>
+#ifdef _WIN32_WCE
+#define CURL_CDECL __cdecl
+#else
+#define CURL_CDECL
+#endif
+
#ifndef SIZEOF_LONG_DOUBLE
#define SIZEOF_LONG_DOUBLE 0
#endif
@@ -583,7 +589,12 @@ static int dprintf_formatf(
void *data, /* untouched by format(), just sent to the stream() function in
the second argument */
/* function pointer called for each output character */
+
+#if _WIN32_WCE
+ int (__cdecl *stream) (int, FILE *),
+#else
int (*stream)(int, FILE *),
+#endif
const char *format, /* %-formatted string */
va_list ap_save) /* list of parameters */
{
@@ -979,7 +990,7 @@ static int dprintf_formatf(
}
/* fputc() look-alike */
-static int addbyter(int output, FILE *data)
+static int CURL_CDECL addbyter(int output, FILE *data)
{
struct nsprintf *infop=(struct nsprintf *)data;
unsigned char outc = (unsigned char)output;
@@ -1027,7 +1038,7 @@ int curl_msnprintf(char *buffer, size_t maxlength, const char *format, ...)
}
/* fputc() look-alike */
-static int alloc_addbyter(int output, FILE *data)
+static int CURL_CDECL alloc_addbyter(int output, FILE *data)
{
struct asprintf *infop=(struct asprintf *)data;
unsigned char outc = (unsigned char)output;
@@ -1113,7 +1124,7 @@ char *curl_mvaprintf(const char *format, va_list ap_save)
return strdup("");
}
-static int storebuffer(int output, FILE *data)
+static int CURL_CDECL storebuffer(int output, FILE *data)
{
char **buffer = (char **)data;
unsigned char outc = (unsigned char)output;
@@ -1142,6 +1153,7 @@ int curl_mprintf(const char *format, ...)
int retcode;
va_list ap_save; /* argument pointer */
va_start(ap_save, format);
+
retcode = dprintf_formatf(stdout, fputc, format, ap_save);
va_end(ap_save);
return retcode;
diff --git a/lib/setup.h b/lib/setup.h
index c6ee81181..f121b7320 100644
--- a/lib/setup.h
+++ b/lib/setup.h
@@ -40,11 +40,15 @@
#ifdef HAVE_CONFIG_H
#include "config.h" /* the configure script results */
#else
+#ifdef _WIN32_WCE
+#include "config-win32ce.h"
+#else
#ifdef WIN32
/* hand-modified win32 config.h! */
#include "config-win32.h"
#endif
#endif
+#endif
#ifdef macintosh
/* hand-modified MacOS config.h! */
@@ -173,7 +177,9 @@ defined(HAVE_LIBSSL) && defined(HAVE_LIBCRYPTO)
#define _WIN32_WINNT 0x0501
#endif
+#if HAVE_WINSOCK2_H
#include <winsock2.h> /* required by telnet.c */
+#endif
#if defined(ENABLE_IPV6) || defined(USE_SSLEAY)
#include <ws2tcpip.h>
diff --git a/lib/strerror.c b/lib/strerror.c
index dd5acc81b..fa84a1731 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -515,15 +515,29 @@ const char *Curl_strerror(struct connectdata *conn, int err)
*buf = '\0';
#if defined(WIN32) && !defined(__CYGWIN__)
+
+#if _WIN32_WCE
+ buf[0]=0;
+ {
+ wchar_t wbuf[256];
+
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
+ LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL);
+ wcstombs(buf,wbuf,max);
+ }
+
+#else
+
/* 'sys_nerr' is the maximum errno number, it is not widely portable */
if (err >= 0 && err < sys_nerr)
strncpy(buf, strerror(err), max);
else {
- if (!get_winsock_error (err, buf, max) &&
- !FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
- LANG_NEUTRAL, buf, max, NULL))
+ if (!get_winsock_error(err, buf, max) &&
+ !FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
+ LANG_NEUTRAL, buf, max, NULL))
snprintf(buf, max, "Unknown error %d (%#x)", err, err);
}
+#endif
#else /* not native Windows coming up */
/* These should be atomic and hopefully thread-safe */
diff --git a/lib/telnet.c b/lib/telnet.c
index b0f74bb8d..c2813fa2a 100644
--- a/lib/telnet.c
+++ b/lib/telnet.c
@@ -30,9 +30,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
-
+#endif
#include <errno.h>
#if defined(WIN32)
diff --git a/lib/transfer.c b/lib/transfer.c
index 904dbd15b..389ed6e16 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -32,7 +32,9 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
+#endif
#include <errno.h>
diff --git a/lib/url.c b/lib/url.c
index e84d05489..c474bdcab 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -30,9 +30,12 @@
#include <stdarg.h>
#include <stdlib.h>
#include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
-
+#endif
#include <errno.h>
#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__)