summaryrefslogtreecommitdiffstats
path: root/meta/packages/dosfstools/files/alignment_hack.patch
blob: e15060a6fe6bf2d81be539f82f2bc0cba25a9802 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
The problem is that unsigned char[2] is
guranteed to be 8Bit aligned on arm
but unsigned short is/needs to be 16bit aligned
the union { unsigned short; unsigned char[2] } trick 
didn't work so no we use the alpha hack.

memcpy into an 16bit aligned

    -zecke


--- dosfstools/dosfsck/boot.c.orig	2003-05-15 19:32:23.000000000 +0200
+++ dosfstools/dosfsck/boot.c	2003-06-13 17:44:25.000000000 +0200
@@ -36,17 +36,15 @@
     { 0xff, "5.25\" 320k floppy 2s/40tr/8sec" },
 };
 
-#if defined __alpha || defined __ia64__ || defined __s390x__ || defined __x86_64__ || defined __ppc64__
+
 /* Unaligned fields must first be copied byte-wise */
 #define GET_UNALIGNED_W(f)			\
     ({						\
 	unsigned short __v;			\
 	memcpy( &__v, &f, sizeof(__v) );	\
-	CF_LE_W( *(unsigned short *)&f );	\
+	CF_LE_W( *(unsigned short *)&__v );	\
     })
-#else
-#define GET_UNALIGNED_W(f) CF_LE_W( *(unsigned short *)&f )
-#endif
+
 
 
 static char *get_media_descr( unsigned char media )