| 479 | } |
| 480 | |
| 481 | static int fat1x_rootdir(disk_t *disk_car, const partition_t *partition, const dir_data_t *dir_data, const struct fat_boot_sector*fat_header, file_info_t *dir_list) |
| 482 | { |
| 483 | const unsigned int root_size=(get_dir_entries(fat_header)*32+disk_car->sector_size-1)/disk_car->sector_size*disk_car->sector_size; |
| 484 | if(root_size==0) |
| 485 | return -1; |
| 486 | #ifndef DISABLED_FOR_FRAMAC |
| 487 | if(dir_data->verbose>1) |
| 488 | { |
| 489 | log_trace("fat1x_rootdir root_size=%u sectors\n",root_size/disk_car->sector_size); |
| 490 | } |
| 491 | #endif |
| 492 | { |
| 493 | int res; |
| 494 | uint64_t start; |
| 495 | unsigned char *buffer_dir; |
| 496 | buffer_dir=(unsigned char*)MALLOC(root_size); |
| 497 | start=partition->part_offset+(uint64_t)((le16(fat_header->reserved)+fat_header->fats*le16(fat_header->fat_length))*disk_car->sector_size); |
| 498 | if((unsigned)disk_car->pread(disk_car, buffer_dir, root_size, start) != root_size) |
| 499 | { |
| 500 | #ifndef DISABLED_FOR_FRAMAC |
| 501 | log_error("FAT 1x: Can't read root directory.\n"); |
| 502 | #endif |
| 503 | /* Don't return yet, it may have been a partial read */ |
| 504 | } |
| 505 | res=dir_fat_aux(buffer_dir, root_size, dir_data->param, dir_list); |
| 506 | free(buffer_dir); |
| 507 | return res; |
| 508 | } |
| 509 | } |
| 510 | |
| 511 | |
| 512 | dir_partition_t dir_partition_fat_init(disk_t *disk_car, const partition_t *partition, dir_data_t *dir_data, const int verbose) |
no test coverage detected