diff -ru grub-0.96-orig/lib/device.c grub-0.96/lib/device.c --- grub-0.96-orig/lib/device.c 2005-02-16 22:33:09.669384408 -0600 +++ grub-0.96/lib/device.c 2005-02-17 00:47:05.127596672 -0600 @@ -407,6 +407,12 @@ { sprintf (name, "/dev/ataraid/d%c", unit + '0'); } + +static void +get_i2o_disk_name (char *name, int unit) +{ + sprintf (name, "/dev/i2o/hd%c", unit + 'a'); +} #endif /* Check if DEVICE can be read. If an error occurs, return zero, @@ -798,6 +804,26 @@ } } } + + /* I2O disks. */ + for (i = 0; i < 8; i++) + { + char name[16]; + + get_i2o_disk_name (name, i); + if (check_device (name)) + { + (*map)[num_hd + 0x80] = strdup (name); + assert ((*map)[num_hd + 0x80]); + + /* If the device map file is opened, write the map. */ + if (fp) + fprintf (fp, "(hd%d)\t%s\n", num_hd, name); + + num_hd++; + } + } + #endif /* __linux__ */ /* OK, close the device map file if opened. */ @@ -858,8 +884,15 @@ if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) strcpy (dev + strlen(dev) - 5, "/part"); } - sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); - + sprintf (dev + strlen(dev), "%s%d", + /* Compaq smart and others */ + (strncmp(dev, "/dev/ida/", 9) == 0 || + strncmp(dev, "/dev/ataraid/", 13) == 0 || + strncmp(dev, "/dev/cciss/", 11) == 0 || + strncmp(dev, "/dev/rd/", 8) == 0 || + strncmp(dev, "/dev/i2o/", 9) == 0) ? "p" : "", + ((partition >> 16) & 0xFF) + 1); + /* Open the partition. */ fd = open (dev, O_RDWR); if (fd < 0) .