summaryrefslogtreecommitdiff
path: root/libfdt
diff options
context:
space:
mode:
authorAndre Przywara <andre.przywara@arm.com>2021-06-18 18:20:27 +0100
committerDavid Gibson <david@gibson.dropbear.id.au>2021-06-21 15:27:39 +1000
commit910221185560fe0c5dc0997dd7d3b472a0a7cdea (patch)
tree7349746c700ca5e07ae6554701efaa9041eafe2d /libfdt
parentd966f08fcd21ded2ed6608097e9832e9466857fd (diff)
downloaddevice-tree-compiler-910221185560fe0c5dc0997dd7d3b472a0a7cdea.tar.gz
fdtget: Fix signedness comparisons warnings
With -Wsign-compare, compilers warn about a mismatching signedness in the different legs of the conditional operator, in fdtget.c. In the questionable expression, we are constructing a 16-bit value out of two unsigned 8-bit values, however are relying on the compiler's automatic expansion of the uint8_t to a larger type, to survive the left shift. This larger type happens to be an "int", so this part of the expression becomes signed. Fix this by explicitly blowing up the uint8_t to a larger *unsigned* type, before doing the left shift. And while we are at it, convert the hardly readable conditional operator usage into a sane switch/case expression. This fixes "make fdtget", when compiled with -Wsign-compare. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Message-Id: <20210618172030.9684-3-andre.przywara@arm.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'libfdt')
-rw-r--r--libfdt/libfdt.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
index 73467f7..7f117e8 100644
--- a/libfdt/libfdt.h
+++ b/libfdt/libfdt.h
@@ -131,6 +131,13 @@ uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);
* to work even with unaligned pointers on platforms (such as ARMv5) that don't
* like unaligned loads and stores.
*/
+static inline uint16_t fdt16_ld(const fdt16_t *p)
+{
+ const uint8_t *bp = (const uint8_t *)p;
+
+ return ((uint16_t)bp[0] << 8) | bp[1];
+}
+
static inline uint32_t fdt32_ld(const fdt32_t *p)
{
const uint8_t *bp = (const uint8_t *)p;