From 49d32ce40bb44a35536326236c4f82ca6848b0f0 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Tue, 12 Jun 2018 23:24:11 -0600 Subject: [PATCH] pylibfdt: Use an unsigned type for fdt32_t The members of struct fdt_header are declared as fdt32_t which is a 32-bit, big-endian, unsigned integer. These fields are accessed by macros in libfdt.h so no return type is declared. But the correct return type is uint32_t, not fdt32_t, since the endianness conversion is done within the macro before returning the value. The macros are re-declared as normal functions in pylibfdt since swig does not support macros. The return type is currently int. Change it to uint32_t, which allows us to drop the work-around mask in Fdt.magic(). Also change the typedef for fdt32_t to uint32_t. The currently has no obvious effect, since use of big-endian values should always be internal to pylibfdt, but it is more correct. Signed-off-by: Simon Glass Suggested-by: David Gibson Signed-off-by: David Gibson --- pylibfdt/libfdt.i | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i index 3abcf32..520911e 100644 --- a/pylibfdt/libfdt.i +++ b/pylibfdt/libfdt.i @@ -240,8 +240,7 @@ class Fdt: Returns: Magic word """ - # Use a mask to ensure that this does not return a -ve number - return fdt_magic(self._fdt) & 0xffffffff + return fdt_magic(self._fdt) def totalsize(self): """Return the total size of the device tree @@ -628,7 +627,11 @@ class Property(bytearray): %rename(fdt_property) fdt_property_func; -typedef int fdt32_t; +/* + * fdt32_t is a big-endian 32-bit value defined to uint32_t in libfdt_env.h + * so use the same type here. + */ +typedef uint32_t fdt32_t; %include "libfdt/fdt.h" @@ -716,15 +719,15 @@ typedef int fdt32_t; %warnfilter(302) fdt_property; /* These are macros in the header so have to be redefined here */ -int fdt_magic(const void *fdt); -int fdt_totalsize(const void *fdt); -int fdt_off_dt_struct(const void *fdt); -int fdt_off_dt_strings(const void *fdt); -int fdt_off_mem_rsvmap(const void *fdt); -int fdt_version(const void *fdt); -int fdt_last_comp_version(const void *fdt); -int fdt_boot_cpuid_phys(const void *fdt); -int fdt_size_dt_strings(const void *fdt); -int fdt_size_dt_struct(const void *fdt); +uint32_t fdt_magic(const void *fdt); +uint32_t fdt_totalsize(const void *fdt); +uint32_t fdt_off_dt_struct(const void *fdt); +uint32_t fdt_off_dt_strings(const void *fdt); +uint32_t fdt_off_mem_rsvmap(const void *fdt); +uint32_t fdt_version(const void *fdt); +uint32_t fdt_last_comp_version(const void *fdt); +uint32_t fdt_boot_cpuid_phys(const void *fdt); +uint32_t fdt_size_dt_strings(const void *fdt); +uint32_t fdt_size_dt_struct(const void *fdt); %include <../libfdt/libfdt.h>