diff options
author | Tomasz Kramkowski <tk@the-tk.com> | 2021-08-05 20:10:07 +0100 |
---|---|---|
committer | Tomasz Kramkowski <tk@the-tk.com> | 2021-08-05 20:13:07 +0100 |
commit | 7e7bdc19e76a5f87bccf7a84872f8d45295ee5b7 (patch) | |
tree | 226c43176517f7f3dc30e3d67862449cef0c7d16 | |
parent | 07ed3ac992d5086dcd47273236ad72e496d9620f (diff) | |
download | pack-7e7bdc19e76a5f87bccf7a84872f8d45295ee5b7.tar.gz pack-7e7bdc19e76a5f87bccf7a84872f8d45295ee5b7.tar.xz pack-7e7bdc19e76a5f87bccf7a84872f8d45295ee5b7.zip |
Define PRIuSIZE to avoid issues compiling with msvcrt
On windows and when cross compiling with mingw the standard library only
supports C89 which means that print format arguments cannot take "%zu".
To fix this, a PRIuSIZE macros is needed which expands to PRIu32 on
windows 32 bit and PRIu64 on windows 64 bit.
-rw-r--r-- | common.h | 12 | ||||
-rw-r--r-- | pack.c | 4 | ||||
-rw-r--r-- | unpack.c | 8 |
3 files changed, 18 insertions, 6 deletions
@@ -10,6 +10,18 @@ #define BITMASK(n) (UINTMAX_MAX >> (sizeof (uintmax_t) * CHAR_BIT - n)) +#ifndef PRIuSIZE + #ifdef _WIN32 + #ifdef _WIN64 + #define PRIuSIZE PRIu64 + #else + #define PRIuSIZE PRIu32 + #endif + #else + #define PRIuSIZE "zu" + #endif +#endif + enum endian { BIG, LITTLE }; size_t getsize(char c); @@ -25,7 +25,7 @@ enum pack_status pack(void *buf_, size_t size, const char *fmt, ...) size_t offset = 0; va_list ap; - tr_call("pack(%p, %zu, %s, ...)", (void *)buf, size, fmt); + tr_call("pack(%p, %" PRIuSIZE ", %s, ...)", (void *)buf, size, fmt); va_start(ap, fmt); @@ -54,7 +54,7 @@ enum pack_status pack(void *buf_, size_t size, const char *fmt, ...) tr_debug("i: %d, fmt[i]: %c, sign: %ssigned", i, fmt[i], sign ? "" : "un"); s = getsize(fmt[i]); - tr_debug("s: %zu", s); + tr_debug("s: %" PRIuSIZE, s); if (s == (size_t)-1) return PACK_FMTINVAL; if (size - offset < s) return PACK_TOOSMALL; @@ -43,7 +43,7 @@ enum pack_status unpack(const void *buf_, size_t size, const char *fmt, ...) size_t offset = 0; va_list ap; - tr_call("unpack(%p, %zu, %s, ...)", (const void *)buf, size, fmt); + tr_call("unpack(%p, %" PRIuSIZE ", %s, ...)", (const void *)buf, size, fmt); va_start(ap, fmt); @@ -81,7 +81,7 @@ enum pack_status unpack(const void *buf_, size_t size, const char *fmt, ...) i++; } sign = islower(fmt[i]); - tr_debug("count: %zu, i: %d, fmt[i]: %c, sign: %ssigned", + tr_debug("count: %" PRIuSIZE ", i: %d, fmt[i]: %c, sign: %ssigned", count, i, fmt[i], sign ? "" : "un"); switch (fmt[i]) { case '>': endianness = BIG; continue; @@ -103,7 +103,7 @@ enum pack_status unpack(const void *buf_, size_t size, const char *fmt, ...) } s = getsize(fmt[i]); - tr_debug("s: %zu", s); + tr_debug("s: %" PRIuSIZE, s); if (s == (size_t)-1) return PACK_FMTINVAL; if (size - offset < s * count) return PACK_TOOSMALL; @@ -112,7 +112,7 @@ enum pack_status unpack(const void *buf_, size_t size, const char *fmt, ...) for (size_t j = 0; j < count; j++) { val.u = read_val(buf + offset + s * j, s, endianness); - tr_debug("val.u: %" PRIuMAX ", at: %zu", val.u, offset + s * j); + tr_debug("val.u: %" PRIuMAX ", at: %" PRIuSIZE, val.u, offset + s * j); if (fmt[i] == 'f') { float f = ieee754b32_deserialise(val.u); |