diff options
Diffstat (limited to 'rbutil/rbutilqt/base/bootloaderinstallipod.cpp')
-rw-r--r-- | rbutil/rbutilqt/base/bootloaderinstallipod.cpp | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp index 82c64954a6..e4a70e0cd6 100644 --- a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp +++ b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "bootloaderinstallipod.h" | 22 | #include "bootloaderinstallipod.h" |
23 | 23 | ||
24 | #include "../ipodpatcher/ipodpatcher.h" | 24 | #include "../ipodpatcher/ipodpatcher.h" |
25 | #include "autodetection.h" | ||
25 | 26 | ||
26 | 27 | ||
27 | BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent) | 28 | BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent) |
@@ -36,7 +37,8 @@ BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent) | |||
36 | 37 | ||
37 | BootloaderInstallIpod::~BootloaderInstallIpod() | 38 | BootloaderInstallIpod::~BootloaderInstallIpod() |
38 | { | 39 | { |
39 | free(ipod_sectorbuf); | 40 | if(ipod_sectorbuf) |
41 | free(ipod_sectorbuf); | ||
40 | } | 42 | } |
41 | 43 | ||
42 | 44 | ||
@@ -198,12 +200,15 @@ BootloaderInstallBase::BootloaderType BootloaderInstallIpod::installed(void) | |||
198 | qDebug() << "BootloaderInstallIpod::installed(): BootloaderUnknown"; | 200 | qDebug() << "BootloaderInstallIpod::installed(): BootloaderUnknown"; |
199 | result = BootloaderUnknown; | 201 | result = BootloaderUnknown; |
200 | } | 202 | } |
201 | else if (ipod.ipod_directory[0].entryOffset == 0) { | ||
202 | qDebug() << "BootloaderInstallIpod::installed(): BootloaderOther"; | ||
203 | result = BootloaderOther; | ||
204 | } | ||
205 | else { | 203 | else { |
206 | qDebug() << "BootloaderInstallIpod::installed(): BootloaderRockbox"; | 204 | read_directory(&ipod); |
205 | if(ipod.ipod_directory[0].entryOffset == 0) { | ||
206 | qDebug() << "BootloaderInstallIpod::installed(): BootloaderOther"; | ||
207 | result = BootloaderOther; | ||
208 | } | ||
209 | else { | ||
210 | qDebug() << "BootloaderInstallIpod::installed(): BootloaderRockbox"; | ||
211 | } | ||
207 | } | 212 | } |
208 | ipod_close(&ipod); | 213 | ipod_close(&ipod); |
209 | 214 | ||
@@ -219,20 +224,38 @@ BootloaderInstallBase::Capabilities BootloaderInstallIpod::capabilities(void) | |||
219 | 224 | ||
220 | bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) | 225 | bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) |
221 | { | 226 | { |
222 | ipod_scan(ipod); | 227 | if(!m_blfile.isEmpty()) { |
228 | #if defined(Q_OS_WIN32) | ||
229 | sprintf(ipod->diskname, "\\\\.\\PhysicalDrive%i", | ||
230 | Autodetection::resolveDevicename(m_blfile).toInt()); | ||
231 | #elif defined(Q_OS_MACX) | ||
232 | sprintf(ipod->diskname, | ||
233 | qPrintable(Autodetection::resolveDevicename(m_blfile) | ||
234 | .remove(QRegExp("s[0-9]+$")))); | ||
235 | #else | ||
236 | sprintf(ipod->diskname, | ||
237 | qPrintable(Autodetection::resolveDevicename(m_blfile) | ||
238 | .remove(QRegExp("[0-9]+$")))); | ||
239 | #endif | ||
240 | qDebug() << "ipodpatcher: overriding scan, using" << ipod->diskname; | ||
241 | } | ||
242 | else { | ||
243 | ipod_scan(ipod); | ||
244 | } | ||
223 | if(ipod_open(ipod, 0) < 0) { | 245 | if(ipod_open(ipod, 0) < 0) { |
224 | emit logItem(tr("Could not open Ipod"), LOGERROR); | 246 | emit logItem(tr("Could not open Ipod"), LOGERROR); |
225 | return false; | 247 | return false; |
226 | } | 248 | } |
227 | 249 | ||
228 | if(read_partinfo(ipod, 0) < 0) { | 250 | if(read_partinfo(ipod, 0) < 0) { |
229 | emit logItem(tr("Could not read partition table"), LOGERROR); | 251 | emit logItem(tr("Error reading partition table - possibly not an Ipod"), LOGERROR); |
252 | ipod_close(ipod); | ||
230 | return false; | 253 | return false; |
231 | } | 254 | } |
232 | 255 | ||
233 | if(ipod->pinfo[0].start == 0) { | 256 | if(ipod->pinfo[0].start == 0) { |
234 | emit logItem(tr("No firmware partition on disk"), LOGERROR); | 257 | emit logItem(tr("No firmware partition on disk"), LOGERROR); |
235 | 258 | ipod_close(ipod); | |
236 | return false; | 259 | return false; |
237 | } | 260 | } |
238 | return true; | 261 | return true; |