external/exfat
Revision | 4e6606bb5ffa39fbe72f0321ce7eb0ee27deb49f (tree) |
---|---|
Time | 2020-05-05 00:53:09 |
Author | relan <relan@user...> |
Commiter | relan |
Fix cluster bitmap traversal on big endian machines.
We define bitmap_t to unsigned char on big endian systems to avoid byte
order conversions. But bitwise complement causes integer promotion and
makes the condition always false. Truncate the result after complementing
zero.
@@ -122,7 +122,7 @@ static cluster_t find_bit_and_set(bitmap_t* bitmap, size_t start, size_t end) | ||
122 | 122 | |
123 | 123 | for (i = start_index; i < end_index; i++) |
124 | 124 | { |
125 | - if (bitmap[i] == ~((bitmap_t) 0)) | |
125 | + if (bitmap[i] == (bitmap_t) ~((bitmap_t) 0)) | |
126 | 126 | continue; |
127 | 127 | start_bitindex = MAX(i * sizeof(bitmap_t) * 8, start); |
128 | 128 | end_bitindex = MIN((i + 1) * sizeof(bitmap_t) * 8, end); |