From cc2f36492666be11da12890b35303a63e3aced87 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Wed, 13 Apr 2022 21:31:02 +0200 Subject: rbutil: Fix ipodpatcher bootloader install on Windows. During bootloader installation ipodpatcher disk access is accidentially set up twice. This is not a problem except on Windows, which will abort with a "permission denied" error. Change-Id: I9a835ef0d49f24df741b7b2909c4bd87cb1c8341 --- utils/rbutilqt/base/bootloaderinstallipod.cpp | 28 ++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'utils/rbutilqt/base/bootloaderinstallipod.cpp') diff --git a/utils/rbutilqt/base/bootloaderinstallipod.cpp b/utils/rbutilqt/base/bootloaderinstallipod.cpp index c556ea27d3..a809b813c0 100644 --- a/utils/rbutilqt/base/bootloaderinstallipod.cpp +++ b/utils/rbutilqt/base/bootloaderinstallipod.cpp @@ -42,19 +42,6 @@ BootloaderInstallIpod::~BootloaderInstallIpod() bool BootloaderInstallIpod::install(void) { - ipodInitialize(&ipod); - - if(ipod.sectorbuf == nullptr) { - emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR); - emit done(true); - return false; - } - - // save buffer pointer before cleaning up ipod_t structure - unsigned char* sb = ipod.sectorbuf; - memset(&ipod, 0, sizeof(struct ipod_t)); - ipod.sectorbuf = sb; - if(!ipodInitialize(&ipod)) { emit done(true); return false; @@ -223,6 +210,21 @@ BootloaderInstallBase::Capabilities BootloaderInstallIpod::capabilities(void) */ bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) { + // if the ipod was already opened make sure to close it first. +#if defined(Q_OS_WIN32) + if(ipod->dh != INVALID_HANDLE_VALUE) +#else + if(ipod->dh >= 0) +#endif + { + ipod_close(ipod); + } + + // save buffer pointer before cleaning up ipod_t structure + unsigned char* sb = ipod->sectorbuf; + memset(ipod, 0, sizeof(struct ipod_t)); + ipod->sectorbuf = sb; + // initialize sector buffer. The sector buffer is part of the ipod_t // structure, so a second instance of this class will have its own buffer. if(ipod->sectorbuf == nullptr) { -- cgit v1.2.3