[PATCH 4/8] Introduce swap_uint{16,32} functions, used in swap{l,s}

Matt Turner mattst88 at gmail.com
Tue Aug 16 19:58:23 PDT 2011


Signed-off-by: Matt Turner <mattst88 at gmail.com>
---
 include/misc.h |   30 ++++++++++++++++++++----------
 1 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/include/misc.h b/include/misc.h
index d991c0a..6034c72 100644
--- a/include/misc.h
+++ b/include/misc.h
@@ -259,20 +259,30 @@ version_compare(uint16_t a_major, uint16_t a_minor,
     SwapLongs((CARD32 *)(stuff + 1), LengthRestL(stuff))
 
 /* byte swap a 32-bit value */
+static inline void swap_uint32(uint32_t *x)
+{
+	char n = ((char *) &x)[0];
+	((char *) x)[0] = ((char *) x)[3];
+	((char *) x)[3] = n;
+	n = ((char *) x)[1];
+	((char *) x)[1] = ((char *) x)[2];
+	((char *) x)[2] = n;
+}
+
 #define swapl(x) do { \
-		 char n = ((char *) (x))[0];\
-		 ((char *) (x))[0] = ((char *) (x))[3];\
-		 ((char *) (x))[3] = n;\
-		 n = ((char *) (x))[1];\
-		 ((char *) (x))[1] = ((char *) (x))[2];\
-		 ((char *) (x))[2] = n;\
+		swap_uint32((uint32_t *)(x)); \
 	} while (0)
 
-/* byte swap a short */
+/* byte swap a 16-bit value */
+static inline void swap_uint16(uint16_t *x)
+{
+	char  n = ((char *) x)[0];
+	((char *) x)[0] = ((char *) x)[1];
+	((char *) x)[1] = n;
+}
+
 #define swaps(x) do { \
-		 char  n = ((char *) (x))[0];\
-		 ((char *) (x))[0] = ((char *) (x))[1];\
-		 ((char *) (x))[1] = n;\
+		swap_uint16((uint16_t *)(x)); \
 	} while (0)
 
 /* copy 32-bit value from src to dst byteswapping on the way */
-- 
1.7.3.4



More information about the xorg-devel mailing list