mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-19 03:23:49 +01:00
newlib (nano) is missing 64 bit support in stdio and inttypes.h. This works around the issue.
88 lines
3.1 KiB
Diff
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
|
|
|