diff options
Diffstat (limited to 'package/multimedia/libmms/libmms-prevent-unaligned-dereferences.patch')
-rw-r--r-- | package/multimedia/libmms/libmms-prevent-unaligned-dereferences.patch | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/package/multimedia/libmms/libmms-prevent-unaligned-dereferences.patch b/package/multimedia/libmms/libmms-prevent-unaligned-dereferences.patch deleted file mode 100644 index 9c606eb29..000000000 --- a/package/multimedia/libmms/libmms-prevent-unaligned-dereferences.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 4fd16633a8c379971425f7fd482152f163b09158 Mon Sep 17 00:00:00 2001 -From: Paul Burton <Paul.Burton@imgtec.com> -Date: Fri, 17 Sep 2010 14:08:57 +0100 -Subject: [PATCH] Endianness macros should not dereference unaligned pointers - -The LE_*/BE_* macros previously worked by casting the pointer passed to them to a pointer to the correct integer type, then dereferencing it. This will not work on architectures which don't allow unaligned data access. Instead, access one byte at a time and shift to form the value. ---- - src/bswap.h | 59 +++++++++++++++++++++++++++++++++++++++++++---------------- - 1 files changed, 43 insertions(+), 16 deletions(-) - -diff --git a/src/bswap.h b/src/bswap.h -index b731da7..59e8716 100644 ---- a/src/bswap.h -+++ b/src/bswap.h -@@ -21,23 +21,50 @@ - */ - - --/* Go cheap now, will rip out glib later. *Sigh* */ --#include <glib.h> -- --/* NOTE: -- * Now, to clear up confusion: LE_XX means "from LE to native, XX bits wide" -- * I know it's not very clear naming (tell me about it, I -- * misinterpreted in first version and caused bad nasty bug, *sigh*), -- * but that's inherited code, will clean up as things go -- * Oh, and one more thing -- they take *pointers*, not actual ints -- */ -+#include <stdint.h> -+ -+#define SWAP_ENDIAN_16(val) \ -+ (val[1] | (val[0] << 8)) -+#define SWAP_ENDIAN_32(val) \ -+ (val[3] | (val[2] << 8) | (val[1] << 16) | (val[0] << 24)) -+#define SWAP_ENDIAN_64(val) \ -+ (val[7] | (val[6] << 8) | (val[5] << 16) | (val[4] << 24) | \ -+ ((uint64_t)val[3] << 32) | ((uint64_t)val[2] << 40) | \ -+ ((uint64_t)val[1] << 48) | ((uint64_t)val[0] << 56)) -+ -+#define SAME_ENDIAN_16(val) \ -+ (val[0] | (val[1] << 8)) -+#define SAME_ENDIAN_32(val) \ -+ (val[0] | (val[1] << 8) | (val[2] << 16) | (val[3] << 24)) -+#define SAME_ENDIAN_64(val) \ -+ (val[0] | (val[1] << 8) | (val[2] << 16) | (val[3] << 24) | \ -+ ((uint64_t)val[4] << 32) | ((uint64_t)val[5] << 40) | \ -+ ((uint64_t)val[6] << 48) | ((uint64_t)val[7] << 56)) -+ -+#ifndef WORDS_BIGENDIAN -+ -+/* Little endian */ -+ -+#define LE_16(val) SAME_ENDIAN_16(((uint8_t *)(val))) -+#define LE_32(val) SAME_ENDIAN_32(((uint8_t *)(val))) -+#define LE_64(val) SAME_ENDIAN_64(((uint8_t *)(val))) -+#define BE_16(val) SWAP_ENDIAN_16(((uint8_t *)(val))) -+#define BE_32(val) SWAP_ENDIAN_32(((uint8_t *)(val))) -+#define BE_64(val) SWAP_ENDIAN_64(((uint8_t *)(val))) -+ -+#elif WORDS_BIGENDIAN == 1 -+ -+/* Big endian */ - --#define LE_16(val) (GINT16_FROM_LE (*((u_int16_t*)(val)))) --#define BE_16(val) (GINT16_FROM_BE (*((u_int16_t*)(val)))) --#define LE_32(val) (GINT32_FROM_LE (*((u_int32_t*)(val)))) --#define BE_32(val) (GINT32_FROM_BE (*((u_int32_t*)(val)))) -+#define LE_16(val) SWAP_ENDIAN_16(((uint8_t *)(val))) -+#define LE_32(val) SWAP_ENDIAN_32(((uint8_t *)(val))) -+#define LE_64(val) SWAP_ENDIAN_64(((uint8_t *)(val))) -+#define BE_16(val) SAME_ENDIAN_16(((uint8_t *)(val))) -+#define BE_32(val) SAME_ENDIAN_32(((uint8_t *)(val))) -+#define BE_64(val) SAME_ENDIAN_64(((uint8_t *)(val))) - --#define LE_64(val) (GINT64_FROM_LE (*((u_int64_t*)(val)))) --#define BE_64(val) (GINT64_FROM_BE (*((u_int64_t*)(val)))) -+#else -+#error Unknown endianness! -+#endif - - #endif /* BSWAP_H_INCLUDED */ --- -1.7.2.2 - |