From: Vladimir 'phcoder' Serbinenko Date: Fri, 16 Jul 2010 23:14:13 +0000 (+0200) Subject: merge mainline into usb X-Git-Tag: 1.99~726^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af0bedf8af546f7b8ac3d1a44a6d5e5ea3468b2f;p=thirdparty%2Fgrub.git merge mainline into usb --- af0bedf8af546f7b8ac3d1a44a6d5e5ea3468b2f diff --cc disk/usbms.c index 0a781ccec,1301791e5..225761e0f --- a/disk/usbms.c +++ b/disk/usbms.c @@@ -205,25 -222,17 +205,18 @@@ grub_usbms_attach (grub_usb_device_t us 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; } @@@ -391,37 -391,28 +384,20 @@@ grub_usbms_write (struct grub_scsi *scs } 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",