Paul Nolan fix to make libcurl build nicely on Windows CE

This commit is contained in:
Daniel Stenberg 2004-11-02 10:12:22 +00:00
parent 8a66584db4
commit 24d47a6e07
22 changed files with 385 additions and 20 deletions

View File

@ -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.

View File

@ -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 */

View File

@ -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 */

View File

@ -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)

258
lib/config-win32ce.h Normal file
View File

@ -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

View File

@ -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;

View File

@ -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>

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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) {

View File

@ -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)

View File

@ -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;

View File

@ -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>

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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>

View File

@ -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 */

View File

@ -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)

View File

@ -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>

View File

@ -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__)