OSDN Git Service

endians.h: Cast the result of const endianness macros to the right type.
authorErik Larsson <mechie@users.sourceforge.net>
Thu, 11 Feb 2016 13:19:41 +0000 (14:19 +0100)
committerErik Larsson <mechie@users.sourceforge.net>
Thu, 11 Feb 2016 13:19:41 +0000 (14:19 +0100)
This fixes compiler warnings emitted when you compare an le32 value with
e.g. 'const_cpu_to_le32(-1)' on a little-endian system, because
previously the expansion of the macro expression 'const_cpu_to_le32(-1)'
would be '(-1)' on a little-endian system but '(u32)((((u32)(-1) &
0xff000000u) >> 24) | (((u32)(-1) & 0x00ff0000u) >>  8) | (((u32)(-1) &
0x0000ff00u) <<  8) | (((u32)(-1) & 0x000000ffu) << 24))' on a
big-endian system, i.e. the type of the expanded expression would be
'int' (signed) in the little-endian case but 'u32' (unsigned) in the
big-endian case.

With this commit the type of the expanded expression will be 'le32' in
both the little-endian and the big-endian case.

include/ntfs-3g/endians.h

index f7eb6c4..b93761d 100644 (file)
 
 /* Constant endianness conversion defines. */
 
-#define const_le16_to_cpu(x)   __constant_le16_to_cpu(x)
-#define const_le32_to_cpu(x)   __constant_le32_to_cpu(x)
-#define const_le64_to_cpu(x)   __constant_le64_to_cpu(x)
+#define const_le16_to_cpu(x)   ((u16) __constant_le16_to_cpu(x))
+#define const_le32_to_cpu(x)   ((u32) __constant_le32_to_cpu(x))
+#define const_le64_to_cpu(x)   ((u64) __constant_le64_to_cpu(x))
 
-#define const_cpu_to_le16(x)   __constant_cpu_to_le16(x)
-#define const_cpu_to_le32(x)   __constant_cpu_to_le32(x)
-#define const_cpu_to_le64(x)   __constant_cpu_to_le64(x)
+#define const_cpu_to_le16(x)   ((le16) __constant_cpu_to_le16(x))
+#define const_cpu_to_le32(x)   ((le32) __constant_cpu_to_le32(x))
+#define const_cpu_to_le64(x)   ((le64) __constant_cpu_to_le64(x))
 
-#define const_sle16_to_cpu(x)  __constant_le16_to_cpu((le16) x)
-#define const_sle32_to_cpu(x)  __constant_le32_to_cpu((le32) x)
-#define const_sle64_to_cpu(x)  __constant_le64_to_cpu((le64) x)
+#define const_sle16_to_cpu(x)  ((s16) __constant_le16_to_cpu((le16) x))
+#define const_sle32_to_cpu(x)  ((s32) __constant_le32_to_cpu((le32) x))
+#define const_sle64_to_cpu(x)  ((s64) __constant_le64_to_cpu((le64) x))
 
-#define const_cpu_to_sle16(x)  __constant_cpu_to_le16((u16) x)
-#define const_cpu_to_sle32(x)  __constant_cpu_to_le32((u32) x)
-#define const_cpu_to_sle64(x)  __constant_cpu_to_le64((u64) x)
+#define const_cpu_to_sle16(x)  ((sle16) __constant_cpu_to_le16((u16) x))
+#define const_cpu_to_sle32(x)  ((sle32) __constant_cpu_to_le32((u32) x))
+#define const_cpu_to_sle64(x)  ((sle64) __constant_cpu_to_le64((u64) x))
 
-#define const_be16_to_cpu(x)   __constant_be16_to_cpu(x)
-#define const_be32_to_cpu(x)   __constant_be32_to_cpu(x)
-#define const_be64_to_cpu(x)   __constant_be64_to_cpu(x)
+#define const_be16_to_cpu(x)   ((u16) __constant_be16_to_cpu(x)))
+#define const_be32_to_cpu(x)   ((u32) __constant_be32_to_cpu(x)))
+#define const_be64_to_cpu(x)   ((u64) __constant_be64_to_cpu(x)))
 
-#define const_cpu_to_be16(x)   __constant_cpu_to_be16(x)
-#define const_cpu_to_be32(x)   __constant_cpu_to_be32(x)
-#define const_cpu_to_be64(x)   __constant_cpu_to_be64(x)
+#define const_cpu_to_be16(x)   ((be16) __constant_cpu_to_be16(x))
+#define const_cpu_to_be32(x)   ((be32) __constant_cpu_to_be32(x))
+#define const_cpu_to_be64(x)   ((be64) __constant_cpu_to_be64(x))
 
-#define const_sbe16_to_cpu(x)  __constant_be16_to_cpu((be16) x)
-#define const_sbe32_to_cpu(x)  __constant_be32_to_cpu((be32) x)
-#define const_sbe64_to_cpu(x)  __constant_be64_to_cpu((be64) x)
+#define const_sbe16_to_cpu(x)  ((s16) __constant_be16_to_cpu((be16) x))
+#define const_sbe32_to_cpu(x)  ((s32) __constant_be32_to_cpu((be32) x))
+#define const_sbe64_to_cpu(x)  ((s64) __constant_be64_to_cpu((be64) x))
 
-#define const_cpu_to_sbe16(x)  __constant_cpu_to_be16((u16) x)
-#define const_cpu_to_sbe32(x)  __constant_cpu_to_be32((u32) x)
-#define const_cpu_to_sbe64(x)  __constant_cpu_to_be64((u64) x)
+#define const_cpu_to_sbe16(x)  ((sbe16) __constant_cpu_to_be16((u16) x))
+#define const_cpu_to_sbe32(x)  ((sbe32) __constant_cpu_to_be32((u32) x))
+#define const_cpu_to_sbe64(x)  ((sbe64) __constant_cpu_to_be64((u64) x))
 
 #endif /* defined _NTFS_ENDIANS_H */