A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd

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

+17 -13
+1
utils/ipodpatcher/ipodio-posix.c
··· 355 355 int ipod_close(struct ipod_t* ipod) 356 356 { 357 357 close(ipod->dh); 358 + ipod->dh = -1; 358 359 return 0; 359 360 } 360 361
+1
utils/ipodpatcher/ipodio-win32.c
··· 155 155 { 156 156 unlock_volume(ipod->dh); 157 157 CloseHandle(ipod->dh); 158 + ipod->dh = INVALID_HANDLE_VALUE; 158 159 return 0; 159 160 } 160 161
+15 -13
utils/rbutilqt/base/bootloaderinstallipod.cpp
··· 42 42 43 43 bool BootloaderInstallIpod::install(void) 44 44 { 45 - ipodInitialize(&ipod); 46 - 47 - if(ipod.sectorbuf == nullptr) { 48 - emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR); 49 - emit done(true); 50 - return false; 51 - } 52 - 53 - // save buffer pointer before cleaning up ipod_t structure 54 - unsigned char* sb = ipod.sectorbuf; 55 - memset(&ipod, 0, sizeof(struct ipod_t)); 56 - ipod.sectorbuf = sb; 57 - 58 45 if(!ipodInitialize(&ipod)) { 59 46 emit done(true); 60 47 return false; ··· 223 210 */ 224 211 bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) 225 212 { 213 + // if the ipod was already opened make sure to close it first. 214 + #if defined(Q_OS_WIN32) 215 + if(ipod->dh != INVALID_HANDLE_VALUE) 216 + #else 217 + if(ipod->dh >= 0) 218 + #endif 219 + { 220 + ipod_close(ipod); 221 + } 222 + 223 + // save buffer pointer before cleaning up ipod_t structure 224 + unsigned char* sb = ipod->sectorbuf; 225 + memset(ipod, 0, sizeof(struct ipod_t)); 226 + ipod->sectorbuf = sb; 227 + 226 228 // initialize sector buffer. The sector buffer is part of the ipod_t 227 229 // structure, so a second instance of this class will have its own buffer. 228 230 if(ipod->sectorbuf == nullptr) {