summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/rbutilqt/base/bootloaderinstallipod.cpp5
-rw-r--r--utils/rbutilqt/base/bootloaderinstallsansa.cpp40
-rw-r--r--utils/sansapatcher/sansaio-posix.c1
-rw-r--r--utils/sansapatcher/sansaio-win32.c1
4 files changed, 27 insertions, 20 deletions
diff --git a/utils/rbutilqt/base/bootloaderinstallipod.cpp b/utils/rbutilqt/base/bootloaderinstallipod.cpp
index a809b813c0..1bddaea6d5 100644
--- a/utils/rbutilqt/base/bootloaderinstallipod.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallipod.cpp
@@ -29,6 +29,11 @@ BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent)
29 : BootloaderInstallBase(parent) 29 : BootloaderInstallBase(parent)
30{ 30{
31 ipod.sectorbuf = nullptr; 31 ipod.sectorbuf = nullptr;
32#if defined(Q_OS_WIN32)
33 ipod.dh = INVALID_HANDLE_VALUE;
34#else
35 ipod.dh = -1;
36#endif
32} 37}
33 38
34 39
diff --git a/utils/rbutilqt/base/bootloaderinstallsansa.cpp b/utils/rbutilqt/base/bootloaderinstallsansa.cpp
index f6e345c7e2..b8e307cf2c 100644
--- a/utils/rbutilqt/base/bootloaderinstallsansa.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallsansa.cpp
@@ -28,6 +28,11 @@ BootloaderInstallSansa::BootloaderInstallSansa(QObject *parent)
28 : BootloaderInstallBase(parent) 28 : BootloaderInstallBase(parent)
29{ 29{
30 sansa.sectorbuf = nullptr; 30 sansa.sectorbuf = nullptr;
31#if defined(Q_OS_WIN32)
32 sansa.dh = INVALID_HANDLE_VALUE;
33#else
34 sansa.dh = -1;
35#endif
31} 36}
32 37
33 38
@@ -51,21 +56,6 @@ bool BootloaderInstallSansa::install(void)
51 emit done(true); 56 emit done(true);
52 } 57 }
53 58
54 emit logItem(tr("Searching for Sansa"), LOGINFO);
55
56 int n = sansa_scan(&sansa);
57 if(n == -1) {
58 emit logItem(tr("Permission for disc access denied!\n"
59 "This is required to install the bootloader"),
60 LOGERROR);
61 emit done(true);
62 return false;
63 }
64 if(n == 0) {
65 emit logItem(tr("No Sansa detected!"), LOGERROR);
66 emit done(true);
67 return false;
68 }
69 if(sansa.hasoldbootloader) { 59 if(sansa.hasoldbootloader) {
70 emit logItem(tr("OLD ROCKBOX INSTALLATION DETECTED, ABORTING.\n" 60 emit logItem(tr("OLD ROCKBOX INSTALLATION DETECTED, ABORTING.\n"
71 "You must reinstall the original Sansa firmware before running\n" 61 "You must reinstall the original Sansa firmware before running\n"
@@ -92,10 +82,6 @@ void BootloaderInstallSansa::installStage2(void)
92 82
93 emit logItem(tr("Installing Rockbox bootloader"), LOGINFO); 83 emit logItem(tr("Installing Rockbox bootloader"), LOGINFO);
94 QCoreApplication::processEvents(); 84 QCoreApplication::processEvents();
95 if(!sansaInitialize(&sansa)) {
96 emit done(true);
97 return;
98 }
99 85
100 if(sansa_reopen_rw(&sansa) < 0) { 86 if(sansa_reopen_rw(&sansa) < 0) {
101 emit logItem(tr("Could not open Sansa in R/W mode"), LOGERROR); 87 emit logItem(tr("Could not open Sansa in R/W mode"), LOGERROR);
@@ -232,7 +218,21 @@ BootloaderInstallBase::BootloaderType BootloaderInstallSansa::installed(void)
232 218
233bool BootloaderInstallSansa::sansaInitialize(struct sansa_t *sansa) 219bool BootloaderInstallSansa::sansaInitialize(struct sansa_t *sansa)
234{ 220{
235 // initialize sector buffer. The sector buffer is part of the sansa_t 221 // if the ipod was already opened make sure to close it first.
222#if defined(Q_OS_WIN32)
223 if(sansa->dh != INVALID_HANDLE_VALUE)
224#else
225 if(sansa->dh >= 0)
226#endif
227 {
228 sansa_close(sansa);
229 }
230 // save buffer pointer before cleaning up ipod_t structure
231 unsigned char* sb = sansa->sectorbuf;
232 memset(sansa, 0, sizeof(struct sansa_t));
233 sansa->sectorbuf = sb;
234
235 // initialize sector buffer. The sector buffer is part of the ipod_t
236 // structure, so a second instance of this class will have its own buffer. 236 // structure, so a second instance of this class will have its own buffer.
237 if(sansa->sectorbuf == nullptr) { 237 if(sansa->sectorbuf == nullptr) {
238 sansa_alloc_buffer(sansa, BUFFER_SIZE); 238 sansa_alloc_buffer(sansa, BUFFER_SIZE);
diff --git a/utils/sansapatcher/sansaio-posix.c b/utils/sansapatcher/sansaio-posix.c
index 44c4dcc95c..5625ec35a4 100644
--- a/utils/sansapatcher/sansaio-posix.c
+++ b/utils/sansapatcher/sansaio-posix.c
@@ -110,6 +110,7 @@ int sansa_reopen_rw(struct sansa_t* sansa)
110int sansa_close(struct sansa_t* sansa) 110int sansa_close(struct sansa_t* sansa)
111{ 111{
112 close(sansa->dh); 112 close(sansa->dh);
113 sansa->dh = -1;
113 return 0; 114 return 0;
114} 115}
115 116
diff --git a/utils/sansapatcher/sansaio-win32.c b/utils/sansapatcher/sansaio-win32.c
index ee6a8cd93d..be250136f9 100644
--- a/utils/sansapatcher/sansaio-win32.c
+++ b/utils/sansapatcher/sansaio-win32.c
@@ -147,6 +147,7 @@ int sansa_close(struct sansa_t* sansa)
147{ 147{
148 unlock_volume(sansa->dh); 148 unlock_volume(sansa->dh);
149 CloseHandle(sansa->dh); 149 CloseHandle(sansa->dh);
150 sansa->dh = INVALID_HANDLE_VALUE;
150 return 0; 151 return 0;
151} 152}
152 153