bswap: add 64 bit endianness helper get_be64
Add a new get_be64 macro to enable 64 bit endian conversions on memory that may or may not be aligned. Signed-off-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6867272d5b
commit
b2e39d0067
@ -158,7 +158,9 @@ static inline uint64_t git_bswap64(uint64_t x)
|
|||||||
|
|
||||||
#define get_be16(p) ntohs(*(unsigned short *)(p))
|
#define get_be16(p) ntohs(*(unsigned short *)(p))
|
||||||
#define get_be32(p) ntohl(*(unsigned int *)(p))
|
#define get_be32(p) ntohl(*(unsigned int *)(p))
|
||||||
|
#define get_be64(p) ntohll(*(uint64_t *)(p))
|
||||||
#define put_be32(p, v) do { *(unsigned int *)(p) = htonl(v); } while (0)
|
#define put_be32(p, v) do { *(unsigned int *)(p) = htonl(v); } while (0)
|
||||||
|
#define put_be64(p, v) do { *(uint64_t *)(p) = htonll(v); } while (0)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -178,6 +180,13 @@ static inline uint32_t get_be32(const void *ptr)
|
|||||||
(uint32_t)p[3] << 0;
|
(uint32_t)p[3] << 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint64_t get_be64(const void *ptr)
|
||||||
|
{
|
||||||
|
const unsigned char *p = ptr;
|
||||||
|
return (uint64_t)get_be32(&p[0]) << 32 |
|
||||||
|
(uint64_t)get_be32(&p[4]) << 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void put_be32(void *ptr, uint32_t value)
|
static inline void put_be32(void *ptr, uint32_t value)
|
||||||
{
|
{
|
||||||
unsigned char *p = ptr;
|
unsigned char *p = ptr;
|
||||||
@ -187,4 +196,17 @@ static inline void put_be32(void *ptr, uint32_t value)
|
|||||||
p[3] = value >> 0;
|
p[3] = value >> 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void put_be64(void *ptr, uint64_t value)
|
||||||
|
{
|
||||||
|
unsigned char *p = ptr;
|
||||||
|
p[0] = value >> 56;
|
||||||
|
p[1] = value >> 48;
|
||||||
|
p[2] = value >> 40;
|
||||||
|
p[3] = value >> 32;
|
||||||
|
p[4] = value >> 24;
|
||||||
|
p[5] = value >> 16;
|
||||||
|
p[6] = value >> 8;
|
||||||
|
p[7] = value >> 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user