diff options
Diffstat (limited to 'src/internal/perk_reader_impl.h')
-rw-r--r-- | src/internal/perk_reader_impl.h | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/src/internal/perk_reader_impl.h b/src/internal/perk_reader_impl.h index 24fc38c..fc5e372 100644 --- a/src/internal/perk_reader_impl.h +++ b/src/internal/perk_reader_impl.h @@ -8,31 +8,16 @@ #define PERK_READER_IMPL_H #include <stdint.h> -#include <endian.h> - -#if (BYTE_ORDER == LITTLE_ENDIAN) - -static inline uint16_t pe_read_short(const unsigned char * raw) -{ - return *(uint16_t *)raw; -} - -static inline uint32_t pe_read_long(const unsigned char * raw) -{ - return *(uint32_t *)raw; -} - -static inline uint64_t pe_read_quad(const unsigned char * raw) -{ - return *(uint64_t *)raw; -} - -#else +#include "perk_endian_impl.h" static inline uint16_t pe_read_short(const unsigned char * raw) { - uint16_t x = *(uint16_t *)raw; - return x<<8 | x>>8; + if (PERK_LITTLE_ENDIAN) { + return *(uint16_t *)raw; + } else { + uint16_t x = *(uint16_t *)raw; + return x<<8 | x>>8; + } } static inline uint32_t pe_swap_long(uint32_t x) @@ -42,15 +27,20 @@ static inline uint32_t pe_swap_long(uint32_t x) static inline uint32_t pe_read_long(const unsigned char * raw) { - return pe_swap_long(*(uint32_t *)raw); + if (PERK_LITTLE_ENDIAN) + return *(uint32_t *)raw; + else + return pe_swap_long(*(uint32_t *)raw); } static inline uint64_t pe_read_quad(const unsigned char * raw) { - uint64_t x = *(uint64_t *)raw; - return ((uint64_t)pe_swap_long(x)<<32) | pe_swap_long(x>>32); + if (PERK_LITTLE_ENDIAN) { + return *(uint64_t *)raw; + } else { + uint64_t x = *(uint64_t *)raw; + return ((uint64_t)pe_swap_long(x)<<32) | pe_swap_long(x>>32); + } } #endif - -#endif |