\f
static int
- grub_usbms_iterate (int (*hook) (const char *name, int luns))
+ grub_usbms_iterate (int (*hook) (int bus, int luns))
{
- grub_usbms_dev_t p;
- int cnt = 0;
+ unsigned i;
- for (p = grub_usbms_dev_list; p; p = p->next)
- {
- if (hook (cnt, p->luns))
- return 1;
- cnt++;
- }
+ grub_usb_poll_devices ();
+
+ for (i = 0; i < ARRAY_SIZE (grub_usbms_devices); i++)
+ if (grub_usbms_devices[i])
+ {
- char *devname;
- devname = grub_xasprintf ("usb%d", i);
-
- if (hook (devname, grub_usbms_devices[i]->luns))
- {
- grub_free (devname);
- return 1;
- }
- grub_free (devname);
++ if (hook (i, grub_usbms_devices[i]->luns))
++ return 1;
+ }
return 0;
}
}
static grub_err_t
- grub_usbms_open (const char *name, struct grub_scsi *scsi)
+ grub_usbms_open (int devnum, struct grub_scsi *scsi)
{
- int devnum;
-
- if (grub_strncmp (name, "usb", 3))
- return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
- "not a USB Mass Storage device");
-
- devnum = grub_strtoul (name + 3, NULL, 10);
-
- grub_usbms_dev_t p;
- int i = 0;
+ grub_usb_poll_devices ();
- for (p = grub_usbms_dev_list; p; p = p->next)
- {
- /* Check if this is the devnumth device. */
- if (devnum == i)
- {
- scsi->data = p;
- scsi->luns = p->luns;
- return GRUB_ERR_NONE;
- }
+ if (!grub_usbms_devices[devnum])
+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
- "not a USB Mass Storage device");
++ "unknown USB Mass Storage device");
- i++;
- }
+ scsi->data = grub_usbms_devices[devnum];
- scsi->name = grub_strdup (name);
+ scsi->luns = grub_usbms_devices[devnum]->luns;
- if (! scsi->name)
- return grub_errno;
- return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
- "not a USB Mass Storage device");
+ return GRUB_ERR_NONE;
}
- static void
- grub_usbms_close (struct grub_scsi *scsi)
- {
- grub_free (scsi->name);
- }
-
static struct grub_scsi_dev grub_usbms_dev =
{
.name = "usb",