| 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) |
| 513 | { |
| 514 | static unsigned char *buffer; |
| 515 | static struct fat_dir_struct *ls; |
| 516 | buffer=(unsigned char*)MALLOC(0x200); |
| 517 | if(disk_car->pread(disk_car, buffer, 0x200, partition->part_offset) != 0x200) |
| 518 | { |
| 519 | #ifndef DISABLED_FOR_FRAMAC |
| 520 | log_error("Can't read FAT boot sector.\n"); |
| 521 | #endif |
| 522 | free(buffer); |
| 523 | return DIR_PART_EIO; |
| 524 | } |
| 525 | set_secwest(); |
| 526 | ls=(struct fat_dir_struct *)MALLOC(sizeof(*ls)); |
| 527 | ls->boot_sector=(struct fat_boot_sector*)buffer; |
| 528 | strncpy(dir_data->current_directory,"/",sizeof(dir_data->current_directory)); |
| 529 | dir_data->current_inode=0; |
| 530 | dir_data->param=FLAG_LIST_DELETED; |
| 531 | if(partition->upart_type==UP_FAT12) |
| 532 | dir_data->param|=FLAG_LIST_MASK12; |
| 533 | else if(partition->upart_type==UP_FAT16) |
| 534 | dir_data->param|=FLAG_LIST_MASK16; |
| 535 | dir_data->verbose=verbose; |
| 536 | dir_data->capabilities=CAPA_LIST_DELETED; |
| 537 | dir_data->copy_file=&fat_copy; |
| 538 | dir_data->close=&dir_partition_fat_close; |
| 539 | dir_data->local_dir=NULL; |
| 540 | dir_data->private_dir_data=ls; |
| 541 | dir_data->get_dir=&fat_dir; |
| 542 | return DIR_PART_OK; |
| 543 | } |
| 544 | |
| 545 | static void dir_partition_fat_close(dir_data_t *dir_data) |
| 546 | { |
no test coverage detected