Changeset c3cbbb2 in mainline for uspace/lib/gpt/libgpt.c


Ignore:
Timestamp:
2013-07-26T21:48:22Z (11 years ago)
Author:
Dominik Taborsky (AT DOT) <brembyseznamcz>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
903a897, dc76f4a
Parents:
9f4650c
Message:

more libgpt fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/gpt/libgpt.c

    r9f4650c rc3cbbb2  
    230230        int rc;
    231231        unsigned int i;
    232         uint32_t fill = uint32_t_le2host(label->gpt->header->fillries);
     232        uint32_t fillries = uint32_t_le2host(label->gpt->header->fillries);
    233233        uint32_t ent_size = uint32_t_le2host(label->gpt->header->entry_size);
    234234        uint64_t ent_lba = uint64_t_le2host(label->gpt->header->entry_lba);
    235235       
    236236        if (label->parts == NULL) {
    237                 label->parts = alloc_part_array(fill);
     237                label->parts = alloc_part_array(fillries);
    238238                if (label->parts == NULL) {
    239239                        return ENOMEM;
     
    263263         * will always read just sizeof(gpt_entry_t) bytes - hopefully they
    264264         * don't break backward compatibility) */
    265         for (i = 0; i < fill; ++i) {
     265        for (i = 0; i < fillries; ++i) {
    266266                //FIXME: this does bypass cache...
    267267                rc = block_read_bytes_direct(label->device, pos, sizeof(gpt_entry_t), label->parts->part_array + i);
     
    280280         */
    281281        uint32_t crc = compute_crc32((uint8_t *) label->parts->part_array,
    282                            label->parts->fill * sizeof(gpt_entry_t));
     282                           fillries * sizeof(gpt_entry_t));
    283283
    284284        if(uint32_t_le2host(label->gpt->header->pe_array_crc32) != crc)
     
    312312        size_t b_size;
    313313        uint32_t e_size = uint32_t_le2host(label->gpt->header->entry_size);
    314         size_t fill = label->parts->fill > GPT_MIN_PART_NUM ? label->parts->fill : GPT_MIN_PART_NUM;
    315        
    316         label->gpt->header->pe_array_crc32 = compute_crc32(
     314        size_t fillries = label->parts->fill > GPT_MIN_PART_NUM ? label->parts->fill : GPT_MIN_PART_NUM;
     315       
     316        label->gpt->header->fillries = host2uint32_t_le(fillries);
     317        label->gpt->header->pe_array_crc32 = host2uint32_t_le(compute_crc32(
    317318                                       (uint8_t *) label->parts->part_array,
    318                                        fill * e_size);
     319                                       fillries * e_size));
    319320       
    320321        /* comm_size of 4096 is ignored */
     
    339340        /* Write to main GPT partition array location */
    340341        rc = block_write_direct(dev_handle, uint64_t_le2host(label->gpt->header->entry_lba),
    341                         nearest_larger_int((uint64_t_le2host(label->gpt->header->entry_size) * label->parts->fill) / b_size),
    342                         label->parts->part_array);
     342                 nearest_larger_int((uint64_t_le2host(label->gpt->header->entry_size) * fillries) / b_size),
     343                 label->parts->part_array);
    343344        if (rc != EOK)
    344345                goto fail;
     
    385386{
    386387        gpt_part_t *p;
     388       
    387389       
    388390        /* Find the first empty entry */
     
    482484        memset(label->parts->part_array + idx, 0, sizeof(gpt_entry_t));
    483485       
    484         label->parts->fill -= 1;
     486        label->parts->fill = idx;
    485487       
    486488        /* FIXME! HOPEFULLY FIXED.
     
    633635}
    634636
     637void gpt_set_random_uuid(uint8_t * uuid)
     638{
     639        srandom((unsigned int) uuid);
     640       
     641        unsigned int i;
     642        for (i = 0; i < 16/sizeof(long int); ++i)
     643                ((long int *)uuid)[i] = random();
     644       
     645}
     646
    635647// Internal functions follow //
    636648
     
    683695        }
    684696
    685         res->fill = num;
    686         res->arr_size = size;
     697        res->fill = 0;
     698        res->arr_size = num;
    687699
    688700        return res;
     
    691703static int extend_part_array(gpt_partitions_t * p)
    692704{
    693         unsigned int nsize = p->arr_size * 2;
     705        size_t nsize = p->arr_size * 2;
    694706        gpt_entry_t * tmp = malloc(nsize * sizeof(gpt_entry_t));
    695707        if(tmp == NULL) {
     
    697709                return -1;
    698710        }
    699 
    700         memcpy(tmp, p->part_array, p->fill);
     711       
     712        memcpy(tmp, p->part_array, p->fill * sizeof(gpt_entry_t));
    701713        free(p->part_array);
    702714        p->part_array = tmp;
Note: See TracChangeset for help on using the changeset viewer.