disk: part: refactor generic name creation for DOS and ISO
authorPetr Kulhavy <brain@jikos.cz>
Fri, 9 Sep 2016 08:27:17 +0000 (10:27 +0200)
committerTom Rini <trini@konsulko.com>
Sun, 2 Oct 2016 00:04:56 +0000 (20:04 -0400)
In both DOS and ISO partition tables the same code to create partition name
like "hda1" was repeated.

Code moved to into a new function part_set_generic_name() in part.c and optimized.
Added recognition of MMC and SD types, name is like "mmcsda1".

Signed-off-by: Petr Kulhavy <brain@jikos.cz>
Reviewed-by: Tom Rini <trini@konsulko.com>
Acked-by: Steve Rae <steve.rae@raedomain.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
disk/part.c
disk/part_dos.c
disk/part_iso.c
doc/README.android-fastboot
include/part.h

index 8317e80..9f51a07 100644 (file)
@@ -641,3 +641,35 @@ int part_get_info_by_name(struct blk_desc *dev_desc, const char *name,
        }
        return -1;
 }
+
+void part_set_generic_name(const struct blk_desc *dev_desc,
+       int part_num, char *name)
+{
+       char *devtype;
+
+       switch (dev_desc->if_type) {
+       case IF_TYPE_IDE:
+       case IF_TYPE_SATA:
+       case IF_TYPE_ATAPI:
+               devtype = "hd";
+               break;
+       case IF_TYPE_SCSI:
+               devtype = "sd";
+               break;
+       case IF_TYPE_USB:
+               devtype = "usbd";
+               break;
+       case IF_TYPE_DOC:
+               devtype = "docd";
+               break;
+       case IF_TYPE_MMC:
+       case IF_TYPE_SD:
+               devtype = "mmcsd";
+               break;
+       default:
+               devtype = "xx";
+               break;
+       }
+
+       sprintf(name, "%s%c%d", devtype, 'a' + dev_desc->devnum, part_num);
+}
index 8e6aae5..ed78334 100644 (file)
@@ -209,35 +209,8 @@ static int part_get_info_extended(struct blk_desc *dev_desc,
                        info->start = (lbaint_t)(ext_part_sector +
                                        le32_to_int(pt->start4));
                        info->size  = (lbaint_t)le32_to_int(pt->size4);
-                       switch(dev_desc->if_type) {
-                               case IF_TYPE_IDE:
-                               case IF_TYPE_SATA:
-                               case IF_TYPE_ATAPI:
-                                       sprintf((char *)info->name, "hd%c%d",
-                                               'a' + dev_desc->devnum,
-                                               part_num);
-                                       break;
-                               case IF_TYPE_SCSI:
-                                       sprintf((char *)info->name, "sd%c%d",
-                                               'a' + dev_desc->devnum,
-                                               part_num);
-                                       break;
-                               case IF_TYPE_USB:
-                                       sprintf((char *)info->name, "usbd%c%d",
-                                               'a' + dev_desc->devnum,
-                                               part_num);
-                                       break;
-                               case IF_TYPE_DOC:
-                                       sprintf((char *)info->name, "docd%c%d",
-                                               'a' + dev_desc->devnum,
-                                               part_num);
-                                       break;
-                               default:
-                                       sprintf((char *)info->name, "xx%c%d",
-                                               'a' + dev_desc->devnum,
-                                               part_num);
-                                       break;
-                       }
+                       part_set_generic_name(dev_desc, part_num,
+                                             (char *)info->name);
                        /* sprintf(info->type, "%d, pt->sys_ind); */
                        strcpy((char *)info->type, "U-Boot");
                        info->bootable = is_bootable(pt);
index 78fc97e..bb8ed65 100644 (file)
@@ -137,30 +137,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
        entry_num=1;
        offset=0x20;
        strcpy((char *)info->type, "U-Boot");
-       switch(dev_desc->if_type) {
-               case IF_TYPE_IDE:
-               case IF_TYPE_SATA:
-               case IF_TYPE_ATAPI:
-                       sprintf ((char *)info->name, "hd%c%d",
-                               'a' + dev_desc->devnum, part_num);
-                       break;
-               case IF_TYPE_SCSI:
-                       sprintf ((char *)info->name, "sd%c%d",
-                               'a' + dev_desc->devnum, part_num);
-                       break;
-               case IF_TYPE_USB:
-                       sprintf ((char *)info->name, "usbd%c%d",
-                               'a' + dev_desc->devnum, part_num);
-                       break;
-               case IF_TYPE_DOC:
-                       sprintf ((char *)info->name, "docd%c%d",
-                               'a' + dev_desc->devnum, part_num);
-                       break;
-               default:
-                       sprintf ((char *)info->name, "xx%c%d",
-                               'a' + dev_desc->devnum, part_num);
-                       break;
-       }
+       part_set_generic_name(dev_desc, part_num, (char *)info->name);
        /* the bootcatalog (including validation Entry) is limited to 2048Bytes
         * (63 boot entries + validation entry) */
         while(offset<2048) {
index dea7066..b8afa15 100644 (file)
@@ -79,6 +79,7 @@ The device type is as follows:
   * IDE, ATAPI and SATA disks: hd
   * SCSI disks: sd
   * USB media: usbd
+  * MMC and SD cards: mmcsd
   * Disk on chip: docd
   * other: xx
 
index b17c219..0979005 100644 (file)
@@ -165,6 +165,20 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 int part_get_info_by_name(struct blk_desc *dev_desc,
                              const char *name, disk_partition_t *info);
 
+/**
+ * part_set_generic_name() - create generic partition like hda1 or sdb2
+ *
+ * Helper function for partition tables, which don't hold partition names
+ * (DOS, ISO). Generates partition name out of the device type and partition
+ * number.
+ *
+ * @dev_desc:  pointer to the block device
+ * @part_num:  partition number for which the name is generated
+ * @name:      buffer where the name is written
+ */
+void part_set_generic_name(const struct blk_desc *dev_desc,
+       int part_num, char *name);
+
 extern const struct block_drvr block_drvr[];
 #else
 static inline struct blk_desc *blk_get_dev(const char *ifname, int dev)