Merge branch 'rs/bswap-ubsan-fix' into maint

Code clean-up.

* rs/bswap-ubsan-fix:
  bswap: convert get_be16, get_be32 and put_be32 to inline functions
  bswap: convert to unsigned before shifting in get_be32
This commit is contained in:
Junio C Hamano 2017-08-23 14:33:46 -07:00
Родитель cdc55aad7d 5b114f3bb0
Коммит 752732c6d8
1 изменённых файлов: 24 добавлений и 14 удалений

Просмотреть файл

@ -162,19 +162,29 @@ static inline uint64_t git_bswap64(uint64_t x)
#else #else
#define get_be16(p) ( \ static inline uint16_t get_be16(const void *ptr)
(*((unsigned char *)(p) + 0) << 8) | \ {
(*((unsigned char *)(p) + 1) << 0) ) const unsigned char *p = ptr;
#define get_be32(p) ( \ return (uint16_t)p[0] << 8 |
(*((unsigned char *)(p) + 0) << 24) | \ (uint16_t)p[1] << 0;
(*((unsigned char *)(p) + 1) << 16) | \ }
(*((unsigned char *)(p) + 2) << 8) | \
(*((unsigned char *)(p) + 3) << 0) ) static inline uint32_t get_be32(const void *ptr)
#define put_be32(p, v) do { \ {
unsigned int __v = (v); \ const unsigned char *p = ptr;
*((unsigned char *)(p) + 0) = __v >> 24; \ return (uint32_t)p[0] << 24 |
*((unsigned char *)(p) + 1) = __v >> 16; \ (uint32_t)p[1] << 16 |
*((unsigned char *)(p) + 2) = __v >> 8; \ (uint32_t)p[2] << 8 |
*((unsigned char *)(p) + 3) = __v >> 0; } while (0) (uint32_t)p[3] << 0;
}
static inline void put_be32(void *ptr, uint32_t value)
{
unsigned char *p = ptr;
p[0] = value >> 24;
p[1] = value >> 16;
p[2] = value >> 8;
p[3] = value >> 0;
}
#endif #endif