This patch changes the endian conversion macros in endian.h to cast their 
result to the unsigned type of the corresponding size (as described in the bug 
report).
diff -urN eglibc-2.19/string/endian.h eglibc-2.19.mine/string/endian.h
--- eglibc-2.19/string/endian.h	2014-01-03 17:51:28.000000000 +0000
+++ eglibc-2.19.mine/string/endian.h	2014-06-12 15:35:25.192649179 +0000
@@ -58,37 +58,38 @@
 #if defined __USE_BSD && !defined __ASSEMBLER__
 /* Conversion interfaces.  */
 # include <bits/byteswap.h>
+# include <stdint.h>
 
 # if __BYTE_ORDER == __LITTLE_ENDIAN
 #  define htobe16(x) __bswap_16 (x)
-#  define htole16(x) (x)
+#  define htole16(x) (uint16_t)(x)
 #  define be16toh(x) __bswap_16 (x)
-#  define le16toh(x) (x)
+#  define le16toh(x) (uint16_t)(x)
 
 #  define htobe32(x) __bswap_32 (x)
-#  define htole32(x) (x)
+#  define htole32(x) (uint32_t)(x)
 #  define be32toh(x) __bswap_32 (x)
-#  define le32toh(x) (x)
+#  define le32toh(x) (uint32_t)(x)
 
 #  define htobe64(x) __bswap_64 (x)
-#  define htole64(x) (x)
+#  define htole64(x) (uint64_t)(x)
 #  define be64toh(x) __bswap_64 (x)
-#  define le64toh(x) (x)
+#  define le64toh(x) (uint64_t)(x)
 
 # else
-#  define htobe16(x) (x)
+#  define htobe16(x) (uint16_t)(x)
 #  define htole16(x) __bswap_16 (x)
-#  define be16toh(x) (x)
+#  define be16toh(x) (uint16_t)(x)
 #  define le16toh(x) __bswap_16 (x)
 
-#  define htobe32(x) (x)
+#  define htobe32(x) (uint32_t)(x)
 #  define htole32(x) __bswap_32 (x)
-#  define be32toh(x) (x)
+#  define be32toh(x) (uint32_t)(x)
 #  define le32toh(x) __bswap_32 (x)
 
-#  define htobe64(x) (x)
+#  define htobe64(x) (uint64_t)(x)
 #  define htole64(x) __bswap_64 (x)
-#  define be64toh(x) (x)
+#  define be64toh(x) (uint64_t)(x)
 #  define le64toh(x) __bswap_64 (x)
 # endif
 #endif

Attachment: signature.asc
Description: Digital signature



Reply via email to