formats/flopimg.cpp: Remove legacy pool allocator usage. (#8216)

This commit is contained in:
Aaron Giles 2021-06-23 07:28:40 -07:00 committed by GitHub
parent b0628a92ec
commit cbef832487
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,7 +13,6 @@
#include "osdcore.h" #include "osdcore.h"
#include "ioprocs.h" #include "ioprocs.h"
#include "pool.h"
#include <cassert> #include <cassert>
#include <cctype> #include <cctype>
@ -31,22 +30,21 @@ using util::BIT;
struct floppy_image_legacy struct floppy_image_legacy
{ {
struct io_generic io; struct io_generic io = { 0 };
const struct FloppyFormat *floppy_option; const struct FloppyFormat *floppy_option = nullptr;
struct FloppyCallbacks format; struct FloppyCallbacks format = { 0 };
/* loaded track stuff */ /* loaded track stuff */
int loaded_track_head; int loaded_track_head = 0;
int loaded_track_index; int loaded_track_index = 0;
uint32_t loaded_track_size; uint32_t loaded_track_size = 0;
void *loaded_track_data; std::unique_ptr<uint8_t[]> loaded_track_data;
uint8_t loaded_track_status; uint8_t loaded_track_status = 0;
uint8_t flags; uint8_t flags = 0;
/* tagging system */ /* tagging system */
object_pool *tags; std::unique_ptr<uint8_t[]> tag_data;
void *tag_data;
}; };
@ -82,13 +80,8 @@ static floppy_image_legacy *floppy_init(void *fp, const struct io_procs *procs,
{ {
floppy_image_legacy *floppy; floppy_image_legacy *floppy;
floppy = (floppy_image_legacy *)malloc(sizeof(floppy_image_legacy)); floppy = new floppy_image_legacy;
if (!floppy)
return nullptr;
memset(floppy, 0, sizeof(*floppy));
floppy->tags = pool_alloc_lib(nullptr);
floppy->tag_data = nullptr;
floppy->io.file = fp; floppy->io.file = fp;
floppy->io.procs = procs; floppy->io.procs = procs;
floppy->io.filler = 0xFF; floppy->io.filler = 0xFF;
@ -295,11 +288,8 @@ static void floppy_close_internal(floppy_image_legacy *floppy, bool close_file)
floppy->floppy_option->destruct(floppy, floppy->floppy_option); floppy->floppy_option->destruct(floppy, floppy->floppy_option);
if (close_file) if (close_file)
io_generic_close(&floppy->io); io_generic_close(&floppy->io);
if (floppy->loaded_track_data)
free(floppy->loaded_track_data);
pool_free_lib(floppy->tags);
free(floppy); delete floppy;
} }
} }
@ -327,15 +317,15 @@ struct FloppyCallbacks *floppy_callbacks(floppy_image_legacy *floppy)
void *floppy_tag(floppy_image_legacy *floppy) void *floppy_tag(floppy_image_legacy *floppy)
{ {
assert(floppy); assert(floppy);
return floppy->tag_data; return floppy->tag_data.get();
} }
void *floppy_create_tag(floppy_image_legacy *floppy, size_t tagsize) void *floppy_create_tag(floppy_image_legacy *floppy, size_t tagsize)
{ {
floppy->tag_data = pool_malloc_lib(floppy->tags,tagsize); floppy->tag_data = std::make_unique<uint8_t[]>(tagsize);
return floppy->tag_data; return floppy->tag_data.get();
} }
@ -779,7 +769,6 @@ uint8_t floppy_random_byte(floppy_image_legacy *floppy)
floperr_t floppy_load_track(floppy_image_legacy *floppy, int head, int track, int dirtify, void **track_data, size_t *track_length) floperr_t floppy_load_track(floppy_image_legacy *floppy, int head, int track, int dirtify, void **track_data, size_t *track_length)
{ {
floperr_t err; floperr_t err;
void *new_loaded_track_data;
uint32_t track_size; uint32_t track_size;
/* have we already loaded this track? */ /* have we already loaded this track? */
@ -791,20 +780,12 @@ floperr_t floppy_load_track(floppy_image_legacy *floppy, int head, int track, in
track_size = floppy_callbacks(floppy)->get_track_size(floppy, head, track); track_size = floppy_callbacks(floppy)->get_track_size(floppy, head, track);
if (floppy->loaded_track_data) free(floppy->loaded_track_data); floppy->loaded_track_data = std::make_unique<uint8_t[]>(track_size);
new_loaded_track_data = malloc(track_size);
if (!new_loaded_track_data)
{
err = FLOPPY_ERROR_OUTOFMEMORY;
goto error;
}
floppy->loaded_track_data = new_loaded_track_data;
floppy->loaded_track_size = track_size; floppy->loaded_track_size = track_size;
floppy->loaded_track_head = head; floppy->loaded_track_head = head;
floppy->loaded_track_index = track; floppy->loaded_track_index = track;
err = floppy_callbacks(floppy)->read_track(floppy, floppy->loaded_track_head, floppy->loaded_track_index, 0, floppy->loaded_track_data, floppy->loaded_track_size); err = floppy_callbacks(floppy)->read_track(floppy, floppy->loaded_track_head, floppy->loaded_track_index, 0, floppy->loaded_track_data.get(), floppy->loaded_track_size);
if (err) if (err)
goto error; goto error;
@ -814,7 +795,7 @@ floperr_t floppy_load_track(floppy_image_legacy *floppy, int head, int track, in
floppy->loaded_track_status |= (dirtify ? TRACK_DIRTY : 0); floppy->loaded_track_status |= (dirtify ? TRACK_DIRTY : 0);
if (track_data) if (track_data)
*track_data = floppy->loaded_track_data; *track_data = floppy->loaded_track_data.get();
if (track_length) if (track_length)
*track_length = floppy->loaded_track_size; *track_length = floppy->loaded_track_size;
return FLOPPY_ERROR_SUCCESS; return FLOPPY_ERROR_SUCCESS;
@ -834,7 +815,7 @@ static floperr_t floppy_track_unload(floppy_image_legacy *floppy)
int err; int err;
if (floppy->loaded_track_status & TRACK_DIRTY) if (floppy->loaded_track_status & TRACK_DIRTY)
{ {
err = floppy_callbacks(floppy)->write_track(floppy, floppy->loaded_track_head, floppy->loaded_track_index, 0, floppy->loaded_track_data, floppy->loaded_track_size); err = floppy_callbacks(floppy)->write_track(floppy, floppy->loaded_track_head, floppy->loaded_track_index, 0, floppy->loaded_track_data.get(), floppy->loaded_track_size);
if (err) if (err)
return (floperr_t)err; return (floperr_t)err;
} }