Index: fatfs/fat.h
===================================================================
RCS file: /cvsroot/hurd/hurd/fatfs/fat.h,v
retrieving revision 1.1
diff -u -r1.1 fat.h
--- fatfs/fat.h	3 Dec 2002 20:52:59 -0000	1.1
+++ fatfs/fat.h	9 Aug 2003 12:43:55 -0000
@@ -1,5 +1,5 @@
 /* fat.h - Support for FAT filesystems interfaces.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    Written by Marcus Brinkmann.
 
    This file is part of the GNU Hurd.
@@ -353,10 +353,11 @@
 #if BYTE_ORDER == LITTLE_ENDIAN
   return *(unsigned int *)addr;
 #elif BYTE_ORDER == BIG_ENDIAN
-  return *(unsigned int *)(addr + 4);
+  register unsigned int tmp = *(unsigned int *)addr;
+  return (tmp << 24) | ((tmp << 8) & 0xff0000)
+    | ((tmp >> 8) & 0xff00) | (tmp >> 24);
 #else
-  return
-    addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
+#error unknown byte order
 #endif
 }
 
@@ -366,9 +367,10 @@
 #if BYTE_ORDER == LITTLE_ENDIAN
   return *(unsigned short *)addr;
 #elif BYTE_ORDER == BIG_ENDIAN
-  return *(unsigned short *)addr + 2;
+  register unsigned int tmp = *(unsigned short *)addr;
+  return ((tmp << 8) & 0xff00) | (tmp >> 8);
 #else
-  return addr[0] | (addr[1] << 8);
+#error unknown byte order
 #endif
 }
 
@@ -378,12 +380,11 @@
 #if BYTE_ORDER == LITTLE_ENDIAN
   *(unsigned int *)addr = value;
 #elif BYTE_ORDER == BIG_ENDIAN
-#error unknown byte order
+  register unsigned int tmp = (value << 24) | ((value << 8) & 0xff0000)
+    | (value >> 8) & 0xff00 | (value >> 24);
+  *(unsigned int *)addr = tmp;
 #else
-  addr[0] = value & 0xff;
-  addr[1] = (value >> 8) & 0xff;
-  addr[2] = (value >> 16) & 0xff;
-  addr[3] = (value >> 24) & 0xff;
+#error unknown byte order
 #endif
 }
 
@@ -393,10 +394,10 @@
 #if BYTE_ORDER == LITTLE_ENDIAN
   *(unsigned short *)addr = value;
 #elif BYTE_ORDER == BIG_ENDIAN
-#error unknown byte order
+  register unsigned int tmp = ((value << 8) & 0xff00) | (value >> 8);
+  *(unsigned short *)addr = tmp;
 #else
-  addr[0] = value & 0xff;
-  addr[1] = (value >> 8) & 0xff;
+#error unknown byte order
 #endif
 }
 

