inspircd

A modular C++ IRC daemon (ircd). https://www.inspircd.org/
Log | Files | Refs | README

commit 874ce50b8dfa74567a426c11bbaef7cda9ad0299
parent fa6cfec3f8befcc650214b37664569e52f21e6b8
Author: Peter Powell <petpow@saberuk.com>
Date:   Mon, 28 Jan 2019 11:07:49 +0000

Add overloads for ConvToNum to prevent (unsigned) char weirdness.

Diffstat:
Minclude/convto.h | 16++++++++++++++++
1 file changed, 16 insertions(+), 0 deletions(-)

diff --git a/include/convto.h b/include/convto.h @@ -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; +}