diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-05-05 20:14:31 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-05-05 20:14:31 (GMT) |
commit | 01e8f4792591f744893ab7ff799200efc8ad299a (patch) | |
tree | 9b5001b242ec114f72bfaef3757eebe7d7ebc2cd /SwifTools/URIHandler | |
parent | 772b2ec0243d7b55d91e4027d828881d18093ed0 (diff) | |
download | swift-contrib-01e8f4792591f744893ab7ff799200efc8ad299a.zip swift-contrib-01e8f4792591f744893ab7ff799200efc8ad299a.tar.bz2 |
Use naive XMPPURI transformation to work around a bug in GCC4.5+boost1.42.
Diffstat (limited to 'SwifTools/URIHandler')
-rw-r--r-- | SwifTools/URIHandler/XMPPURI.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/SwifTools/URIHandler/XMPPURI.cpp b/SwifTools/URIHandler/XMPPURI.cpp index de83ac2..cb81391 100644 --- a/SwifTools/URIHandler/XMPPURI.cpp +++ b/SwifTools/URIHandler/XMPPURI.cpp @@ -18,6 +18,9 @@ using namespace Swift; +// Disabling this code for now, since GCC4.5+boost1.42 (on ubuntu) seems to +// result in a bug. Replacing it with naive code. +#if 0 // Should be in anonymous namespace, but older GCCs complain if we do that struct PercentEncodedCharacterFinder { template<typename Iterator> @@ -63,6 +66,35 @@ namespace { } } } +#endif +namespace { + std::string unescape(const std::string& str) { + std::string result; + for (size_t i = 0; i < str.size(); ++i) { + if (str[i] == '%') { + if (i + 3 < str.size()) { + std::stringstream s; + s << std::hex << str.substr(i+1, 2); + unsigned int value; + s >> value; + if (s.fail() || s.bad()) { + return ""; + } + unsigned char charValue = static_cast<unsigned char>(value); + result += std::string(reinterpret_cast<const char*>(&charValue), 1); + i += 2; + } + else { + return ""; + } + } + else { + result += str[i]; + } + } + return result; + } +} XMPPURI::XMPPURI() { } |