Пример #1
0
 static inline void setCheck(size32_t size, void * _ptr)
 {
     byte * ptr = static_cast<byte *>(_ptr);
     size32_t capacity = RoxieRowCapacity(ptr);
     memset(ptr+size, 0, capacity - size - extraSize);
     unsigned short * check = reinterpret_cast<unsigned short *>(ptr + capacity - extraSize);
     *check = chksum16(ptr, capacity-extraSize);
 }
Пример #2
0
 static inline void setCheck(size32_t size, void * _ptr)
 {
     byte * ptr = static_cast<byte *>(_ptr);
     memsize_t capacity = RoxieRowCapacity(ptr);
     if (capacity < size + extraSize)
         throw MakeStringException(0, "Data was written past the end of the row - allocated %d, written %d", (size32_t)(capacity - extraSize), size);
     memset(ptr+size, 0, capacity - size - extraSize);
     unsigned short * check = reinterpret_cast<unsigned short *>(ptr + capacity - extraSize);
     *check = chksum16(ptr, capacity-extraSize);
 }
Пример #3
0
 static inline bool isValid(const void * _ptr)
 {
     if (RoxieRowHasDestructor(_ptr))
     {
         const byte * ptr = static_cast<const byte *>(_ptr);
         memsize_t capacity = RoxieRowCapacity(ptr);
         const unsigned short * check = reinterpret_cast<const unsigned short *>(ptr + capacity - extraSize);
         return chksum16(ptr, capacity-extraSize) == *check;
     }
     return true;
 }
Пример #4
0
/* write data to sector */
static imgtoolerr_t vzdos_write_sector_data(imgtool_image *img, int track, int sector, UINT8 *data)
{
	int ret, data_start;
	UINT8 buffer[DATA_SIZE + 4]; /* data + checksum */

	ret = vzdos_get_data_start(img, track, sector, &data_start);
	if (ret) return (imgtoolerr_t)ret;

	memcpy(buffer, data, DATA_SIZE + 2);
	place_integer_le(buffer, DATA_SIZE + 2, 2, chksum16(data, DATA_SIZE + 2));

	ret = floppy_write_sector(imgtool_floppy(img), 0, track, sector_order[sector], data_start, buffer, sizeof(buffer), 0);	/* TODO: pass ddam argument from imgtool */
	if (ret) return (imgtoolerr_t)ret;

	return IMGTOOLERR_SUCCESS;
}
Пример #5
0
/* return the actual data of a sector */
static imgtoolerr_t vzdos_read_sector_data(imgtool_image *img, int track, int sector, UINT8 *data)
{
	int ret, data_start;
	UINT8 buffer[DATA_SIZE + 4]; /* data + checksum */

	ret = vzdos_get_data_start(img, track, sector, &data_start);
	if (ret) return (imgtoolerr_t)ret;

	ret = floppy_read_sector(imgtool_floppy(img), 0, track, sector_order[sector], data_start, &buffer, sizeof(buffer));
	if (ret) return (imgtoolerr_t)ret;

	/* verify sector checksums */
	if (pick_integer_le(buffer, DATA_SIZE + 2, 2) != chksum16(buffer, DATA_SIZE + 2))
		return IMGTOOLERR_CORRUPTFILE;

	memcpy(data, &buffer, DATA_SIZE + 2);

	return IMGTOOLERR_SUCCESS;
}