Changes in / [903a897:1a1a735] in mainline
- Location:
- uspace
- Files:
-
- 4 edited
-
app/hdisk/func_gpt.c (modified) (6 diffs)
-
app/hdisk/hdisk.c (modified) (1 diff)
-
lib/gpt/libgpt.c (modified) (11 diffs)
-
lib/gpt/libgpt.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/func_gpt.c
r903a897 r1a1a735 44 44 static int set_gpt_partition(tinput_t *, gpt_part_t *); 45 45 46 46 47 int construct_gpt_label(label_t *this) 47 48 { … … 49 50 this->alignment = 1; 50 51 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; 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; 59 59 60 60 return this->new_label(this); … … 110 110 gpt_part_foreach(this->data.gpt, iter) { 111 111 i++; 112 112 //FIXMEE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 113 113 if (gpt_get_part_type(iter) == GPT_PTE_UNUSED) 114 114 continue; … … 122 122 gpt_get_end_lba(iter) - gpt_get_start_lba(iter), gpt_get_part_type(iter), 123 123 gpt_get_part_name(iter)); 124 125 124 } 126 125 … … 193 192 gpt_set_end_lba(p, ea); 194 193 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);201 194 202 195 char *name; … … 208 201 } 209 202 203 printf("name: %s, len: %d\n", name, str_size(name)); 210 204 gpt_set_part_name(p, name, str_size(name)); 211 205 -
uspace/app/hdisk/hdisk.c
r903a897 r1a1a735 144 144 rc = interact(dev_handle); 145 145 146 free_label(); 147 146 148 return rc; 147 149 } -
uspace/lib/gpt/libgpt.c
r903a897 r1a1a735 230 230 int rc; 231 231 unsigned int i; 232 uint32_t fill ries= uint32_t_le2host(label->gpt->header->fillries);232 uint32_t fill = uint32_t_le2host(label->gpt->header->fillries); 233 233 uint32_t ent_size = uint32_t_le2host(label->gpt->header->entry_size); 234 234 uint64_t ent_lba = uint64_t_le2host(label->gpt->header->entry_lba); 235 235 236 236 if (label->parts == NULL) { 237 label->parts = alloc_part_array(fill ries);237 label->parts = alloc_part_array(fill); 238 238 if (label->parts == NULL) { 239 239 return ENOMEM; … … 263 263 * will always read just sizeof(gpt_entry_t) bytes - hopefully they 264 264 * don't break backward compatibility) */ 265 for (i = 0; i < fill ries; ++i) {265 for (i = 0; i < fill; ++i) { 266 266 //FIXME: this does bypass cache... 267 267 rc = block_read_bytes_direct(label->device, pos, sizeof(gpt_entry_t), label->parts->part_array + i); … … 280 280 */ 281 281 uint32_t crc = compute_crc32((uint8_t *) label->parts->part_array, 282 fillries* sizeof(gpt_entry_t));282 label->parts->fill * sizeof(gpt_entry_t)); 283 283 284 284 if(uint32_t_le2host(label->gpt->header->pe_array_crc32) != crc) … … 312 312 size_t b_size; 313 313 uint32_t e_size = uint32_t_le2host(label->gpt->header->entry_size); 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( 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( 318 317 (uint8_t *) label->parts->part_array, 319 fill ries * e_size));318 fill * e_size); 320 319 321 320 /* comm_size of 4096 is ignored */ … … 340 339 /* Write to main GPT partition array location */ 341 340 rc = block_write_direct(dev_handle, uint64_t_le2host(label->gpt->header->entry_lba), 342 nearest_larger_int((uint64_t_le2host(label->gpt->header->entry_size) * fillries) / b_size),343 label->parts->part_array);341 nearest_larger_int((uint64_t_le2host(label->gpt->header->entry_size) * label->parts->fill) / b_size), 342 label->parts->part_array); 344 343 if (rc != EOK) 345 344 goto fail; … … 386 385 { 387 386 gpt_part_t *p; 388 389 387 390 388 /* Find the first empty entry */ … … 484 482 memset(label->parts->part_array + idx, 0, sizeof(gpt_entry_t)); 485 483 486 label->parts->fill = idx;484 label->parts->fill -= 1; 487 485 488 486 /* FIXME! HOPEFULLY FIXED. … … 635 633 } 636 634 637 void 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 647 635 // Internal functions follow // 648 636 … … 695 683 } 696 684 697 res->fill = 0;698 res->arr_size = num;685 res->fill = num; 686 res->arr_size = size; 699 687 700 688 return res; … … 703 691 static int extend_part_array(gpt_partitions_t * p) 704 692 { 705 size_t nsize = p->arr_size * 2;693 unsigned int nsize = p->arr_size * 2; 706 694 gpt_entry_t * tmp = malloc(nsize * sizeof(gpt_entry_t)); 707 695 if(tmp == NULL) { … … 709 697 return -1; 710 698 } 711 712 memcpy(tmp, p->part_array, p->fill * sizeof(gpt_entry_t));699 700 memcpy(tmp, p->part_array, p->fill); 713 701 free(p->part_array); 714 702 p->part_array = tmp; -
uspace/lib/gpt/libgpt.h
r903a897 r1a1a735 167 167 extern void gpt_set_flag (gpt_part_t *, GPT_ATTR, bool); 168 168 169 extern void gpt_set_random_uuid(uint8_t *);170 169 171 170 172 171 #define gpt_part_foreach(label, iterator) \ 173 172 for(gpt_part_t * iterator = (label)->parts->part_array; \ 174 iterator < (label)->parts->part_array + (label)->parts-> arr_size; ++iterator)173 iterator < (label)->parts->part_array + (label)->parts->fill; ++iterator) 175 174 176 175 extern void gpt_free_gpt(gpt_t *);
Note:
See TracChangeset
for help on using the changeset viewer.
