Changeset b7a4d06 in mainline for uspace/lib/label/src/gpt.c


Ignore:
Timestamp:
2015-07-18T12:55:12Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c43db5f
Parents:
70815a24
Message:

Most of extended (but not logical) partition support.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/label/src/gpt.c

    r70815a24 rb7a4d06  
    150150
    151151        list_initialize(&label->parts);
     152        list_initialize(&label->pri_parts);
     153        list_initialize(&label->log_parts);
    152154
    153155        for (j = 0; j < 2; j++) {
     
    300302        label->pri_entries = num_entries;
    301303        label->block_size = bsize;
     304        label->ext_part_idx = -1;
    302305
    303306        label->lt.gpt.hdr_ba[0] = gpt_hdr_ba;
     
    436439
    437440        list_initialize(&label->parts);
     441        list_initialize(&label->pri_parts);
     442        list_initialize(&label->log_parts);
    438443
    439444        label->ops = &gpt_label_ops;
     
    444449        label->pri_entries = num_entries;
    445450        label->block_size = bsize;
     451        label->ext_part_idx = -1;
    446452
    447453        label->lt.gpt.hdr_ba[0] = hdr_ba[0];
     
    468474        part = gpt_part_first(label);
    469475        while (part != NULL) {
    470                 list_remove(&part->llabel);
     476                list_remove(&part->lparts);
     477                list_remove(&part->lpri);
    471478                free(part);
    472479                part = gpt_part_first(label);
     
    532539}
    533540
     541static bool gpt_can_create_pri(label_t *label)
     542{
     543        return list_count(&label->parts) < (size_t)label->pri_entries;
     544}
     545
    534546static int gpt_get_info(label_t *label, label_info_t *linfo)
    535547{
     
    537549        linfo->dcnt = dc_label;
    538550        linfo->ltype = lt_gpt;
     551        linfo->flags = 0;
     552        if (gpt_can_create_pri(label))
     553                linfo->flags = linfo->flags | lf_can_create_pri;
    539554        linfo->ablock0 = label->ablock0;
    540555        linfo->anblocks = label->anblocks;
     
    550565                return NULL;
    551566
    552         return list_get_instance(link, label_part_t, llabel);
     567        return list_get_instance(link, label_part_t, lparts);
    553568}
    554569
     
    557572        link_t *link;
    558573
    559         link = list_next(&part->llabel, &part->label->parts);
     574        link = list_next(&part->lparts, &part->label->parts);
    560575        if (link == NULL)
    561576                return NULL;
    562577
    563         return list_get_instance(link, label_part_t, llabel);
     578        return list_get_instance(link, label_part_t, lparts);
    564579}
    565580
     
    567582{
    568583        pinfo->index = part->index;
     584        pinfo->pkind = lpk_primary;
    569585        pinfo->block0 = part->block0;
    570586        pinfo->nblocks = part->nblocks;
     
    587603
    588604        if (pspec->index < 1 || pspec->index > label->pri_entries) {
     605                rc = EINVAL;
     606                goto error;
     607        }
     608
     609        /* GPT only has primary partitions */
     610        if (pspec->pkind != lpk_primary) {
    589611                rc = EINVAL;
    590612                goto error;
     
    614636        }
    615637
    616         list_append(&part->llabel, &label->parts);
     638        list_append(&part->lparts, &label->parts);
     639        list_append(&part->lpri, &label->pri_parts);
    617640
    618641        *rpart = part;
     
    636659                return EIO;
    637660
    638         list_remove(&part->llabel);
     661        list_remove(&part->lparts);
     662        list_remove(&part->lpri);
    639663        free(part);
    640664        return EOK;
     
    694718
    695719        part->label = label;
    696         list_append(&part->llabel, &label->parts);
     720        list_append(&part->lparts, &label->parts);
     721        list_append(&part->lpri, &label->pri_parts);
    697722        return EOK;
    698723}
Note: See TracChangeset for help on using the changeset viewer.