diff --git a/include/wx/filefn.h b/include/wx/filefn.h index f65cdac71d..ca6f7ea142 100644 --- a/include/wx/filefn.h +++ b/include/wx/filefn.h @@ -166,7 +166,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__) @@ -177,6 +179,17 @@ enum wxFileKind #define wxHAS_HUGE_FILES 1 #endif + // detect compilers which have support for huge stdio files + #if defined __VISUALC__ && __VISUALC__ >= 1400 + #define wxHAS_HUGE_STDIO_FILES + #define wxFseek _fseeki64 + #define wxFtell _ftelli64 + #elif wxCHECK_MINGW32_VERSION(3, 5) // mingw-runtime version (not gcc) + #define wxHAS_HUGE_STDIO_FILES + #define wxFseek fseeko64 + #define wxFtell ftello64 + #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 @@ -381,16 +394,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 #else // Unix or Windows using unknown compiler, assume POSIX supported typedef off_t wxFileOffset; #ifdef _LARGE_FILES @@ -405,6 +421,10 @@ enum wxFileKind #if 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 @@ -443,6 +463,15 @@ enum wxFileKind #define wxHAS_NATIVE_LSTAT #endif // platforms +// 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 + #ifdef O_BINARY #define wxO_BINARY O_BINARY #else diff --git a/include/wx/platform.h b/include/wx/platform.h index 0adfd722f9..98da70dbfc 100644 --- a/include/wx/platform.h +++ b/include/wx/platform.h @@ -578,6 +578,8 @@ #else # undef wxCHECK_W32API_VERSION # define wxCHECK_W32API_VERSION(maj, min) (0) +# undef wxCHECK_MINGW32_VERSION +# define wxCHECK_MINGW32_VERSION(maj, min) (0) #endif #if defined (__WXMSW__) diff --git a/src/common/ffile.cpp b/src/common/ffile.cpp index 997bf03d2b..580cdce99c 100644 --- a/src/common/ffile.cpp +++ b/src/common/ffile.cpp @@ -41,18 +41,6 @@ // implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// seek and tell with large file support if available -// ---------------------------------------------------------------------------- - -#ifdef HAVE_FSEEKO -# define wxFseek fseeko -# define wxFtell ftello -#else -# define wxFseek fseek -# define wxFtell ftell -#endif - // ---------------------------------------------------------------------------- // opening the file // ---------------------------------------------------------------------------- @@ -206,7 +194,7 @@ bool wxFFile::Seek(wxFileOffset ofs, wxSeekMode mode) break; } -#ifndef HAVE_FSEEKO +#ifndef wxHAS_LARGE_FFILES if ((long)ofs != ofs) { wxLogError(_("Seek error on file '%s' (large files not supported by stdio)"), m_name.c_str()); diff --git a/tests/streams/largefile.cpp b/tests/streams/largefile.cpp index 1366ae6091..60de960b10 100644 --- a/tests/streams/largefile.cpp +++ b/tests/streams/largefile.cpp @@ -256,8 +256,8 @@ wxOutputStream *LargeFileTest_wxFFile::MakeOutStream(const wxString& name) const bool LargeFileTest_wxFFile::HasLFS() const { -#ifdef HAVE_FSEEKO - return (wxFileOffset)0xffffffff > 0; +#ifdef wxHAS_LARGE_FFILES + return true; #else return false; #endif