diff --git a/src/gmio_core/internal/byte_codec.h b/src/gmio_core/internal/byte_codec.h index 82543bd..47ddf07 100644 --- a/src/gmio_core/internal/byte_codec.h +++ b/src/gmio_core/internal/byte_codec.h @@ -39,19 +39,18 @@ * uintNN_t gmio_decode_uintNN_be(const uint8_t* bytes) * * Functions that writes NNbit uint to memory in little-endian - * uintNN_t gmio_encode_uintNN_le(uintNN_t val, uint8_t* bytes); + * void gmio_encode_uintNN_le(uintNN_t val, uint8_t* bytes); * * Functions that writes NNbit uint to memory in big-endian - * uintNN_t gmio_encode_uintNN_be(uintNN_t val, uint8_t* bytes); + * void gmio_encode_uintNN_be(uintNN_t val, uint8_t* bytes); */ GMIO_INLINE uint16_t gmio_decode_uint16_le(const uint8_t* bytes); GMIO_INLINE uint16_t gmio_decode_uint16_be(const uint8_t* bytes); -GMIO_INLINE void gmio_encode_uint16_le(uint16_t val, uint8_t* bytes); -GMIO_INLINE void gmio_encode_uint16_be(uint16_t val, uint8_t* bytes); - GMIO_INLINE uint32_t gmio_decode_uint32_le(const uint8_t* bytes); GMIO_INLINE uint32_t gmio_decode_uint32_be(const uint8_t* bytes); +GMIO_INLINE void gmio_encode_uint16_le(uint16_t val, uint8_t* bytes); +GMIO_INLINE void gmio_encode_uint16_be(uint16_t val, uint8_t* bytes); GMIO_INLINE void gmio_encode_uint32_le(uint32_t val, uint8_t* bytes); GMIO_INLINE void gmio_encode_uint32_be(uint32_t val, uint8_t* bytes); @@ -62,6 +61,39 @@ GMIO_INLINE void gmio_encode_uint64_le(uint64_t val, uint8_t* bytes); GMIO_INLINE void gmio_encode_uint64_be(uint64_t val, uint8_t* bytes); #endif /* GMIO_HAVE_INT64_TYPE */ +/* Functions that reads NNbit uint from memory (little-endian) and advances + * buffer pos + * uintNN_t gmio_adv_decode_uintNN_le(const uint8_t** bytes) + * + * Functions that reads NNbit uint from memory (big-endian) and advances + * buffer pos + * uintNN_t gmio_adv_decode_uintNN_be(const uint8_t** bytes) + * + * Functions that writes NNbit uint to memory in little-endian and returns + * advanced buffer pos + * uint8_t* gmio_adv_encode_uintNN_le(uintNN_t val, uint8_t* bytes) + * + * Functions that writes NNbit uint to memory in big-endian and returns + * advanced buffer pos + * uint8_t* gmio_adv_encode_uintNN_be(uintNN_t val, uint8_t* bytes) + */ + +GMIO_INLINE uint16_t gmio_adv_decode_uint16_le(const uint8_t** bytes); +GMIO_INLINE uint16_t gmio_adv_decode_uint16_be(const uint8_t** bytes); +GMIO_INLINE uint32_t gmio_adv_decode_uint32_le(const uint8_t** bytes); +GMIO_INLINE uint32_t gmio_adv_decode_uint32_be(const uint8_t** bytes); +GMIO_INLINE uint8_t* gmio_adv_encode_uint16_le(uint16_t val, uint8_t* bytes); +GMIO_INLINE uint8_t* gmio_adv_encode_uint16_be(uint16_t val, uint8_t* bytes); +GMIO_INLINE uint8_t* gmio_adv_encode_uint32_le(uint32_t val, uint8_t* bytes); +GMIO_INLINE uint8_t* gmio_adv_encode_uint32_be(uint32_t val, uint8_t* bytes); + +#ifdef GMIO_HAVE_INT64_TYPE +GMIO_INLINE uint64_t gmio_adv_decode_uint64_le(const uint8_t** bytes); +GMIO_INLINE uint64_t gmio_adv_decode_uint64_be(const uint8_t** bytes); +GMIO_INLINE uint8_t* gmio_adv_encode_uint64_le(uint64_t val, uint8_t* bytes); +GMIO_INLINE uint8_t* gmio_adv_encode_uint64_be(uint64_t val, uint8_t* bytes); +#endif /* GMIO_HAVE_INT64_TYPE */ + /* @@ -162,4 +194,86 @@ void gmio_encode_uint64_be(uint64_t val, uint8_t* bytes) #endif /* GMIO_HAVE_INT64_TYPE */ +uint16_t gmio_adv_decode_uint16_le(const uint8_t** bytes) +{ + const uint16_t val = gmio_decode_uint16_le(*bytes); + *bytes += 2; + return val; +} + +uint16_t gmio_adv_decode_uint16_be(const uint8_t** bytes) +{ + const uint16_t val = gmio_decode_uint16_be(*bytes); + *bytes += 2; + return val; +} + +uint32_t gmio_adv_decode_uint32_le(const uint8_t** bytes) +{ + const uint32_t val = gmio_decode_uint32_le(*bytes); + *bytes += 4; + return val; +} + +uint32_t gmio_adv_decode_uint32_be(const uint8_t** bytes) +{ + const uint32_t val = gmio_decode_uint32_be(*bytes); + *bytes += 4; + return val; +} + +uint8_t* gmio_adv_encode_uint16_le(uint16_t val, uint8_t* bytes) +{ + gmio_encode_uint16_le(val, bytes); + return bytes + 2; +} + +uint8_t* gmio_adv_encode_uint16_be(uint16_t val, uint8_t* bytes) +{ + gmio_encode_uint16_be(val, bytes); + return bytes + 2; +} + +uint8_t* gmio_adv_encode_uint32_le(uint32_t val, uint8_t* bytes) +{ + gmio_encode_uint32_le(val, bytes); + return bytes + 4; +} + +uint8_t* gmio_adv_encode_uint32_be(uint32_t val, uint8_t* bytes) +{ + gmio_encode_uint32_be(val, bytes); + return bytes + 4; +} + +#ifdef GMIO_HAVE_INT64_TYPE + +uint64_t gmio_adv_decode_uint64_le(const uint8_t** bytes) +{ + const uint64_t val = gmio_decode_uint64_le(*bytes); + *bytes += 8; + return val; +} + +uint64_t gmio_adv_decode_uint64_be(const uint8_t** bytes) +{ + const uint64_t val = gmio_decode_uint64_be(*bytes); + *bytes += 8; + return val; +} + +uint8_t* gmio_adv_encode_uint64_le(uint64_t val, uint8_t* bytes) +{ + gmio_encode_uint64_le(val, bytes); + return bytes + 8; +} + +uint8_t* gmio_adv_encode_uint64_be(uint64_t val, uint8_t* bytes) +{ + gmio_encode_uint64_be(val, bytes); + return bytes + 8; +} + +#endif /* GMIO_HAVE_INT64_TYPE */ + #endif /* GMIO_INTERNAL_BYTE_CODEC_H */ diff --git a/src/gmio_core/internal/zip_utils.c b/src/gmio_core/internal/zip_utils.c index 686d327..26c5c76 100644 --- a/src/gmio_core/internal/zip_utils.c +++ b/src/gmio_core/internal/zip_utils.c @@ -75,53 +75,6 @@ static const struct tm* gmio_nonnull_datetime(const struct tm* datetime) return datetime; } -/* Reads 16b uint from memory (little-endian) and advances buffer pos */ -static uint16_t gmio_adv_decode_uint16_le(const uint8_t** bytes) -{ - const uint16_t val = gmio_decode_uint16_le(*bytes); - *bytes += 2; - return val; -} - -/* Reads 32b uint from memory (little-endian) and advances buffer pos */ -static uint32_t gmio_adv_decode_uint32_le(const uint8_t** bytes) -{ - const uint32_t val = gmio_decode_uint32_le(*bytes); - *bytes += 4; - return val; -} - -/* Encodes little-endian 32b val in buffer and returns advanced buffer pos */ -static uint8_t* gmio_adv_encode_uint32_le(uint32_t val, uint8_t* bytes) -{ - gmio_encode_uint32_le(val, bytes); - return bytes + 4; -} - -/* Encodes little-endian 16b val in buffer and returns advanced buffer pos */ -static uint8_t* gmio_adv_encode_uint16_le(uint16_t val, uint8_t* bytes) -{ - gmio_encode_uint16_le(val, bytes); - return bytes + 2; -} - -#ifdef GMIO_HAVE_INT64_TYPE -/* Reads 64b uint from memory (little-endian) and advances buffer pos */ -static uint64_t gmio_adv_decode_uint64_le(const uint8_t** bytes) -{ - const uint64_t val = gmio_decode_uint64_le(*bytes); - *bytes += 8; - return val; -} - -/* Encodes little-endian 64b val in buffer and returns advanced buffer pos */ -static uint8_t* gmio_adv_encode_uint64_le(uint64_t val, uint8_t* bytes) -{ - gmio_encode_uint64_le(val, bytes); - return bytes + 8; -} -#endif - /* Helper to facilitate return from gmio_zip_write_xxx() API functions */ static size_t gmio_zip_write_returnhelper( struct gmio_stream* stream, @@ -142,8 +95,7 @@ static bool gmio_zip_read_checkhelper( return read == expected && !gmio_stream_error(stream); } -/* Helper to facilitate return from gmio_zip_read_xxx() and gmio_zip_write_xxx() - * API functions */ +/* Helper to facilitate return from gmio_zip_[read,write]_xxx() API functions */ static size_t gmio_zip_io_returnerr(size_t io_len, int error, int* ptr_error) { if (ptr_error != NULL)