|
@@ -0,0 +1,86 @@
|
|
|
|
+From b79d478c21ed6af20554ead97da72de845dc3206 Mon Sep 17 00:00:00 2001
|
|
|
|
+From: Peter Korsgaard <peter@korsgaard.com>
|
|
|
|
+Date: Sat, 25 Feb 2017 21:57:19 +0100
|
|
|
|
+Subject: [PATCH] Fix build with gcc 6
|
|
|
|
+
|
|
|
|
+Gcc 6.x defaults to C++14, and the iostream operator bool behaviour changed
|
|
|
|
+in C++11. In previous versions, a somewhat odd operator void* was used to
|
|
|
|
+return the status of the stream as a pointer. Since C++11 a more sensible
|
|
|
|
+operator bool is used to return the stream staus.
|
|
|
|
+
|
|
|
|
+For details, see:
|
|
|
|
+
|
|
|
|
+http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool
|
|
|
|
+
|
|
|
|
+The code in CConfigReadContext assumes the pre-C++11 behaviour and provides
|
|
|
|
+its own operator void overload to return the status of the embedded
|
|
|
|
+iostream. With C++11, iostream no longer provides this overload, breaking
|
|
|
|
+the build:
|
|
|
|
+
|
|
|
|
+CConfig.cpp: In member function 'CConfigReadContext::operator void*() const':
|
|
|
|
+CConfig.cpp:1851:9: error: cannot convert 'std::istream {aka std::basic_istream<char>}' to 'void*' in return
|
|
|
|
+ return m_stream;
|
|
|
|
+
|
|
|
|
+To fix it, backport part of upstream commit 3d963bfbe7897d0a33ad (possible
|
|
|
|
+fix for mavericks) which changes the code to simply provide a getStream()
|
|
|
|
+method which returns a reference to the embedded stream and the calling code
|
|
|
|
+is changed to use operator bool on the returned stream, making the code
|
|
|
|
+compatible with both old and new compilers.
|
|
|
|
+
|
|
|
|
+This upstream commit is part of the 1.6.0 release, so can be dropped when
|
|
|
|
+the version is bumped.
|
|
|
|
+
|
|
|
|
+Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
|
|
|
|
+---
|
|
|
|
+ lib/server/CConfig.cpp | 7 +------
|
|
|
|
+ lib/server/CConfig.h | 2 +-
|
|
|
|
+ 2 files changed, 2 insertions(+), 7 deletions(-)
|
|
|
|
+
|
|
|
|
+diff --git a/lib/server/CConfig.cpp b/lib/server/CConfig.cpp
|
|
|
|
+index a502fe78..d67dde20 100644
|
|
|
|
+--- a/lib/server/CConfig.cpp
|
|
|
|
++++ b/lib/server/CConfig.cpp
|
|
|
|
+@@ -607,7 +607,7 @@ void
|
|
|
|
+ CConfig::read(CConfigReadContext& context)
|
|
|
|
+ {
|
|
|
|
+ CConfig tmp;
|
|
|
|
+- while (context) {
|
|
|
|
++ while (context.getStream()) {
|
|
|
|
+ tmp.readSection(context);
|
|
|
|
+ }
|
|
|
|
+ *this = tmp;
|
|
|
|
+@@ -1846,11 +1846,6 @@ CConfigReadContext::getLineNumber() const
|
|
|
|
+ return m_line;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+-CConfigReadContext::operator void*() const
|
|
|
|
+-{
|
|
|
|
+- return m_stream;
|
|
|
|
+-}
|
|
|
|
+-
|
|
|
|
+ bool
|
|
|
|
+ CConfigReadContext::operator!() const
|
|
|
|
+ {
|
|
|
|
+diff --git a/lib/server/CConfig.h b/lib/server/CConfig.h
|
|
|
|
+index c0d2faa8..0ee453cb 100644
|
|
|
|
+--- a/lib/server/CConfig.h
|
|
|
|
++++ b/lib/server/CConfig.h
|
|
|
|
+@@ -480,7 +480,6 @@ public:
|
|
|
|
+ bool readLine(CString&);
|
|
|
|
+ UInt32 getLineNumber() const;
|
|
|
|
+
|
|
|
|
+- operator void*() const;
|
|
|
|
+ bool operator!() const;
|
|
|
|
+
|
|
|
|
+ OptionValue parseBoolean(const CString&) const;
|
|
|
|
+@@ -502,6 +501,7 @@ public:
|
|
|
|
+ IPlatformScreen::CButtonInfo*
|
|
|
|
+ parseMouse(const CString& mouse) const;
|
|
|
|
+ KeyModifierMask parseModifier(const CString& modifiers) const;
|
|
|
|
++ std::istream& getStream() const { return m_stream; };
|
|
|
|
+
|
|
|
|
+ private:
|
|
|
|
+ // not implemented
|
|
|
|
+--
|
|
|
|
+2.11.0
|
|
|
|
+
|