MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / save_header

Function save_header

src/savehdr.c:47–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45#define BACKUP_MAXSIZE 5120
46
47int save_header(disk_t *disk_car, const partition_t *partition, const int verbose)
48{
49 unsigned char *buffer;
50 FILE *f_backup;
51 int res=0;
52 if(verbose>1)
53 {
54 log_trace("save_header\n");
55 }
56 f_backup=fopen("header.log","ab");
57 if(!f_backup)
58 {
59 log_critical("Can't create header.log file: %s\n",strerror(errno));
60 return -1;
61 }
62 buffer=(unsigned char *)MALLOC(256*DEFAULT_SECTOR_SIZE);
63 memset(buffer,0,DEFAULT_SECTOR_SIZE);
64 {
65 char status='D';
66 switch(partition->status)
67 {
68 case STATUS_PRIM: status='P'; break;
69 case STATUS_PRIM_BOOT: status='*'; break;
70 case STATUS_EXT: status='E'; break;
71 case STATUS_EXT_IN_EXT: status='X'; break;
72 case STATUS_LOG: status='L'; break;
73 case STATUS_DELETED: status='D'; break;
74 }
75 snprintf((char*)buffer,256*DEFAULT_SECTOR_SIZE,"%s\n%2u %c Sys=%02X %5u %3u %2u %5u %3u %2u %10lu\n",
76 disk_car->description(disk_car), partition->order, status,
77 (disk_car->arch->get_part_type!=NULL ? disk_car->arch->get_part_type(partition) : 0),
78 offset2cylinder(disk_car,partition->part_offset), offset2head(disk_car,partition->part_offset),offset2sector(disk_car,partition->part_offset),
79 offset2cylinder(disk_car,partition->part_offset+partition->part_size-disk_car->sector_size), offset2head(disk_car,partition->part_offset+partition->part_size-disk_car->sector_size),offset2sector(disk_car,partition->part_offset+partition->part_size-disk_car->sector_size),
80 (unsigned long)(partition->part_size/disk_car->sector_size));
81 }
82 if(fwrite(buffer,DEFAULT_SECTOR_SIZE,1,f_backup)!=1)
83 res = -1;
84 if(res>=0 && disk_car->pread(disk_car, buffer, 256 * DEFAULT_SECTOR_SIZE, partition->part_offset) != 256 * DEFAULT_SECTOR_SIZE)
85 res = -1;
86 if(res>=0 && fwrite(buffer,DEFAULT_SECTOR_SIZE,256,f_backup)!=256)
87 res = -1;
88 fclose(f_backup);
89 free(buffer);
90 return res;
91}
92
93backup_disk_t *partition_load(const disk_t *disk_car, const int verbose)
94{

Callers 5

check_part_gptFunction · 0.85
check_part_macFunction · 0.85
check_part_sunFunction · 0.85
check_part_i386Function · 0.85
check_part_xboxFunction · 0.85

Calls 5

MALLOCFunction · 0.85
snprintfFunction · 0.85
offset2cylinderFunction · 0.85
offset2headFunction · 0.85
offset2sectorFunction · 0.85

Tested by

no test coverage detected