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 int ipod_close(struct ipod_t* ipod) 356 { 357 close(ipod->dh); 358 return 0; 359 } 360
··· 355 int ipod_close(struct ipod_t* ipod) 356 { 357 close(ipod->dh); 358 + ipod->dh = -1; 359 return 0; 360 } 361
+1
utils/ipodpatcher/ipodio-win32.c
··· 155 { 156 unlock_volume(ipod->dh); 157 CloseHandle(ipod->dh); 158 return 0; 159 } 160
··· 155 { 156 unlock_volume(ipod->dh); 157 CloseHandle(ipod->dh); 158 + ipod->dh = INVALID_HANDLE_VALUE; 159 return 0; 160 } 161
+15 -13
utils/rbutilqt/base/bootloaderinstallipod.cpp
··· 42 43 bool BootloaderInstallIpod::install(void) 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 if(!ipodInitialize(&ipod)) { 59 emit done(true); 60 return false; ··· 223 */ 224 bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) 225 { 226 // initialize sector buffer. The sector buffer is part of the ipod_t 227 // structure, so a second instance of this class will have its own buffer. 228 if(ipod->sectorbuf == nullptr) {
··· 42 43 bool BootloaderInstallIpod::install(void) 44 { 45 if(!ipodInitialize(&ipod)) { 46 emit done(true); 47 return false; ··· 210 */ 211 bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) 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 + 228 // initialize sector buffer. The sector buffer is part of the ipod_t 229 // structure, so a second instance of this class will have its own buffer. 230 if(ipod->sectorbuf == nullptr) {