From fe58041a619f6854d8bf7fb05ff7f718465cc9b9 Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Sun, 25 Oct 2015 12:57:43 -0700 Subject: Fix Borland C++ 5.4 compilation It does not have stdint.h and has some C++ parsing issues. --- src/pugixml.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 737733e..217e001 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -132,9 +132,7 @@ using std::memset; #endif // uintptr_t -#if !defined(_MSC_VER) || _MSC_VER >= 1600 -# include -#else +#if (defined(_MSC_VER) && _MSC_VER < 1600) || (defined(__BORLANDC__) && __BORLANDC__ < 0x561) namespace pugi { # ifndef _UINTPTR_T_DEFINED @@ -145,6 +143,8 @@ namespace pugi typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; } +#else +# include #endif // Memory allocation @@ -6450,7 +6450,7 @@ namespace pugi PUGI__FN xml_node* xml_node_iterator::operator->() const { assert(_wrap._root); - return const_cast(&_wrap); // BCC32 workaround + return const_cast(&_wrap); // BCC5 workaround } PUGI__FN const xml_node_iterator& xml_node_iterator::operator++() @@ -6511,7 +6511,7 @@ namespace pugi PUGI__FN xml_attribute* xml_attribute_iterator::operator->() const { assert(_wrap._attr); - return const_cast(&_wrap); // BCC32 workaround + return const_cast(&_wrap); // BCC5 workaround } PUGI__FN const xml_attribute_iterator& xml_attribute_iterator::operator++() @@ -6572,7 +6572,7 @@ namespace pugi PUGI__FN xml_node* xml_named_node_iterator::operator->() const { assert(_wrap._root); - return const_cast(&_wrap); // BCC32 workaround + return const_cast(&_wrap); // BCC5 workaround } PUGI__FN const xml_named_node_iterator& xml_named_node_iterator::operator++() @@ -6792,7 +6792,8 @@ namespace pugi reset(); using impl::auto_deleter; // MSVC7 workaround - auto_deleter file(fopen(path_, "rb"), fclose); + typedef int (*fclose_t)(FILE*); // BCC5 workaround + auto_deleter file(fopen(path_, "rb"), fclose); return impl::load_file_impl(static_cast(_root), file.data, options, encoding, &_buffer); } @@ -6802,7 +6803,8 @@ namespace pugi reset(); using impl::auto_deleter; // MSVC7 workaround - auto_deleter file(impl::open_file_wide(path_, L"rb"), fclose); + typedef int (*fclose_t)(FILE*); // BCC5 workaround + auto_deleter file(impl::open_file_wide(path_, L"rb"), fclose); return impl::load_file_impl(static_cast(_root), file.data, options, encoding, &_buffer); } @@ -6875,7 +6877,8 @@ namespace pugi PUGI__FN bool xml_document::save_file(const char* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const { using impl::auto_deleter; // MSVC7 workaround - auto_deleter file(fopen(path_, (flags & format_save_file_text) ? "w" : "wb"), fclose); + typedef int (*fclose_t)(FILE*); // BCC5 workaround + auto_deleter file(fopen(path_, (flags & format_save_file_text) ? "w" : "wb"), fclose); return impl::save_file_impl(*this, file.data, indent, flags, encoding); } @@ -6883,7 +6886,8 @@ namespace pugi PUGI__FN bool xml_document::save_file(const wchar_t* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const { using impl::auto_deleter; // MSVC7 workaround - auto_deleter file(impl::open_file_wide(path_, (flags & format_save_file_text) ? L"w" : L"wb"), fclose); + typedef int (*fclose_t)(FILE*); // BCC5 workaround + auto_deleter file(impl::open_file_wide(path_, (flags & format_save_file_text) ? L"w" : L"wb"), fclose); return impl::save_file_impl(*this, file.data, indent, flags, encoding); } @@ -7825,9 +7829,11 @@ PUGI__NS_BEGIN PUGI__FN double gen_nan() { #if defined(__STDC_IEC_559__) || ((FLT_RADIX - 0 == 2) && (FLT_MAX_EXP - 0 == 128) && (FLT_MANT_DIG - 0 == 24)) - union { float f; uint32_t i; } u[sizeof(float) == sizeof(uint32_t) ? 1 : -1]; - u[0].i = 0x7fc00000; - return u[0].f; + PUGI__STATIC_ASSERT(sizeof(float) == sizeof(uint32_t)); + typedef uint32_t UI; // BCC5 workaround + union { float f; UI i; } u; + u.i = 0x7fc00000; + return u.f; #else // fallback const volatile double zero = 0.0; -- cgit v1.2.3