int part_get_info(struct blk_desc *dev_desc, int part, disk_partition_t *info) { #ifdef HAVE_BLOCK_DEVICE struct part_driver *drv; #ifdef CONFIG_PARTITION_UUIDS /* The common case is no UUID support */ info->uuid[0] = 0; #endif #ifdef CONFIG_PARTITION_TYPE_GUID info->type_guid[0] = 0; #endif drv = part_driver_lookup_type(dev_desc->part_type); if (!drv) { debug("## Unknown partition table type %x\n", dev_desc->part_type); return -EPROTONOSUPPORT; } if (!drv->get_info) { PRINTF("## Driver %s does not have the get_info() method\n", drv->name); return -ENOSYS; } if (drv->get_info(dev_desc, part, info) == 0) { PRINTF("## Valid %s partition found ##\n", drv->name); return 0; } #endif /* HAVE_BLOCK_DEVICE */ return -1; }
void part_print(struct blk_desc *dev_desc) { struct part_driver *drv; drv = part_driver_lookup_type(dev_desc->part_type); if (!drv) { printf("## Unknown partition table type %x\n", dev_desc->part_type); return; } PRINTF("## Testing for valid %s partition ##\n", drv->name); print_part_header(drv->name, dev_desc); if (drv->print) drv->print(dev_desc); }
int part_get_info_by_name_type(struct blk_desc *dev_desc, const char *name, disk_partition_t *info, int part_type) { struct part_driver *part_drv; int ret; int i; part_drv = part_driver_lookup_type(dev_desc); if (!part_drv) return -1; for (i = 1; i < part_drv->max_entries; i++) { ret = part_drv->get_info(dev_desc, i, info); if (ret != 0) { /* no more entries in table */ break; } if (strcmp(name, (const char *)info->name) == 0) { /* matched */ return i; } } return -1; }