--- ide.c.orig	Fri Jun  7 14:47:04 2002
+++ ide.c	Fri Jun  7 14:47:43 2002
@@ -112,6 +112,24 @@
   return ((x & 0xFF) << 8) | ((x & 0xFF00) >> 8);
 }
 
+/* Byte-swap (in 2-byte chunks) from src to dest and 
+   len is in bytes and counts space for a trailing NUL
+   to be added to the end of dest (and is thus odd)
+   */
+static void copy_ident_string(char *dest,const char *src,int len)
+{
+    int i;
+
+    len--;
+    
+    for (i=0;i<len;i+=2) {
+        dest[i] = src[i+1];
+        dest[i+1] = src[i];	
+    }
+
+    dest[len] = 0;
+}
+
 #define IDE_STATUS_ERR  (1 << 0)
 #define IDE_STATUS_DRQ  (1 << 3)
 #define IDE_STATUS_DEVFLT (1 << 5)
@@ -127,7 +145,7 @@
     if (ide_adapter) {
         char serial_number[21];
         char firmware_revision[9];
-        char model_number[40];
+        char model_number[41];
         u8 identify_command = 0;
         if (param_ide_use_packet.value)
            identify_command = IDE_COMMAND_IDENTIFY_PACKET;
@@ -147,12 +165,9 @@
         }
         if (ide_verbose)
             hex_dump((unsigned char *)&ide_adapter->identification, sizeof(struct drive_identification));
-        memset(serial_number, 0, sizeof(serial_number)); 
-        memcpy(serial_number, ide_adapter->identification.serial_number, sizeof(serial_number)-1);
-        memset(firmware_revision, 0, sizeof(firmware_revision));
-        memcpy(firmware_revision, ide_adapter->identification.firmware_revision, sizeof(firmware_revision)-1);
-        memset(model_number, 0, sizeof(model_number));
-        memcpy(model_number, ide_adapter->identification.model_number, sizeof(model_number)-1);
+        copy_ident_string(serial_number, ide->adapter->identification.serial_number, sizeof(serial_number));
+        copy_ident_string(firmware_revision, ide_adapter->identification.firmware_revision, sizeof(firmware_revision));
+        copy_ident_string(model_number, ide_adapter->identification.model_number, sizeof(model_number));
         putstr("  serial_number: "); putstr(serial_number); putstr("\r\n");
         putstr("  firmware_revision: "); putstr(firmware_revision); putstr("\r\n");
         putstr("  model_number: "); putstr(model_number); putstr("\r\n");
