(MESS) d64_dsk: Fixed memory leak. (nw)

This commit is contained in:
Curt Coder 2014-01-24 10:16:53 +00:00
parent a161ac3297
commit 88cb180618
2 changed files with 10 additions and 9 deletions

View File

@ -166,17 +166,16 @@ floppy_image_format_t::desc_e* d64_format::get_sector_desc(const format &f, int
return desc;
}
void d64_format::build_sector_description(const format &f, UINT8 *sectdata, desc_s *sectors, int sector_count, UINT8 *errordata) const
void d64_format::build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, offs_t error_offs, desc_s *sectors, int sector_count) const
{
int cur_offset = 0;
for(int i=0; i<sector_count; i++) {
sectors[i].data = sectdata + cur_offset;
sectors[i].data = sectdata + sect_offs;
sectors[i].size = f.sector_base_size;
sectors[i].sector_id = i;
sectors[i].sector_info = errordata[i];
sectors[i].sector_info = sectdata[error_offs];
cur_offset += sectors[i].size;
sect_offs += sectors[i].size;
error_offs++;
}
}
@ -202,7 +201,7 @@ bool d64_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
floppy_image_format_t::desc_e *desc;
desc_s sectors[40];
int track_offset = 0, error_offset = 0;
int track_offset = 0, error_offset = f.sector_count*f.sector_base_size;
UINT8 id1 = 0, id2 = 0;
get_disk_id(f, io, id1, id2);
@ -226,7 +225,7 @@ bool d64_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
desc[22].p2 = remaining_size & 7;
desc[22].p1 >>= 8-(remaining_size & 7);
build_sector_description(f, &img[track_offset], sectors, sector_count, &img[f.sector_count*f.sector_base_size + error_offset]);
build_sector_description(f, img, track_offset, error_offset, sectors, sector_count);
generate_track(desc, physical_track, head, sectors, sector_count, total_size, image);
track_offset += track_size;
@ -234,6 +233,8 @@ bool d64_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
}
}
global_free(img);
image->set_variant(f.variant);
return true;

View File

@ -65,7 +65,7 @@ protected:
virtual int get_disk_id_offset(const format &f);
void get_disk_id(const format &f, io_generic *io, UINT8 &id1, UINT8 &id2);
floppy_image_format_t::desc_e* get_sector_desc(const format &f, int &current_size, int track, int sector_count, UINT8 id1, UINT8 id2, int gap_2);
void build_sector_description(const format &f, UINT8 *sectdata, desc_s *sectors, int sector_count, UINT8 *errordata) const;
void build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, offs_t error_offs, desc_s *sectors, int sector_count) const;
void extract_sectors(floppy_image *image, const format &f, desc_s *sdesc, int track, int head);
static const format file_formats[];