X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Fpickle.hpp;h=84b643a93ab7301c2e4fdbaa5520fa7bb8e176d9;hb=bf8d87f389a361fd1acf47fcd7dad5a7c4e14a6b;hp=60694fa83d92d8da1e9891e6865574d13d7e0ea2;hpb=ee659c84695e9f94b1f6a5f8be203dc0012ca685;p=apitrace diff --git a/common/pickle.hpp b/common/pickle.hpp index 60694fa..84b643a 100644 --- a/common/pickle.hpp +++ b/common/pickle.hpp @@ -36,6 +36,7 @@ #include #include +#include class PickleWriter @@ -300,12 +301,20 @@ protected: return; } - unsigned c = 1; // Same as l >> (8 * sizeof l), but without the warnings - T sign = l < 0 ? ~0 : 0; - while ((l >> (8 * c)) != sign) { - ++c; + T sign; + if (std::numeric_limits::is_signed) { + sign = l < 0 ? ~0 : 0; + } else { + sign = 0; } + + T sl = l; + unsigned c = 0; + do { + ++c; + } while (sl >>= 8 != sign); + // Add an extra byte if sign bit doesn't match if (((l >> (8 * c - 1)) & 1) != ((l >> (8 * sizeof l - 1)) & 1)) { ++c;