diff options
author | Brad King <brad.king@kitware.com> | 2009-02-24 20:43:06 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-02-24 20:43:06 (GMT) |
commit | 3f4064f7ac672a511937b0a8aba04f87eb831294 (patch) | |
tree | 5d2530d5a0c4033dd45a11f1a59ce3a8c449df28 | |
parent | 39f8b91125ee3cb426968f089049f393dee1f699 (diff) | |
download | CMake-3f4064f7ac672a511937b0a8aba04f87eb831294.zip CMake-3f4064f7ac672a511937b0a8aba04f87eb831294.tar.gz CMake-3f4064f7ac672a511937b0a8aba04f87eb831294.tar.bz2 |
ENH: Add cmCTest::DecodeURL method
This new method decodes the "percent-encoding" used in URL syntax.
-rw-r--r-- | Source/cmCTest.cxx | 21 | ||||
-rw-r--r-- | Source/cmCTest.h | 3 |
2 files changed, 24 insertions, 0 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index df7c110..c1f2752 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -47,6 +47,7 @@ #include <stdlib.h> #include <math.h> #include <float.h> +#include <ctype.h> #include <memory> // auto_ptr @@ -180,6 +181,26 @@ std::string cmCTest::MakeURLSafe(const std::string& str) return ost.str(); } +//---------------------------------------------------------------------------- +std::string cmCTest::DecodeURL(const std::string& in) +{ + std::string out; + for(const char* c = in.c_str(); *c; ++c) + { + if(*c == '%' && isxdigit(*(c+1)) && isxdigit(*(c+2))) + { + char buf[3] = {*(c+1), *(c+2), 0}; + out.append(1, char(strtoul(buf, 0, 16))); + c += 2; + } + else + { + out.append(1, *c); + } + } + return out; +} + //---------------------------------------------------------------------- cmCTest::cmCTest() { diff --git a/Source/cmCTest.h b/Source/cmCTest.h index 2839f30..5e1612e 100644 --- a/Source/cmCTest.h +++ b/Source/cmCTest.h @@ -310,6 +310,9 @@ public: //! Make string safe to be send as an URL static std::string MakeURLSafe(const std::string&); + /** Decode a URL to the original string. */ + static std::string DecodeURL(const std::string&); + //! Should ctect configuration be updated. When using new style ctest // script, this should be true. void SetSuppressUpdatingCTestConfiguration(bool val) |