mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
lib: fix byte order test in libsha1.c
Previously PLATFORM_BYTE_ORDER and IS_LITTLE_ENDIAN were not defined, so the little endian code was always compiled in. This will have the effect that the "SHA1s" on big endian architectures will change (i.e. become actual sha1s). So someone re-indexing their database could conceivable lose tags on messages without a message-id header.
This commit is contained in:
parent
89bf67fe41
commit
20adfe39d7
1 changed files with 13 additions and 4 deletions
|
@ -49,11 +49,20 @@ extern "C"
|
||||||
|
|
||||||
#define bswap_32(x) ((rotr32((x), 24) & 0x00ff00ff) | (rotr32((x), 8) & 0xff00ff00))
|
#define bswap_32(x) ((rotr32((x), 24) & 0x00ff00ff) | (rotr32((x), 8) & 0xff00ff00))
|
||||||
|
|
||||||
#if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
|
/* The macros __BYTE_ORDER__ and __ORDER_*_ENDIAN__ are GNU C
|
||||||
#define bsw_32(p,n) \
|
* extensions. They are also supported by clang as of v3.2 */
|
||||||
{ int _i = (n); while(_i--) ((uint32_t*)p)[_i] = bswap_32(((uint32_t*)p)[_i]); }
|
|
||||||
|
#ifdef __BYTE_ORDER__
|
||||||
|
# if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
||||||
|
# define bsw_32(p,n) \
|
||||||
|
{ int _i = (n); while(_i--) ((uint32_t*)p)[_i] = bswap_32(((uint32_t*)p)[_i]); }
|
||||||
|
# elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||||
|
# define bsw_32(p,n)
|
||||||
|
# else
|
||||||
|
# error "unknown byte order"
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
#define bsw_32(p,n)
|
# error "macro __BYTE_ORDER__ is not defined"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SHA1_MASK (SHA1_BLOCK_SIZE - 1)
|
#define SHA1_MASK (SHA1_BLOCK_SIZE - 1)
|
||||||
|
|
Loading…
Reference in a new issue