Fix bugs on 'unsigned char' platforms.
authorDwayne C. Litzenberger <dlitz@dlitz.net>
Mon, 16 Apr 2012 05:32:55 +0000 (01:32 -0400)
committerLuke Dashjr <luke-jr+git@utopios.org>
Sun, 22 Apr 2012 13:38:27 +0000 (09:38 -0400)
commite5b980d72f808c46ea279d1fa5bfc1f8fb3363c3
tree591bc2f6588a85e659871ab5ff072961381fc80b
parentbd043f19c83654331e5418ea1e7af2bd213899a7
Fix bugs on 'unsigned char' platforms.

In ISO C++, the signedness of 'char' is undefined.  On some platforms (e.g.
ARM), 'char' is an unsigned type, but some of the code relies on 'char' being
signed (as it is on x86).  This is indicated by compiler warnings like this:

 bignum.h: In constructor 'CBigNum::CBigNum(char)':
 bignum.h:81:59: warning: comparison is always true due to limited range of data type [-Wtype-limits]

 util.cpp: In function 'bool IsHex(const string&)':
 util.cpp:427:28: warning: comparison is always false due to limited range of data type [-Wtype-limits]

In particular, IsHex erroneously returned true regardless of the input
characters, as long as the length of the string was a positive multiple of 2.

Note: For testing, it's possible using GCC to force char to be unsigned by
adding the -funsigned-char parameter to xCXXFLAGS.
src/bignum.h
src/script.h
src/uint256.h
src/util.cpp