forked from RIOT-OS/RIOT
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request RIOT-OS#20902 from maribu/work-around-newlib-nano-…
…stdio-missing-64-bit-support tree-wide: fix compilation with newlib and GCC 13.2.1
- Loading branch information
Showing
4 changed files
with
122 additions
and
2 deletions.
There are no files selected for viewing
87 changes: 87 additions & 0 deletions
87
pkg/tinycbor/patches/0001-fix-pretty-fix-compilation-with-newlib-and-GCC-13.2..patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
From 81fe23c11da5f7e528846e8b3d5aaa9ae0f7aadd Mon Sep 17 00:00:00 2001 | ||
From: Marian Buschsieweke <[email protected]> | ||
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters