diff --git a/CHANGES b/CHANGES index 4a017a72bdcba6d826dbc91977a5380d2d96b741..6ec2ddfc1fbe3ce8ac37944e86e5ddbb668ec2a8 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,9 @@ Yang Tse (22 Aug 2008) - Improved libcurl's internal curl_m*printf() functions integral data type size and signedness handling. +- Internal adjustments to better select/differentiate when large/small file + support is provided using WIN32 functions directly. + Daniel Fandrich (20 Aug 2008) - Added an edited version of Vincent Le Normand's documentation of SFTP quote commands to the man pages. diff --git a/lib/config-win32.h b/lib/config-win32.h index 7169bf2ecd30084b57baef362346ee24ca737760..a0c0bf5b20b03e5fd9f3124e84ab942386af2930 100644 --- a/lib/config-win32.h +++ b/lib/config-win32.h @@ -390,6 +390,22 @@ # endif #endif +/* ---------------------------------------------------------------- */ +/* LARGE FILE SUPPORT */ +/* ---------------------------------------------------------------- */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define USE_WIN32_LARGE_FILES +# else +# define USE_WIN32_SMALL_FILES +# endif +#endif + +#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES) +# define USE_WIN32_SMALL_FILES +#endif + /* ---------------------------------------------------------------- */ /* LDAP SUPPORT */ /* ---------------------------------------------------------------- */ diff --git a/lib/config-win32ce.h b/lib/config-win32ce.h index 21f7eea6423b773a613aac6f02cc515da91b17e9..50ddd18b8b007f2bbdcc4cae2256655b8de189ad 100644 --- a/lib/config-win32ce.h +++ b/lib/config-win32ce.h @@ -340,6 +340,22 @@ # endif #endif +/* ---------------------------------------------------------------- */ +/* LARGE FILE SUPPORT */ +/* ---------------------------------------------------------------- */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define USE_WIN32_LARGE_FILES +# else +# define USE_WIN32_SMALL_FILES +# endif +#endif + +#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES) +# define USE_WIN32_SMALL_FILES +#endif + /* ---------------------------------------------------------------- */ /* LDAP SUPPORT */ /* ---------------------------------------------------------------- */ diff --git a/lib/setup.h b/lib/setup.h index 4354f7fa8e13e5a8f970eebef5431395ffacb823..2de894cef5a636ac3ce4451c5364b677ecd0959d 100644 --- a/lib/setup.h +++ b/lib/setup.h @@ -270,18 +270,33 @@ #include #endif +/* + * Large file (>2Gb) support using WIN32 functions. + */ -/* To make large file support transparent even on Windows */ -#if defined(WIN32) && (CURL_SIZEOF_CURL_OFF_T > 4) -#include /* must come first before we redefine stat() */ -#include -#define lseek(x,y,z) _lseeki64(x, y, z) -#define struct_stat struct _stati64 -#define stat(file,st) _stati64(file,st) -#define fstat(fd,st) _fstati64(fd,st) -#else -#define struct_stat struct stat -#endif /* Win32 with large file support */ +#ifdef USE_WIN32_LARGE_FILES +# include +# include +# include +# define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence) +# define fstat(fdes,stp) _fstati64(fdes, stp) +# define stat(fname,stp) _stati64(fname, stp) +# define struct_stat struct _stati64 +#endif + +/* + * Small file (<2Gb) support using WIN32 functions. + */ + +#ifdef USE_WIN32_SMALL_FILES +# include +# include +# include +# define lseek(fdes,offset,whence) _lseek(fdes, offset, whence) +# define fstat(fdes,stp) _fstat(fdes, stp) +# define stat(fname,stp) _stat(fname, stp) +# define struct_stat struct _stat +#endif /* Below we define some functions. They should diff --git a/src/config-win32.h b/src/config-win32.h index 84a16fdc8777a242f2f5f3c7f8da6bfcb6453474..654d892d840c5a409e0fd98fa537deabc610efbf 100644 --- a/src/config-win32.h +++ b/src/config-win32.h @@ -235,6 +235,22 @@ # endif #endif +/* ---------------------------------------------------------------- */ +/* LARGE FILE SUPPORT */ +/* ---------------------------------------------------------------- */ + +#if defined(_MSC_VER) && !defined(_WIN32_WCE) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define USE_WIN32_LARGE_FILES +# else +# define USE_WIN32_SMALL_FILES +# endif +#endif + +#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES) +# define USE_WIN32_SMALL_FILES +#endif + /* ---------------------------------------------------------------- */ /* ADDITIONAL DEFINITIONS */ /* ---------------------------------------------------------------- */ diff --git a/src/main.c b/src/main.c index b70219189b939aca131c09b8f0f2f9908d128120..6c149cfb626796e10bc6cfe0252fca4a7be80c6c 100644 --- a/src/main.c +++ b/src/main.c @@ -210,14 +210,32 @@ typedef enum { #include "curlmsg_vms.h" #endif -/* Support uploading and resuming of >2GB files +/* + * Large file support (>2Gb) using WIN32 functions. */ -#if defined(WIN32) && (CURL_SIZEOF_CURL_OFF_T > 4) -#define lseek(x,y,z) _lseeki64(x, y, z) -#define struct_stat struct _stati64 -#define stat(file,st) _stati64(file,st) -#else -#define struct_stat struct stat + +#ifdef USE_WIN32_LARGE_FILES +# include +# include +# include +# define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence) +# define fstat(fdes,stp) _fstati64(fdes, stp) +# define stat(fname,stp) _stati64(fname, stp) +# define struct_stat struct _stati64 +#endif + +/* + * Small file support (<2Gb) using WIN32 functions. + */ + +#ifdef USE_WIN32_SMALL_FILES +# include +# include +# include +# define lseek(fdes,offset,whence) _lseek(fdes, offset, whence) +# define fstat(fdes,stp) _fstat(fdes, stp) +# define stat(fname,stp) _stat(fname, stp) +# define struct_stat struct _stat #endif #ifdef CURL_DOES_CONVERSIONS