From e6f04416d9fd2a1cf11175a69e5f8f29fc2ded18 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 31 Mar 2012 00:06:55 +0900 Subject: [PATCH] Don't use locale dependent toupper and tolower. --- src/util.cc | 24 ++++++++++++++++++++---- src/util.h | 4 ++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/util.cc b/src/util.cc index 82994af3..bebd40b0 100644 --- a/src/util.cc +++ b/src/util.cc @@ -943,24 +943,40 @@ std::string randomAlpha(size_t length, const RandomizerHandle& randomizer) { std::string toUpper(const std::string& src) { std::string temp = src; - std::transform(temp.begin(), temp.end(), temp.begin(), ::toupper); + std::transform(temp.begin(), temp.end(), temp.begin(), toUpperChar); return temp; } std::string toLower(const std::string& src) { std::string temp = src; - std::transform(temp.begin(), temp.end(), temp.begin(), ::tolower); + std::transform(temp.begin(), temp.end(), temp.begin(), toLowerChar); return temp; } void uppercase(std::string& s) { - std::transform(s.begin(), s.end(), s.begin(), ::toupper); + std::transform(s.begin(), s.end(), s.begin(), toUpperChar); } void lowercase(std::string& s) { - std::transform(s.begin(), s.end(), s.begin(), ::tolower); + std::transform(s.begin(), s.end(), s.begin(), toLowerChar); +} + +char toUpperChar(char c) +{ + if('a' <= c && c <= 'z') { + c += 'A'-'a'; + } + return c; +} + +char toLowerChar(char c) +{ + if('A' <= c && c <= 'Z') { + c += 'a'-'A'; + } + return c; } bool isNumericHost(const std::string& name) diff --git a/src/util.h b/src/util.h index 4519b209..24d1ecae 100644 --- a/src/util.h +++ b/src/util.h @@ -311,6 +311,10 @@ void uppercase(std::string& s); void lowercase(std::string& s); +char toUpperChar(char c); + +char toLowerChar(char c); + bool isNumericHost(const std::string& name); void setGlobalSignalHandler(int signal, void (*handler)(int), int flags);