Fix bugs on 'unsigned char' platforms.
authorDwayne C. Litzenberger <dlitz@dlitz.net>
Mon, 16 Apr 2012 05:32:55 +0000 (01:32 -0400)
committerDwayne C. Litzenberger <dlitz@dlitz.net>
Wed, 18 Apr 2012 04:33:32 +0000 (00:33 -0400)
commit8c8e8c2e931b26905112faffb12f527f3256f5dc
tree103e2d753213c1deab5bb31a84905f772ef31c45
parenta6fa147c8d2dabe9f226bb8e1bc5904718ef1fc1
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