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

Function file_pwrite_aux

src/hdaccess.c:1556–1592  ·  view source on GitHub ↗

@ @ requires \valid(disk_car); @ requires valid_disk(disk_car); @ requires disk_car->sector_size > 0; @ requires disk_car->offset < 0x2000000000000; @ requires 0 < count < 0x2000000000000; @ requires offset < 0x2000000000000; @ requires \valid_read((char *)buf + (0 .. count-1)); @*/

Source from the content-addressed store, hash-verified

1554 @ requires \valid_read((char *)buf + (0 .. count-1));
1555 @*/
1556static int file_pwrite_aux(disk_t *disk_car, const void *buf, const unsigned int count, const uint64_t offset)
1557{
1558 int fd=((struct info_file_struct *)disk_car->data)->handle;
1559 long int ret;
1560#if defined(HAVE_PWRITE) && !defined(__CYGWIN__)
1561 ret=pwrite(fd,buf,count,offset);
1562 if(ret<0 && errno == ENOSYS)
1563#endif
1564 {
1565#ifdef __MINGW32__
1566 if(_lseeki64(fd,offset,SEEK_SET)==-1)
1567 {
1568 log_error("file_pwrite(%d,%u,buffer,%lu(%u/%u/%u)) seek err %s\n", fd,
1569 (unsigned)(count/disk_car->sector_size),
1570 (long unsigned)(offset/disk_car->sector_size),
1571 offset2cylinder(disk_car,offset),offset2head(disk_car,offset),offset2sector(disk_car,offset),strerror(errno));
1572 return -1;
1573 }
1574#else
1575 if(lseek(fd,offset,SEEK_SET)==-1)
1576 {
1577 log_error("file_pwrite(%d,%u,buffer,%lu(%u/%u/%u)) seek err %s\n", fd,(unsigned)(count/disk_car->sector_size),(long unsigned)(offset/disk_car->sector_size),
1578 offset2cylinder(disk_car,offset),offset2head(disk_car,offset),offset2sector(disk_car,offset),strerror(errno));
1579 return -1;
1580 }
1581#endif
1582 ret=write(fd, buf, count);
1583 }
1584 disk_car->write_used=1;
1585 if(ret!=count)
1586 {
1587 log_error("file_pwrite(%d,%u,buffer,%lu(%u/%u/%u)) write err %s\n", fd,(unsigned)(count/disk_car->sector_size),(long unsigned)(offset/disk_car->sector_size),
1588 offset2cylinder(disk_car,offset),offset2head(disk_car,offset),offset2sector(disk_car,offset),(ret<0?strerror(errno):"File truncated"));
1589 return -1;
1590 }
1591 return ret;
1592}
1593
1594/*@
1595 @ requires \valid(disk_car);

Callers

nothing calls this directly

Calls 3

offset2cylinderFunction · 0.85
offset2headFunction · 0.85
offset2sectorFunction · 0.85

Tested by

no test coverage detected