static int scan_disk (const char *name, int accept_diskfilter) { grub_disk_t disk; static int scan_depth = 0; if (!accept_diskfilter && is_valid_diskfilter_name (name)) return 0; if (scan_depth > 100) return 0; scan_depth++; disk = grub_disk_open (name); if (!disk) { grub_errno = GRUB_ERR_NONE; scan_depth--; return 0; } scan_disk_partition_iter (disk, 0, (void *) name); grub_partition_iterate (disk, scan_disk_partition_iter, (void *) name); grub_disk_close (disk); scan_depth--; return 0; }
grub_err_t grub_device_close (grub_device_t device) { if (device->disk) grub_disk_close (device->disk); grub_free (device); return grub_errno; }
grub_err_t grub_device_close (grub_device_t device) { if (device->disk) grub_disk_close (device->disk); if (device->net) { grub_free (device->net->server); grub_free (device->net); } grub_free (device); return grub_errno; }
grub_device_t grub_device_open (const char *name) { grub_disk_t disk = 0; grub_device_t dev = 0; if (! name) { name = grub_env_get ("root"); if (*name == '\0') { grub_error (GRUB_ERR_BAD_DEVICE, "no device is set"); goto fail; } } dev = grub_malloc (sizeof (*dev)); if (! dev) goto fail; /* Try to open a disk. */ disk = grub_disk_open (name); if (! disk) goto fail; dev->disk = disk; dev->net = 0; /* FIXME */ return dev; fail: if (disk) grub_disk_close (disk); grub_free (dev); return 0; }