ZIP/MO: Temporary fix for uninitialized IDE channel crashes

This commit is contained in:
RichardG867
2023-11-25 22:54:07 -03:00
parent 8497e33559
commit 3053f15efd
2 changed files with 14 additions and 4 deletions

View File

@@ -343,6 +343,11 @@ mo_load(mo_t *dev, char *fn)
uint32_t size = 0; uint32_t size = 0;
unsigned int found = 0; unsigned int found = 0;
if (!dev->drv) {
mo_eject(dev->id);
return 0;
}
is_mdi = image_is_mdi(fn); is_mdi = image_is_mdi(fn);
dev->drv->fp = plat_fopen(fn, dev->drv->read_only ? "rb" : "rb+"); dev->drv->fp = plat_fopen(fn, dev->drv->read_only ? "rb" : "rb+");
@@ -403,7 +408,7 @@ mo_disk_reload(mo_t *dev)
void void
mo_disk_unload(mo_t *dev) mo_disk_unload(mo_t *dev)
{ {
if (dev->drv->fp) { if (dev->drv && dev->drv->fp) {
fclose(dev->drv->fp); fclose(dev->drv->fp);
dev->drv->fp = NULL; dev->drv->fp = NULL;
} }
@@ -412,7 +417,7 @@ mo_disk_unload(mo_t *dev)
void void
mo_disk_close(mo_t *dev) mo_disk_close(mo_t *dev)
{ {
if (dev->drv->fp) { if (dev->drv && dev->drv->fp) {
mo_disk_unload(dev); mo_disk_unload(dev);
memcpy(dev->drv->prev_image_path, dev->drv->image_path, sizeof(dev->drv->prev_image_path)); memcpy(dev->drv->prev_image_path, dev->drv->image_path, sizeof(dev->drv->prev_image_path));

View File

@@ -485,6 +485,11 @@ zip_load(zip_t *dev, char *fn)
{ {
int size = 0; int size = 0;
if (!dev->drv) {
zip_eject(dev->id);
return 0;
}
dev->drv->fp = plat_fopen(fn, dev->drv->read_only ? "rb" : "rb+"); dev->drv->fp = plat_fopen(fn, dev->drv->read_only ? "rb" : "rb+");
if (!dev->drv->fp) { if (!dev->drv->fp) {
if (!dev->drv->read_only) { if (!dev->drv->read_only) {
@@ -548,7 +553,7 @@ zip_disk_reload(zip_t *dev)
void void
zip_disk_unload(zip_t *dev) zip_disk_unload(zip_t *dev)
{ {
if (dev->drv->fp) { if (dev->drv && dev->drv->fp) {
fclose(dev->drv->fp); fclose(dev->drv->fp);
dev->drv->fp = NULL; dev->drv->fp = NULL;
} }
@@ -557,7 +562,7 @@ zip_disk_unload(zip_t *dev)
void void
zip_disk_close(zip_t *dev) zip_disk_close(zip_t *dev)
{ {
if (dev->drv->fp) { if (dev->drv && dev->drv->fp) {
zip_disk_unload(dev); zip_disk_unload(dev);
memcpy(dev->drv->prev_image_path, dev->drv->image_path, sizeof(dev->drv->prev_image_path)); memcpy(dev->drv->prev_image_path, dev->drv->image_path, sizeof(dev->drv->prev_image_path));