Changeset c3cbbb2 in mainline


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

Location:
uspace
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/hdisk/func_gpt.c

    r9f4650c rc3cbbb2  
    4444static int set_gpt_partition(tinput_t *, gpt_part_t *);
    4545
    46 
    4746int construct_gpt_label(label_t *this)
    4847{
     
    5049        this->alignment = 1;
    5150       
    52         this->add_part    = add_gpt_part;
    53         this->delete_part = delete_gpt_part;
    54         this->new_label   = new_gpt_label;
    55         this->print_parts = print_gpt_parts;
    56         this->read_parts  = read_gpt_parts;
    57         this->write_parts = write_gpt_parts;
    58         this->extra_funcs = extra_gpt_funcs;
     51        this->add_part      = add_gpt_part;
     52        this->delete_part   = delete_gpt_part;
     53        this->destroy_label = destroy_gpt_label;
     54        this->new_label     = new_gpt_label;
     55        this->print_parts   = print_gpt_parts;
     56        this->read_parts    = read_gpt_parts;
     57        this->write_parts   = write_gpt_parts;
     58        this->extra_funcs   = extra_gpt_funcs;
    5959       
    6060        return this->new_label(this);
     
    110110        gpt_part_foreach(this->data.gpt, iter) {
    111111                i++;
    112                 //FIXMEE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     112               
    113113                if (gpt_get_part_type(iter) == GPT_PTE_UNUSED)
    114114                        continue;
     
    122122                                gpt_get_end_lba(iter) - gpt_get_start_lba(iter), gpt_get_part_type(iter),
    123123                                gpt_get_part_name(iter));
     124               
    124125        }
    125126       
     
    192193        gpt_set_end_lba(p, ea);
    193194       
     195        //printf("Set type : ");
     196        //size_t idx = get_input_size_t(in);
     197        //gpt_set_part_type(p, idx);
     198       
     199        gpt_set_random_uuid(p->part_type);
     200        gpt_set_random_uuid(p->part_id);
    194201       
    195202        char *name;
     
    201208        }
    202209       
    203         printf("name: %s, len: %d\n", name, str_size(name));
    204210        gpt_set_part_name(p, name, str_size(name));
    205211       
  • uspace/app/hdisk/hdisk.c

    r9f4650c rc3cbbb2  
    144144        rc = interact(dev_handle);
    145145       
    146         free_label();
    147        
    148146        return rc;
    149147}
  • 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;
  • uspace/lib/gpt/libgpt.h

    r9f4650c rc3cbbb2  
    167167extern void            gpt_set_flag     (gpt_part_t *, GPT_ATTR, bool);
    168168
     169extern void            gpt_set_random_uuid(uint8_t *);
    169170
    170171
    171172#define gpt_part_foreach(label, iterator) \
    172173                for(gpt_part_t * iterator = (label)->parts->part_array; \
    173                     iterator < (label)->parts->part_array + (label)->parts->fill; ++iterator)
     174                    iterator < (label)->parts->part_array + (label)->parts->arr_size; ++iterator)
    174175
    175176extern void gpt_free_gpt(gpt_t *);
Note: See TracChangeset for help on using the changeset viewer.