summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/base/bootloaderinstallipod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/base/bootloaderinstallipod.cpp')
-rw-r--r--rbutil/rbutilqt/base/bootloaderinstallipod.cpp41
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
27BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent) 28BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent)
@@ -36,7 +37,8 @@ BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent)
36 37
37BootloaderInstallIpod::~BootloaderInstallIpod() 38BootloaderInstallIpod::~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
220bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) 225bool 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;