]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/filefn.h
Add support for large stdio files for VC 8+. What versions of the other Windows
[wxWidgets.git] / include / wx / filefn.h
index 364d83daa5b5b20de0d1e4e7f1ae00b2542da960..c5bdf72ef441ea63f6fc91b22efc7cd8eafc5ff3 100644 (file)
@@ -172,7 +172,9 @@ enum wxFileKind
         defined(__BORLANDC__) \
       )
 
+    // temporary defines just used immediately below
     #undef wxHAS_HUGE_FILES
+    #undef wxHAS_HUGE_STDIO_FILES
 
     // detect compilers which have support for huge files
     #if defined(__VISUALC__)
@@ -183,6 +185,13 @@ enum wxFileKind
         #define wxHAS_HUGE_FILES 1
     #endif
 
+    // detect compilers which have support for huge stdio files
+    #if wxCHECK_VISUALC_VERSION(8)
+        #define wxHAS_HUGE_STDIO_FILES
+        #define wxFseek _fseeki64
+        #define wxFtell _ftelli64
+    #endif
+
     // other Windows compilers (DMC, Watcom, Metrowerks and Borland) don't have
     // huge file support (or at least not all functions needed for it by wx)
     // currently
@@ -397,16 +406,19 @@ enum wxFileKind
     #endif // wxHAS_UNDERSCORES_IN_POSIX_IDENTS
 
     #ifdef wxHAS_HUGE_FILES
-        // wxFile is present and supports large files. Currently wxFFile
-        // doesn't have large file support with any Windows compiler (even
-        // Win64 ones).
+        // wxFile is present and supports large files.
         #if wxUSE_FILE
             #define wxHAS_LARGE_FILES
         #endif
+        // wxFFile is present and supports large files
+        #if wxUSE_FFILE && defined wxHAS_HUGE_STDIO_FILES
+            #define wxHAS_LARGE_FFILES
+        #endif
     #endif
 
-    // it's a private define, undefine it so that nobody gets tempted to use it
+    // private defines, undefine so that nobody gets tempted to use
     #undef wxHAS_HUGE_FILES
+    #undef wxHAS_HUGE_STDIO_FILES
 #elif defined (__WXPALMOS__)
     typedef off_t wxFileOffset;
 #ifdef _LARGE_FILES
@@ -458,6 +470,10 @@ enum wxFileKind
         #if wxUSE_FFILE && (SIZEOF_LONG == 8 || defined HAVE_FSEEKO)
             #define wxHAS_LARGE_FFILES
         #endif
+        #ifdef HAVE_FSEEKO
+            #define wxFseek fseeko
+            #define wxFtell ftello
+        #endif
     #else
         #define wxFileOffsetFmtSpec wxT("")
     #endif
@@ -491,6 +507,15 @@ enum wxFileKind
     #define wxCRT_Lstat wxCRT_Stat
 #endif
 
+// define wxFseek/wxFtell to large file versions if available (done above) or
+// to fseek/ftell if not, to save ifdefs in using code
+#ifndef wxFseek
+    #define wxFseek fseek
+#endif
+#ifndef wxFtell
+    #define wxFtell ftell
+#endif
+
 inline int wxAccess(const wxString& path, mode_t mode)
     { return wxCRT_Access(path.fn_str(), mode); }
 inline int wxOpen(const wxString& path, int flags, mode_t mode)