--- /usr/src/linux/drivers/usb/storage/carry_fex.c	Tue Jan  1 16:36:22 2002
+++ ./carry_fex.c	Wed Jan  2 16:54:29 2002
@@ -33,6 +33,7 @@
 #define FALSE	0
 #define TRUE	1
 
+#define EndGetI16(a)  ((((a)[1])<<8)|((a)[0]))
 
 int flen(FILE *f)
 {
@@ -89,11 +90,13 @@
 BOOL IsFirmware(void *ptr)
 {
 	PFirmwareRecord fw = (PFirmwareRecord)ptr;
-	int				i;
+	int	i, len;
+
+	len = EndGetI16((unsigned char *)ptr);
 
 	// General.,,
 	//
-	if( fw->Len > 16 )
+	if( len > 16 )
 		return FALSE;
 
 	if( fw->Pad !=0 )
@@ -101,12 +104,12 @@
 
 	switch( fw->Type ){
 	case 0:					// Data rec.
-		if( fw->Len == 0 )
+		if( len == 0 )
 			return FALSE;
 		break;
 
 	case 1:					// Termination rec.
-		if( fw->Len != 0 )
+		if( len != 0 )
 			return FALSE;
 		break;
 
@@ -114,7 +117,7 @@
 		return FALSE;
 	}
 
-	for(i=fw->Len;i<16;i++){
+	for(i=len;i<16;i++){
 		if( fw->Data[i] != 0 )
 			return FALSE;
 	}
@@ -259,7 +262,7 @@
 				break;
 			}
 
-			rawlen += fw->Len;
+			rawlen += EndGetI16((unsigned char *)ptr);
 		}
 
 		if( terminated ){
