diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2019-06-20 19:40:30 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2019-12-31 22:19:18 +0200 |
commit | ed1a9d33984a3a37ae9a775a46859850d98ea4d0 (patch) | |
tree | 452fc6e1ea0cf9851268df211deaddb4397eabaa /src/common | |
parent | Update THANKS. (diff) | |
download | xz-ed1a9d33984a3a37ae9a775a46859850d98ea4d0.tar.xz |
tuklib_integer: Fix usage of conv macros.
Use a temporary variable instead of e.g.
conv32le(unaligned_read32ne(buf)) because the macro can
evaluate its argument multiple times.
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/tuklib_integer.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/common/tuklib_integer.h b/src/common/tuklib_integer.h index 1524c61e..d5c813c0 100644 --- a/src/common/tuklib_integer.h +++ b/src/common/tuklib_integer.h @@ -413,7 +413,8 @@ static inline uint16_t unaligned_read16be(const uint8_t *buf) { #if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) - return conv16be(unaligned_read16ne(buf)); + uint16_t num = unaligned_read16ne(buf); + return conv16be(num); #else uint16_t num = ((uint16_t)buf[0] << 8) | (uint16_t)buf[1]; return num; @@ -425,7 +426,8 @@ static inline uint16_t unaligned_read16le(const uint8_t *buf) { #if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) - return conv16le(unaligned_read16ne(buf)); + uint16_t num = unaligned_read16ne(buf); + return conv16le(num); #else uint16_t num = ((uint16_t)buf[0]) | ((uint16_t)buf[1] << 8); return num; @@ -437,7 +439,8 @@ static inline uint32_t unaligned_read32be(const uint8_t *buf) { #if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) - return conv32be(unaligned_read32ne(buf)); + uint32_t num = unaligned_read32ne(buf); + return conv32be(num); #else uint32_t num = (uint32_t)buf[0] << 24; num |= (uint32_t)buf[1] << 16; @@ -452,7 +455,8 @@ static inline uint32_t unaligned_read32le(const uint8_t *buf) { #if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS) - return conv32le(unaligned_read32ne(buf)); + uint32_t num = unaligned_read32ne(buf); + return conv32le(num); #else uint32_t num = (uint32_t)buf[0]; num |= (uint32_t)buf[1] << 8; |