From 34e60dde601e509ad2528e3078229bb85de693c9 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Tue, 27 Apr 2010 21:43:14 +0000 Subject: Handle device name resolving failures. Improve tracing of device name resolving. Explicitly fail if resolving the device name from the mountpoint failed during ipod / sansa bootloader installation. Fixes bootloader installation trying to use an empty device name in some cases which can happen if the mountpoint to get resolved uses an incompatible file system. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25743 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/base/autodetection.cpp | 3 ++- rbutil/rbutilqt/base/bootloaderinstallipod.cpp | 14 ++++++++------ rbutil/rbutilqt/base/bootloaderinstallsansa.cpp | 12 ++++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/rbutil/rbutilqt/base/autodetection.cpp b/rbutil/rbutilqt/base/autodetection.cpp index ab2b1bd..695cb6a 100644 --- a/rbutil/rbutilqt/base/autodetection.cpp +++ b/rbutil/rbutilqt/base/autodetection.cpp @@ -339,13 +339,14 @@ QString Autodetection::resolveMountPoint(QString device) for(letter = 'A'; letter <= 'Z'; letter++) { if(resolveDevicename(QString(letter)).toUInt() == driveno) { result = letter; + qDebug() << "[Autodetect] resolved mountpoint is:" << result; break; } } - qDebug() << "[Autodetect] resolved mountpoint is:" << result; if(!result.isEmpty()) return result + ":/"; #endif + qDebug() << "[Autodetect] resolving mountpoint failed!"; return QString(""); } diff --git a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp index 55fd3fc..e784ee9 100644 --- a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp +++ b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp @@ -226,17 +226,19 @@ BootloaderInstallBase::Capabilities BootloaderInstallIpod::capabilities(void) bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod) { if(!m_blfile.isEmpty()) { + QString devicename = Autodetection::resolveDevicename(m_blfile); + if(devicename.isEmpty()) { + emit logItem(tr("Error: could not retrieve device name"), LOGERROR); + return false; + } #if defined(Q_OS_WIN32) - sprintf(ipod->diskname, "\\\\.\\PhysicalDrive%i", - Autodetection::resolveDevicename(m_blfile).toInt()); + sprintf(ipod->diskname, "\\\\.\\PhysicalDrive%i", diskname.toInt()); #elif defined(Q_OS_MACX) sprintf(ipod->diskname, "%s", - qPrintable(Autodetection::resolveDevicename(m_blfile) - .remove(QRegExp("s[0-9]+$")))); + qPrintable(devicename.remove(QRegExp("s[0-9]+$")))); #else sprintf(ipod->diskname, "%s", - qPrintable(Autodetection::resolveDevicename(m_blfile) - .remove(QRegExp("[0-9]+$")))); + qPrintable(devicename.remove(QRegExp("[0-9]+$")))); #endif qDebug() << "[BootloaderInstallIpod] ipodpatcher: overriding scan, using" << ipod->diskname; diff --git a/rbutil/rbutilqt/base/bootloaderinstallsansa.cpp b/rbutil/rbutilqt/base/bootloaderinstallsansa.cpp index 48bd005..0dc94c5 100644 --- a/rbutil/rbutilqt/base/bootloaderinstallsansa.cpp +++ b/rbutil/rbutilqt/base/bootloaderinstallsansa.cpp @@ -242,15 +242,19 @@ BootloaderInstallBase::BootloaderType BootloaderInstallSansa::installed(void) bool BootloaderInstallSansa::sansaInitialize(struct sansa_t *sansa) { if(!m_blfile.isEmpty()) { + QString devicename = Autodetection::resolveDevicename(m_blfile); + if(devicename.isEmpty()) { + emit logItem(tr("Error: could not retrieve device name"), LOGERROR); + return false; + } #if defined(Q_OS_WIN32) - sprintf(sansa->diskname, "\\\\.\\PhysicalDrive%i", - Autodetection::resolveDevicename(m_blfile).toInt()); + sprintf(sansa->diskname, "\\\\.\\PhysicalDrive%i", devicename.toInt()); #elif defined(Q_OS_MACX) sprintf(sansa->diskname, - qPrintable(Autodetection::resolveDevicename(m_blfile).remove(QRegExp("s[0-9]+$")))); + qPrintable(devicename.remove(QRegExp("s[0-9]+$")))); #else sprintf(sansa->diskname, - qPrintable(Autodetection::resolveDevicename(m_blfile).remove(QRegExp("[0-9]+$")))); + qPrintable(devicename.remove(QRegExp("[0-9]+$")))); #endif qDebug() << "[BootloaderInstallSansa] sansapatcher: overriding scan, using" << sansa->diskname; -- cgit v1.1