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

Function disk_image_backward

src/dimage.c:66–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64#endif
65
66static void disk_image_backward(int disk_dst, disk_t *disk, const uint64_t src_offset_start, const uint64_t src_offset_end, uint64_t dst_offset)
67{
68 uint64_t src_offset;
69 unsigned char *buffer=(unsigned char *)MALLOC(disk->sector_size);
70 for(src_offset=src_offset_end-disk->sector_size; src_offset > src_offset_start; src_offset-=disk->sector_size, dst_offset-=disk->sector_size)
71 {
72 const ssize_t pread_res=disk->pread(disk, buffer, disk->sector_size, src_offset);
73 if((unsigned)pread_res != disk->sector_size)
74 {
75 free(buffer);
76 return;
77 }
78#if defined(HAVE_PWRITE)
79 if(pwrite(disk_dst, buffer, pread_res, src_offset)<0)
80 {
81 free(buffer);
82 return;
83 }
84#else
85 if(lseek(disk_dst, src_offset, SEEK_SET)<0)
86 {
87 free(buffer);
88 return;
89 }
90 if(write(disk_dst, buffer, pread_res) != pread_res)
91 {
92 free(buffer);
93 return;
94 }
95#endif
96 }
97 free(buffer);
98}
99
100int disk_image(disk_t *disk, const partition_t *partition, const char *image_dd)
101{

Callers 1

disk_imageFunction · 0.85

Calls 1

MALLOCFunction · 0.85

Tested by

no test coverage detected