aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--lib/config-win32.h16
-rw-r--r--lib/config-win32ce.h16
-rw-r--r--lib/setup.h37
-rw-r--r--src/config-win32.h16
-rw-r--r--src/main.c32
6 files changed, 102 insertions, 18 deletions
diff --git a/CHANGES b/CHANGES
index 4a017a72b..6ec2ddfc1 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 7169bf2ec..a0c0bf5b2 100644
--- a/lib/config-win32.h
+++ b/lib/config-win32.h
@@ -391,6 +391,22 @@
#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 21f7eea64..50ddd18b8 100644
--- a/lib/config-win32ce.h
+++ b/lib/config-win32ce.h
@@ -341,6 +341,22 @@
#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 4354f7fa8..2de894cef 100644
--- a/lib/setup.h
+++ b/lib/setup.h
@@ -270,18 +270,33 @@
#include <clib.h>
#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 <sys/stat.h> /* must come first before we redefine stat() */
-#include <io.h>
-#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 <io.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# 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 <io.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# 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 84a16fdc8..654d892d8 100644
--- a/src/config-win32.h
+++ b/src/config-win32.h
@@ -236,6 +236,22 @@
#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 b70219189..6c149cfb6 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 <io.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# 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 <io.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+# 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