- for (; length; length >>= 8)
- crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ length) & 0xffL];
- crc ^= 0xffffffffL;
-
- if (inp_stdin) {
- bb_printf("%" PRIu32 " %li\n", crc, filesize);
- break;
+ while (length) {
+ crc = (crc << 8) ^ crc32_table[(uint8_t)(crc >> 24) ^ (uint8_t)length];
+ /* must ensure that shift is unsigned! */
+ if (sizeof(length) <= sizeof(unsigned))
+ length = (unsigned)length >> 8;
+ else if (sizeof(length) <= sizeof(unsigned long))
+ length = (unsigned long)length >> 8;
+ else
+ length = (unsigned long long)length >> 8;