Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 28ed0d9 in mainline for uspace/lib/fdisk/src/fdisk.c


Ignore:
Timestamp:
2015-06-27T19:50:12Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
78d50bd
Parents:
22fb7ab
Message:

VBD client API, liblabel API, pass partition creation/deletion through to VBD.

File:
1 edited

Legend:

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

    r22fb7ab r28ed0d9  
    4343#include <stdlib.h>
    4444#include <str.h>
     45#include <vbd.h>
    4546#include <vol.h>
    4647
     
    7172int fdisk_create(fdisk_t **rfdisk)
    7273{
    73         fdisk_t *fdisk;
     74        fdisk_t *fdisk = NULL;
    7475        int rc;
    7576
    7677        fdisk = calloc(1, sizeof(fdisk_t));
    77         if (fdisk == NULL)
    78                 return ENOMEM;
     78        if (fdisk == NULL) {
     79                rc = ENOMEM;
     80                goto error;
     81        }
    7982
    8083        rc = vol_create(&fdisk->vol);
    8184        if (rc != EOK) {
    82                 free(fdisk);
    83                 return EIO;
     85                rc = EIO;
     86                goto error;
     87        }
     88
     89        rc = vbd_create(&fdisk->vbd);
     90        if (rc != EOK) {
     91                rc = EIO;
     92                goto error;
    8493        }
    8594
    8695        *rfdisk = fdisk;
    8796        return EOK;
     97error:
     98        fdisk_destroy(fdisk);
     99
     100        return rc;
    88101}
    89102
    90103void fdisk_destroy(fdisk_t *fdisk)
    91104{
     105        if (fdisk == NULL)
     106                return;
     107
    92108        vol_destroy(fdisk->vol);
     109        vbd_destroy(fdisk->vbd);
    93110        free(fdisk);
    94111}
     
    368385{
    369386        fdisk_part_t *part;
     387        vbd_part_spec_t vpspec;
     388        vbd_part_id_t partid;
     389        int rc;
    370390
    371391        part = calloc(1, sizeof(fdisk_part_t));
    372392        if (part == NULL)
    373393                return ENOMEM;
     394
     395        rc = vbd_part_create(dev->fdisk->vbd, dev->sid, &vpspec, &partid);
     396        if (rc != EOK) {
     397                free(part);
     398                return EIO;
     399        }
    374400
    375401        part->dev = dev;
     
    377403        part->capacity = pspec->capacity;
    378404        part->fstype = pspec->fstype;
     405        part->part_id = partid;
    379406
    380407        if (rpart != NULL)
     
    385412int fdisk_part_destroy(fdisk_part_t *part)
    386413{
     414        int rc;
     415
     416        rc = vbd_part_delete(part->dev->fdisk->vbd, part->part_id);
     417        if (rc != EOK)
     418                return EIO;
     419
    387420        list_remove(&part->ldev);
    388421        free(part);
Note: See TracChangeset for help on using the changeset viewer.