More MO fixes.

This commit is contained in:
OBattler
2020-07-19 06:18:38 +02:00
parent 5aec4ef147
commit 9350ee01a5
4 changed files with 32 additions and 6 deletions

View File

@@ -326,12 +326,31 @@ mo_load_abort(mo_t *dev)
}
int
image_is_mdi(const wchar_t *s)
{
int len;
wchar_t ext[5] = { 0, 0, 0, 0, 0 };
char *ws = (char *) s;
len = wcslen(s);
if ((len < 4) || (s[0] == L'.'))
return 0;
memcpy(ext, ws + ((len - 4) << 1), 8);
if (! wcscasecmp(ext, L".MDI"))
return 1;
else
return 0;
}
int
mo_load(mo_t *dev, wchar_t *fn)
{
int size = 0;
int is_mdi, size = 0;
unsigned int i, found = 0;
is_mdi = image_is_mdi(fn);
dev->drv->f = plat_fopen(fn, dev->drv->read_only ? L"rb" : L"rb+");
if (!dev->drv->f) {
if (!dev->drv->read_only) {
@@ -347,6 +366,12 @@ mo_load(mo_t *dev, wchar_t *fn)
fseek(dev->drv->f, 0, SEEK_END);
size = ftell(dev->drv->f);
if (is_mdi) {
/* This is a MDI image. */
size -= 0x1000;
dev->drv->base = 0x1000;
}
for (i = 0; i < KNOWN_MO_TYPES; i++) {
if (size == mo_types[i].disk_size) {
found = 1;
@@ -356,9 +381,8 @@ mo_load(mo_t *dev, wchar_t *fn)
}
}
if (!found) {
if (!found)
return mo_load_abort(dev);
}
if (fseek(dev->drv->f, dev->drv->base, SEEK_SET) == -1)
fatal("mo_load(): Error seeking to the beginning of the file\n");