| 92 | } |
| 93 | |
| 94 | int recover_NTFS(disk_t *disk_car, const struct ntfs_boot_sector*ntfs_header,partition_t *partition,const int verbose, const int dump_ind, const int backup) |
| 95 | { |
| 96 | uint64_t part_size; |
| 97 | if(test_NTFS(disk_car,ntfs_header,partition,verbose,dump_ind)!=0) |
| 98 | return 1; |
| 99 | if(verbose>0) |
| 100 | { |
| 101 | log_ntfs_info(ntfs_header); |
| 102 | } |
| 103 | part_size=(uint64_t)(le64(ntfs_header->sectors_nbr)+1)*ntfs_sector_size(ntfs_header); |
| 104 | partition->sborg_offset=0; |
| 105 | partition->sb_size=512; |
| 106 | if(backup>0) |
| 107 | { |
| 108 | if(partition->part_offset+disk_car->sector_size<part_size) |
| 109 | { |
| 110 | log_warning("NTFS part_offset=%llu, part_size=%llu, sector_size=%u\n", |
| 111 | (long long unsigned)partition->part_offset, (long long unsigned)part_size, |
| 112 | disk_car->sector_size); |
| 113 | log_warning("NTFS partition cannot be added (part_offset<part_size).\n"); |
| 114 | return 1; |
| 115 | } |
| 116 | if(verbose>1) |
| 117 | log_info("NTFS part_offset=%llu, part_size=%llu, sector_size=%u\n", |
| 118 | (long long unsigned)partition->part_offset, (long long unsigned)part_size, |
| 119 | disk_car->sector_size); |
| 120 | partition->sb_offset=part_size-disk_car->sector_size; |
| 121 | partition->part_offset-=partition->sb_offset; |
| 122 | if(verbose>1) |
| 123 | log_info("part_offset=%llu\n",(long long unsigned)partition->part_offset); |
| 124 | } |
| 125 | partition->part_size=part_size; |
| 126 | partition->part_type_i386=P_NTFS; |
| 127 | partition->part_type_gpt=GPT_ENT_TYPE_MS_BASIC_DATA; |
| 128 | set_NTFS_info(disk_car, ntfs_header, partition); |
| 129 | return 0; |
| 130 | } |
| 131 | |
| 132 | static void set_NTFS_info(disk_t *disk_car, const struct ntfs_boot_sector*ntfs_header, partition_t *partition) |
| 133 | { |
no test coverage detected