summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2014-12-13 20:34:10 -0800
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2014-12-13 20:34:10 -0800
commitff16dbdd4c63fa46cc1f38eda4cfb66f38047657 (patch)
treed298e04fb81cc7c71bbd2cd566f7e918724d8d3c
parent10c9206de2ae4079ca1239ff44cee3fdb1deadf5 (diff)
Don't use off64_t/_wfopen on MinGW32 in C++11 modev1.5
Unfortunately, standard headers on MinGW32 insist on undefining off64_t and _wfopen extensions if __STRICT_ANSI__ is true (e.g. C++11 mode). This leads to compilation errors since b7a1fec started to use _wfopen in strict mode. That change erroneously checked GCC version - however, the version itself is irrelevant; the actual criteria is whether mingw64 runtime is used. off64_t is not useful on MinGW32 since we only need it to open large files on 64-bit platforms; unfortunately, the lack of _wfopen means we won't be able to support wide-char paths on Windows for MinGW32. Fixes #24.
-rw-r--r--src/pugixml.cpp4
-rw-r--r--tests/test_document.cpp2
2 files changed, 3 insertions, 3 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index b8847a4..dd3f427 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -3995,7 +3995,7 @@ PUGI__NS_BEGIN
_fseeki64(file, 0, SEEK_END);
length_type length = _ftelli64(file);
_fseeki64(file, 0, SEEK_SET);
- #elif defined(__MINGW32__) && !defined(__NO_MINGW_LFS) && !(defined(__STRICT_ANSI__) && __GNUC__ * 100 + __GNUC_MINOR__ <= 405)
+ #elif defined(__MINGW32__) && !defined(__NO_MINGW_LFS) && (!defined(__STRICT_ANSI__) || defined(__MINGW64_VERSION_MAJOR))
// there are 64-bit versions of fseek/ftell, let's use them
typedef off64_t length_type;
@@ -4240,7 +4240,7 @@ PUGI__NS_BEGIN
}
#endif
-#if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) || (defined(__MINGW32__) && !(defined(__STRICT_ANSI__) && __GNUC__ * 100 + __GNUC_MINOR__ <= 405))
+#if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) || (defined(__MINGW32__) && (!defined(__STRICT_ANSI__) || defined(__MINGW64_VERSION_MAJOR)))
PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode)
{
return _wfopen(path, mode);
diff --git a/tests/test_document.cpp b/tests/test_document.cpp
index f57465f..ebcdcd1 100644
--- a/tests/test_document.cpp
+++ b/tests/test_document.cpp
@@ -323,7 +323,7 @@ TEST(document_load_file_wide_ascii)
CHECK_NODE(doc, STR("<node />"));
}
-#if !defined(__DMC__) && !defined(__MWERKS__) && !(defined(__MINGW32__) && defined(__STRICT_ANSI__) && __GNUC__ * 100 + __GNUC_MINOR__ <= 405)
+#if !defined(__DMC__) && !defined(__MWERKS__) && !(defined(__MINGW32__) && defined(__STRICT_ANSI__) && !defined(__MINGW64_VERSION_MAJOR))
TEST(document_load_file_wide_unicode)
{
pugi::xml_document doc;