--- a/ncurses/tinfo/read_entry.c +++ b/ncurses/tinfo/read_entry.c @@ -98,28 +98,28 @@ convert_32bits(char *buf, NCURSES_INT2 *Numbers, int count) } return size; } #else static size_t convert_32bits(char *buf, NCURSES_INT2 *Numbers, int count) { int i, j; unsigned char ch; for (i = 0; i < count; i++) { - int value = 0; + unsigned value = 0; for (j = 0; j < SIZEOF_32BITS; ++j) { ch = UChar(*buf++); - value |= (ch << (8 * j)); + value |= ((unsigned)ch << (8 * j)); } - if (value == -1) + if (value == ~0u) Numbers[i] = ABSENT_NUMERIC; - else if (value == -2) + else if (value == ~0u - 1) Numbers[i] = CANCELLED_NUMERIC; else if (value > MAX_OF_TYPE(NCURSES_INT2)) Numbers[i] = MAX_OF_TYPE(NCURSES_INT2); else Numbers[i] = (short) value; TR(TRACE_DATABASE, ("get Numbers[%d]=%d", i, Numbers[i])); } return SIZEOF_SHORT; }