From: Joel Rosdahl Date: Wed, 19 Jun 2019 19:54:42 +0000 (+0200) Subject: Extract and implement more bytes from/to int macros X-Git-Tag: v4.0~933 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7decfe3f46800e4e6f2c8d899390156b1d16cb1;p=thirdparty%2Fccache.git Extract and implement more bytes from/to int macros --- diff --git a/src/ccache.h b/src/ccache.h index 1a809bebe..4ab060868 100644 --- a/src/ccache.h +++ b/src/ccache.h @@ -280,28 +280,6 @@ bool is_precompiled_header(const char *path); typedef int (*COMPAR_FN_T)(const void *, const void *); #endif -#define BYTES_FROM_UINT64(bytes_, uint64_) \ - do { \ - (bytes_)[0] = uint64_ >> 56 & 0xFF; \ - (bytes_)[1] = uint64_ >> 48 & 0xFF; \ - (bytes_)[2] = uint64_ >> 40 & 0xFF; \ - (bytes_)[3] = uint64_ >> 32 & 0xFF; \ - (bytes_)[4] = uint64_ >> 24 & 0xFF; \ - (bytes_)[5] = uint64_ >> 16 & 0xFF; \ - (bytes_)[6] = uint64_ >> 8 & 0xFF; \ - (bytes_)[7] = uint64_ >> 0 & 0xFF; \ - } while (false) - -#define UINT64_FROM_BYTES(bytes_) \ - ((uint64_t)(uint8_t)(bytes_)[0] << 56 | \ - (uint64_t)(uint8_t)(bytes_)[1] << 48 | \ - (uint64_t)(uint8_t)(bytes_)[2] << 40 | \ - (uint64_t)(uint8_t)(bytes_)[3] << 32 | \ - (uint64_t)(uint8_t)(bytes_)[4] << 24 | \ - (uint64_t)(uint8_t)(bytes_)[5] << 16 | \ - (uint64_t)(uint8_t)(bytes_)[6] << 8 | \ - (uint64_t)(uint8_t)(bytes_)[7] << 0) - // Work with silly DOS binary open. #ifndef O_BINARY #define O_BINARY 0 diff --git a/src/common_header.c b/src/common_header.c index cdc6b8327..4d931ac50 100644 --- a/src/common_header.c +++ b/src/common_header.c @@ -15,6 +15,7 @@ // Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #include "ccache.h" +#include "int_bytes_conversion.h" #include "common_header.h" bool common_header_from_file(struct common_header *header, FILE *f) diff --git a/src/int_bytes_conversion.h b/src/int_bytes_conversion.h new file mode 100644 index 000000000..6671b6ad1 --- /dev/null +++ b/src/int_bytes_conversion.h @@ -0,0 +1,67 @@ +#define BYTES_FROM_UINT16(bytes, uint16) \ + do { \ + (bytes)[0] = (uint16) >> 8 & 0xFF; \ + (bytes)[1] = (uint16) >> 0 & 0xFF; \ + } while (false) + +#define UINT16_FROM_BYTES(bytes) \ + ((uint16_t)(uint8_t)(bytes)[0] << 8 | \ + (uint16_t)(uint8_t)(bytes)[1] << 0) + +#define BYTES_FROM_UINT32(bytes, uint32) \ + do { \ + (bytes)[0] = (uint32) >> 24 & 0xFF; \ + (bytes)[1] = (uint32) >> 16 & 0xFF; \ + (bytes)[2] = (uint32) >> 8 & 0xFF; \ + (bytes)[3] = (uint32) >> 0 & 0xFF; \ + } while (false) + +#define UINT32_FROM_BYTES(bytes) \ + ((uint32_t)(uint8_t)(bytes)[0] << 24 | \ + (uint32_t)(uint8_t)(bytes)[1] << 16 | \ + (uint32_t)(uint8_t)(bytes)[2] << 8 | \ + (uint32_t)(uint8_t)(bytes)[3] << 0) + +#define BYTES_FROM_INT64(bytes, int64) \ + do { \ + (bytes)[0] = (int64) >> 56 & 0xFF; \ + (bytes)[1] = (int64) >> 48 & 0xFF; \ + (bytes)[2] = (int64) >> 40 & 0xFF; \ + (bytes)[3] = (int64) >> 32 & 0xFF; \ + (bytes)[4] = (int64) >> 24 & 0xFF; \ + (bytes)[5] = (int64) >> 16 & 0xFF; \ + (bytes)[6] = (int64) >> 8 & 0xFF; \ + (bytes)[7] = (int64) >> 0 & 0xFF; \ + } while (false) + +#define INT64_FROM_BYTES(bytes) \ + ((int64_t)(uint8_t)(bytes)[0] << 56 | \ + (int64_t)(uint8_t)(bytes)[1] << 48 | \ + (int64_t)(uint8_t)(bytes)[2] << 40 | \ + (int64_t)(uint8_t)(bytes)[3] << 32 | \ + (int64_t)(uint8_t)(bytes)[4] << 24 | \ + (int64_t)(uint8_t)(bytes)[5] << 16 | \ + (int64_t)(uint8_t)(bytes)[6] << 8 | \ + (int64_t)(uint8_t)(bytes)[7] << 0) + +#define BYTES_FROM_UINT64(bytes, uint64) \ + do { \ + (bytes)[0] = (uint64) >> 56 & 0xFF; \ + (bytes)[1] = (uint64) >> 48 & 0xFF; \ + (bytes)[2] = (uint64) >> 40 & 0xFF; \ + (bytes)[3] = (uint64) >> 32 & 0xFF; \ + (bytes)[4] = (uint64) >> 24 & 0xFF; \ + (bytes)[5] = (uint64) >> 16 & 0xFF; \ + (bytes)[6] = (uint64) >> 8 & 0xFF; \ + (bytes)[7] = (uint64) >> 0 & 0xFF; \ + } while (false) + +#define UINT64_FROM_BYTES(bytes) \ + ((uint64_t)(uint8_t)(bytes)[0] << 56 | \ + (uint64_t)(uint8_t)(bytes)[1] << 48 | \ + (uint64_t)(uint8_t)(bytes)[2] << 40 | \ + (uint64_t)(uint8_t)(bytes)[3] << 32 | \ + (uint64_t)(uint8_t)(bytes)[4] << 24 | \ + (uint64_t)(uint8_t)(bytes)[5] << 16 | \ + (uint64_t)(uint8_t)(bytes)[6] << 8 | \ + (uint64_t)(uint8_t)(bytes)[7] << 0) diff --git a/src/result.c b/src/result.c index 8b1831c35..43e46d10d 100644 --- a/src/result.c +++ b/src/result.c @@ -16,6 +16,7 @@ #include "ccache.h" #include "common_header.h" +#include "int_bytes_conversion.h" #include "compression.h" #include "result.h"