Changeset 9c2c7d2 in mainline for uspace/lib/fdisk/src/fdisk.c


Ignore:
Timestamp:
2017-07-06T15:52:15Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5cd1eb9a
Parents:
d858a660
Message:

Fdisk should be able to set volume label for newly created partitions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/fdisk/src/fdisk.c

    rd858a660 r9c2c7d2  
    731731    fdisk_part_t **rpart)
    732732{
    733         fdisk_part_t *part;
     733        fdisk_part_t *part = NULL;
    734734        vbd_part_spec_t vpspec;
    735         vbd_part_id_t partid;
    736         int rc;
     735        vbd_part_id_t partid = 0;
     736        vol_part_info_t vpinfo;
     737        char *label;
     738        int rc;
     739
     740        label = str_dup(pspec->label);
     741        if (label == NULL)
     742                return ENOMEM;
    737743
    738744        rc = fdisk_part_spec_prepare(dev, pspec, &vpspec);
    739         if (rc != EOK)
    740                 return EIO;
     745        if (rc != EOK) {
     746                rc = EIO;
     747                goto error;
     748        }
    741749
    742750        rc = vbd_part_create(dev->fdisk->vbd, dev->sid, &vpspec, &partid);
    743         if (rc != EOK)
    744                 return EIO;
     751        if (rc != EOK) {
     752                rc = EIO;
     753                goto error;
     754        }
    745755
    746756        rc = fdisk_part_add(dev, partid, &part);
    747757        if (rc != EOK) {
    748                 /* Try rolling back */
    749                 (void) vbd_part_delete(dev->fdisk->vbd, partid);
    750                 return EIO;
     758                rc = EIO;
     759                goto error;
    751760        }
    752761
    753762        if (part->svc_id != 0) {
    754                 rc = vol_part_mkfs(dev->fdisk->vol, part->svc_id, pspec->fstype);
     763                rc = vol_part_mkfs(dev->fdisk->vol, part->svc_id, pspec->fstype,
     764                    pspec->label);
    755765                if (rc != EOK && rc != ENOTSUP) {
    756                         fdisk_part_remove(part);
    757                         (void) vbd_part_delete(dev->fdisk->vbd, partid);
    758                         return EIO;
    759                 }
    760 
    761                 part->pcnt = vpc_fs;
    762                 part->fstype = pspec->fstype;
     766                        rc = EIO;
     767                        goto error;
     768                }
     769
     770                /* Get the real label value */
     771                rc = vol_part_info(dev->fdisk->vol, part->svc_id, &vpinfo);
     772                if (rc != EOK) {
     773                        rc = EIO;
     774                        goto error;
     775                }
     776
     777                part->pcnt = vpinfo.pcnt;
     778                part->fstype = vpinfo.fstype;
     779                part->label = str_dup(vpinfo.label);
     780
     781                if (part->label == NULL) {
     782                        rc = EIO;
     783                        goto error;
     784                }
    763785        }
    764786
     
    766788                *rpart = part;
    767789        return EOK;
     790error:
     791        /* Try rolling back */
     792        if (part != NULL)
     793                fdisk_part_remove(part);
     794        if (partid != 0)
     795                (void) vbd_part_delete(dev->fdisk->vbd, partid);
     796        return rc;
    768797}
    769798
     
    11941223}
    11951224
     1225/** Get volume label support. */
     1226int fdisk_get_vollabel_support(fdisk_dev_t *dev, vol_fstype_t fstype,
     1227    vol_label_supp_t *vlsupp)
     1228{
     1229        return vol_part_get_lsupp(dev->fdisk->vol, fstype, vlsupp);
     1230}
     1231
    11961232/** @}
    11971233 */
Note: See TracChangeset for help on using the changeset viewer.