]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/convto.h
Add overloads for ConvToNum to prevent (unsigned) char weirdness.
[user/henk/code/inspircd.git] / include / convto.h
index 3332580edd491c23963f3d8286fc4f2f4bed0833..2f808d1fb3a722128a8047f8e6ca1973016a8fcf 100644 (file)
@@ -99,3 +99,19 @@ template<typename TOut> inline TOut ConvToNum(const std::string& in)
                return 0;
        return ret;
 }
+
+template<> inline char ConvToNum<char>(const std::string& in)
+{
+       // We specialise ConvToNum for char to avoid istringstream treating
+       // the input as a character literal.
+       uint16_t num = ConvToNum<uint16_t>(in);
+       return num <= UINT8_MAX ? num : 0;
+}
+
+template<> inline unsigned char ConvToNum<unsigned char>(const std::string& in)
+{
+       // We specialise ConvToNum for unsigned char to avoid istringstream
+       // treating the input as a character literal.
+       int16_t num = ConvToNum<int16_t>(in);
+       return num >= INT8_MIN && num <= INT8_MAX ? num : 0;
+}