From: bluebrother Date: Sun, 29 Jun 2008 09:50:20 +0000 (+0000) Subject: Add w32 mountpoint resolving based on disc number correctly this time. X-Git-Url: https://repo.or.cz/w/Rockbox.git/commitdiff_plain/ea59e6c8390ee70dd47e4e7efc47e1a126ce1fa7 Add w32 mountpoint resolving based on disc number correctly this time. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17873 a1c6a512-1295-4272-9138-f99709370657 --- diff --git a/rbutil/rbutilqt/autodetection.cpp b/rbutil/rbutilqt/autodetection.cpp index 431cb0251..7399907f1 100644 --- a/rbutil/rbutilqt/autodetection.cpp +++ b/rbutil/rbutilqt/autodetection.cpp @@ -39,8 +39,10 @@ #include #include #include +#include #endif #include "detect.h" +#include "utils.h" Autodetection::Autodetection(QObject* parent): QObject(parent) { @@ -157,14 +159,12 @@ bool Autodetection::detect() if(n == 1) { qDebug() << "Ipod found:" << ipod.modelstr << "at" << ipod.diskname; m_device = ipod.targetname; -#if !defined(Q_OS_WIN32) m_mountpoint = resolveMountPoint(ipod.diskname); -#endif -#if defined(Q_OS_WIN32) - m_mountpoint = getMountpointByDevice(ipod.diskname); -#endif return true; } + else { + qDebug() << "ipodpatcher: no Ipod found." << n; + } //try sansapatcher struct sansa_t sansa; @@ -172,14 +172,12 @@ bool Autodetection::detect() if(n == 1) { qDebug() << "Sansa found:" << sansa.targetname << "at" << sansa.diskname; m_device = QString("sansa%1").arg(sansa.targetname); -#if !defined(Q_OS_WIN32) m_mountpoint = resolveMountPoint(sansa.diskname); -#endif -#if defined(Q_OS_WIN32) - m_mountpoint = getMountpointByDevice(sansa.diskname); -#endif return true; } + else { + qDebug() << "sansapatcher: no Sansa found." << n; + } if(m_mountpoint.isEmpty() && m_device.isEmpty() && m_errdev.isEmpty() && m_incompat.isEmpty()) return false; @@ -256,8 +254,43 @@ QString Autodetection::resolveMountPoint(QString device) mntinf++; } #endif - return QString(""); +#if defined(Q_OS_WIN32) + QString result; + unsigned int driveno = device.replace(QRegExp("^.*([0-9]+)"), "\\1").toInt(); + + for(int letter = 'A'; letter <= 'Z'; letter++) { + DWORD written; + HANDLE h; + TCHAR uncpath[MAX_PATH]; + UCHAR buffer[0x400]; + PVOLUME_DISK_EXTENTS extents = (PVOLUME_DISK_EXTENTS)buffer; + + _stprintf(uncpath, _TEXT("\\\\.\\%c:"), letter); + h = CreateFile(uncpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, 0, NULL); + if(h == INVALID_HANDLE_VALUE) { + //qDebug() << "error getting extents for" << uncpath; + continue; + } + // get the extents + if(DeviceIoControl(h, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, + NULL, 0, extents, sizeof(buffer), &written, NULL)) { + for(unsigned int a = 0; a < extents->NumberOfDiskExtents; a++) { + qDebug() << "Disk:" << extents->Extents[a].DiskNumber; + if(extents->Extents[a].DiskNumber == driveno) { + result = letter; + qDebug("drive found for volume %i: %c", driveno, letter); + break; + } + } + + } + + } + return result + ":/"; +#endif + return QString(""); } diff --git a/rbutil/rbutilqt/utils.cpp b/rbutil/rbutilqt/utils.cpp index 3e3a5912b..a6a80c6ee 100644 --- a/rbutil/rbutilqt/utils.cpp +++ b/rbutil/rbutilqt/utils.cpp @@ -99,41 +99,3 @@ QString resolvePathCase(QString path) return realpath; } -#if defined(Q_OS_WIN32) -QString getMountpointByDevice(int drive) -{ - QString result; - for(int letter = 'A'; letter <= 'Z'; letter++) { - DWORD written; - HANDLE h; - TCHAR uncpath[MAX_PATH]; - UCHAR buffer[0x400]; - PVOLUME_DISK_EXTENTS extents = (PVOLUME_DISK_EXTENTS)buffer; - - _stprintf(uncpath, _TEXT("\\\\.\\%c:"), letter); - h = CreateFile(uncpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, OPEN_EXISTING, 0, NULL); - if(h == INVALID_HANDLE_VALUE) { - qDebug() << "error getting extents for" << uncpath; - continue; - } - // get the extents - if(DeviceIoControl(h, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, - NULL, 0, extents, sizeof(buffer), &written, NULL)) { - for(int a = 0; a < extents->NumberOfDiskExtents; a++) { - qDebug() << "Disk:" << extents->Extents[a].DiskNumber; - if(extents->Extents[a].DiskNumber == drive) { - result = letter; - qDebug("found: %c", letter); - break; - } - } - - } - - } - return result; - -} -#endif - diff --git a/rbutil/rbutilqt/utils.h b/rbutil/rbutilqt/utils.h index 904f5903b..19cdca92c 100644 --- a/rbutil/rbutilqt/utils.h +++ b/rbutil/rbutilqt/utils.h @@ -29,9 +29,5 @@ bool recRmdir( const QString &dirName ); QString resolvePathCase(QString path); -#if defined(Q_OS_WIN32) -QString getMountpointByDevice(int drive); -#endif - #endif