From 4a87af237a3893f26c484488aaf5044c32d2965b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Tue, 12 Jan 2021 17:06:05 +0100 Subject: [PATCH] Change `mo_format` to upstream original --- src/disk/mo.c | 68 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/src/disk/mo.c b/src/disk/mo.c index 13715947a..bdb5d2824 100644 --- a/src/disk/mo.c +++ b/src/disk/mo.c @@ -15,14 +15,15 @@ * Miran Grca, * Fred N. van Kempen, * - * Copyright 2020 Miran Grca. + * Copyright 2020,2021 Natalia Portillo. + * Copyright 2020,2021 Miran Grca. + * Copyright 2020,2021 Fred N. van Kempen */ #include #include #include #include #include -#include #include #define HAVE_STDARG_H #include <86box/86box.h> @@ -43,7 +44,7 @@ #include #include #else -#include +#include #endif mo_drive_t mo_drives[MO_NUM]; @@ -1040,46 +1041,69 @@ mo_insert(mo_t *dev) void mo_format(mo_t *dev) { - unsigned long size; + long size; int ret; - int fd = fileno(dev->drv->f); - int64_t liSize = 0; + int fd; mo_log("MO %i: Formatting media...\n", dev->id); - if (fd == -1) { - mo_log("MO %i: Failed to get file descriptor.\n", dev->id); - return; - } - fseek(dev->drv->f, 0, SEEK_END); - size = (uint32_t) ftello64(dev->drv->f); + size = ftell(dev->drv->f); - errno = 0; - rewind(dev->drv->f); +#ifdef _WIN32 + HANDLE fh; + LARGE_INTEGER liSize; - if (errno) { + fd = _fileno(dev->drv->f); + fh = (HANDLE)_get_osfhandle(fd); + + liSize.QuadPart = 0; + + ret = (int)SetFilePointerEx(fh, liSize, NULL, FILE_BEGIN); + + if(!ret) { mo_log("MO %i: Failed seek to start of image file\n", dev->id); return; } - ret = ftruncate(fd, 0); - if (ret == -1) { + ret = (int)SetEndOfFile(fh); + + if(!ret) { mo_log("MO %i: Failed to truncate image file to 0\n", dev->id); return; } - liSize = size; - ret = fseek(dev->drv->f, 0, SEEK_END); - if (ret == -1) { + liSize.QuadPart = size; + ret = (int)SetFilePointerEx(fh, liSize, NULL, FILE_BEGIN); + + if(!ret) { mo_log("MO %i: Failed seek to end of image file\n", dev->id); return; } - ret = ftruncate(fd, liSize); - if (ret == -1) { + + ret = (int)SetEndOfFile(fh); + + if(!ret) { mo_log("MO %i: Failed to truncate image file to %llu\n", dev->id, size); return; } +#else + fd = fileno(dev->drv->f); + + ret = ftruncate(fd, 0); + + if(ret) { + mo_log("MO %i: Failed to truncate image file to 0\n", dev->id); + return; + } + + ret = ftruncate(fd, size); + + if(ret) { + mo_log("MO %i: Failed to truncate image file to %llu", dev->id, size); + return; + } +#endif } static int