Fixed the second batch of problems

This commit is contained in:
OBattler
2020-01-15 03:48:33 +01:00
parent fab0a368f1
commit af023ff5dd
14 changed files with 123 additions and 64 deletions

View File

@@ -3161,7 +3161,7 @@ d86f_writeback(int drive)
{
d86f_t *dev = d86f[drive];
uint8_t header[32];
int header_size;
int header_size, size;
#ifdef D86F_COMPRESS
uint32_t len;
int ret = 0;
@@ -3172,11 +3172,16 @@ d86f_writeback(int drive)
if (! dev->f) return;
/* First write the track offsets table. */
fseek(dev->f, 0, SEEK_SET);
fread(header, 1, header_size, dev->f);
if (fseek(dev->f, 0, SEEK_SET) == -1)
fatal("86F write_back(): Error seeking to the beginning of the file\n");
if (fread(header, 1, header_size, dev->f) != header_size)
fatal("86F write_back(): Error reading header size\n");
fseek(dev->f, 8, SEEK_SET);
fwrite(dev->track_offset, 1, d86f_get_track_table_size(drive), dev->f);
if (fseek(dev->f, 8, SEEK_SET) == -1)
fatal("86F write_back(): Error seeking\n");
size = d86f_get_track_table_size(drive);
if (fwrite(dev->track_offset, 1, size, dev->f) != size)
fatal("86F write_back(): Error writing data\n");
d86f_write_tracks(drive, &dev->f, NULL);
@@ -3586,7 +3591,9 @@ d86f_load(int drive, wchar_t *fn)
return;
}
fread(&(dev->version), 2, 1, dev->f);
if (fread(&(dev->version), 1, 2, dev->f) != 2)
fatal("d86f_load(): Error reading format version\n");
if (dev->version != D86FVER) {
/* File is not of a recognized format version, abort. */
if (dev->version == 0x0063) {

View File

@@ -638,8 +638,10 @@ imd_load(int drive, wchar_t *fn)
writeprot[drive] = 1;
fwriteprot[drive] = writeprot[drive];
fseek(dev->f, 0, SEEK_SET);
fread(&magic, 1, 4, dev->f);
if (fseek(dev->f, 0, SEEK_SET) == -1)
fatal("imd_load(): Error seeking to the beginning of the file\n");
if (fread(&magic, 1, 4, dev->f) != 4)
fatal("imd_load(): Error reading the magic number\n");
if (magic != 0x20444D49) {
imd_log("IMD: Not a valid ImageDisk image\n");
fclose(dev->f);
@@ -649,11 +651,14 @@ imd_load(int drive, wchar_t *fn)
} else
imd_log("IMD: Valid ImageDisk image\n");
fseek(dev->f, 0, SEEK_END);
if (fseek(dev->f, 0, SEEK_END) == -1)
fatal("imd_load(): Error seeking to the end of the file\n");
fsize = ftell(dev->f);
fseek(dev->f, 0, SEEK_SET);
if (fseek(dev->f, 0, SEEK_SET) == -1)
fatal("imd_load(): Error seeking to the beginning of the file again\n");
dev->buffer = malloc(fsize);
fread(dev->buffer, 1, fsize, dev->f);
if (fread(dev->buffer, 1, fsize, dev->f) != fsize)
fatal("imd_load(): Error reading data\n");
buffer = dev->buffer;
buffer2 = strchr(buffer, 0x1A);

View File

@@ -401,7 +401,7 @@ mfm_load(int drive, wchar_t *fn)
{
mfm_t *dev;
double dbr;
int i;
int i, size;
writeprot[drive] = fwriteprot[drive] = 1;
@@ -419,16 +419,22 @@ mfm_load(int drive, wchar_t *fn)
d86f_unregister(drive);
/* Read the header. */
fread(&dev->hdr, 1, sizeof(mfm_header_t), dev->f);
size = sizeof(mfm_header_t);
if (fread(&dev->hdr, 1, size, dev->f) != size)
fatal("mfm_load(): Error reading header\n");
/* Calculate tracks * sides, allocate the tracks array, and read it. */
dev->total_tracks = dev->hdr.tracks_no * dev->hdr.sides_no;
if (dev->hdr.if_type & 0x80) {
dev->adv_tracks = (mfm_adv_track_t *) malloc(dev->total_tracks * sizeof(mfm_adv_track_t));
fread(dev->adv_tracks, 1, dev->total_tracks * sizeof(mfm_adv_track_t), dev->f);
size = dev->total_tracks * sizeof(mfm_adv_track_t);
if (fread(dev->adv_tracks, 1, size, dev->f) != size)
fatal("mfm_load(): Error reading advanced tracks\n");
} else {
dev->tracks = (mfm_track_t *) malloc(dev->total_tracks * sizeof(mfm_track_t));
fread(dev->tracks, 1, dev->total_tracks * sizeof(mfm_track_t), dev->f);
size = dev->total_tracks * sizeof(mfm_track_t);
if (fread(dev->tracks, 1, size, dev->f) != size)
fatal("mfm_load(): Error reading tracks\n");
}
/* The chances of finding a HxC MFM image of a single-sided thin track

View File

@@ -262,7 +262,8 @@ state_data_read(td0dsk_t *state, uint8_t *buf, uint16_t size)
size = (image_size - state->fdd_file_offset) & 0xffff;
if (fseek(state->fdd_file, state->fdd_file_offset, SEEK_SET) == -1)
fatal("TD0: Failed to seek in state_data_read()\n");
fread(buf, 1, size, state->fdd_file);
if (fread(buf, 1, size, state->fdd_file) != size)
fatal("TD0: Error reading data in state_data_read()\n");
state->fdd_file_offset += size;
return(size);

View File

@@ -2137,8 +2137,10 @@ int fdi2raw_loadtrack (FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int trac
fdi->err = 0;
fdi->track_src_len = fdi->track_offsets[track + 1] - fdi->track_offsets[track];
fseek (fdi->file, fdi->track_offsets[track], SEEK_SET);
fread (fdi->track_src_buffer, fdi->track_src_len, 1, fdi->file);
if (fseek (fdi->file, fdi->track_offsets[track], SEEK_SET) == -1)
fatal("fdi2raw_loadtrack(): Error seeking to the beginning of the file\n");
if (fread (fdi->track_src_buffer, 1, fdi->track_src_len, fdi->file) != fdi->track_src_len)
fatal("fdi2raw_loadtrack(): Error reading data\n");
memset (fdi->track_dst_buffer, 0, MAX_DST_BUFFER);
fdi->track_dst_buffer_timing[0] = 0;
@@ -2177,7 +2179,7 @@ int fdi2raw_loadtrack (FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int trac
zxx (fdi);
outlen = -1;
} else if (fdi->track_type < 0x10) {
} else if (fdi->track_type < 0x0f) {
decode_normal_track[fdi->track_type](fdi);
fix_mfm_sync (fdi);