1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-19 03:23:49 +01:00
RIOT/pkg/tinycbor/patches/0001-fix-pretty-fix-compilation-with-newlib-and-GCC-13.2..patch
Marian Buschsieweke 18036a8326
pkg/tinycbor: fix compilation with newlib and GCC 13.2.1
newlib (nano) is missing 64 bit support in stdio and inttypes.h. This
works around the issue.
2024-10-09 22:23:47 +02:00

88 lines
3.1 KiB
Diff

From 81fe23c11da5f7e528846e8b3d5aaa9ae0f7aadd Mon Sep 17 00:00:00 2001
From: Marian Buschsieweke <marian.buschsieweke@ml-pa.com>
Date: Wed, 9 Oct 2024 22:17:05 +0200
Subject: [PATCH] fix(pretty): fix compilation with newlib and GCC 13.2.1
newlib (nano) is missing 64 bit support in stdio and inttypes.h. This
works around the issue.
---
src/cborpretty.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/src/cborpretty.c b/src/cborpretty.c
index 49d3cae..4397f39 100644
--- a/src/cborpretty.c
+++ b/src/cborpretty.c
@@ -374,12 +374,26 @@ static CborError value_to_pretty(CborStreamFunction stream, void *out, CborValue
cbor_value_get_raw_integer(it, &val); /* can't fail */
if (cbor_value_is_unsigned_integer(it)) {
+#ifdef PRIu64
err = stream(out, "%" PRIu64, val);
+#else
+ err = stream(out, "%" PRIu32, (uint32_t)val);
+ if (!err && ((uint32_t)val != val)) {
+ err = stream(out, "!trunc!");
+ }
+#endif
} else {
/* CBOR stores the negative number X as -1 - X
* (that is, -1 is stored as 0, -2 as 1 and so forth) */
if (++val) { /* unsigned overflow may happen */
+#ifdef PRIu64
err = stream(out, "-%" PRIu64, val);
+#else
+ err = stream(out, "-%" PRIu32, (uint32_t)val);
+ if (!err && ((uint32_t)val != val)) {
+ err = stream(out, "!trunc!");
+ }
+#endif
} else {
/* overflown
* 0xffff`ffff`ffff`ffff + 1 =
@@ -450,7 +464,13 @@ static CborError value_to_pretty(CborStreamFunction stream, void *out, CborValue
case CborTagType: {
CborTag tag;
cbor_value_get_tag(it, &tag); /* can't fail */
+#ifdef PRIu64
err = stream(out, "%" PRIu64 "%s(", tag, get_indicator(it, flags));
+#else
+ err = stream(out, "%" PRIu32 "%s%s(", (uint32_t)tag,
+ ((uint32_t)tag != tag) ? "!trunc!" : "",
+ get_indicator(it, flags));
+#endif
if (!err)
err = cbor_value_advance_fixed(it);
if (!err && recursionsLeft)
@@ -490,7 +510,6 @@ static CborError value_to_pretty(CborStreamFunction stream, void *out, CborValue
const char *suffix;
double val;
int r;
- uint64_t ival;
if (false) {
float f;
@@ -521,14 +540,19 @@ static CborError value_to_pretty(CborStreamFunction stream, void *out, CborValue
suffix = "";
}
+#ifdef PRIu64
+ uint64_t ival;
if (convertToUint64(val, &ival)) {
/* this double value fits in a 64-bit integer, so show it as such
* (followed by a floating point suffix, to disambiguate) */
err = stream(out, "%s%" PRIu64 ".%s", val < 0 ? "-" : "", ival, suffix);
} else {
+#endif
/* this number is definitely not a 64-bit integer */
err = stream(out, "%." DBL_DECIMAL_DIG_STR "g%s", val, suffix);
+#ifdef PRIu64
}
+#endif
break;
}
#else
--
2.43.0