forked from len0rd/rockbox
Add W32 mountpoint resolving based on the disc number figured by ipodpatcher / sansapatcher.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17868 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
a3e63cf044
commit
1ed2e514da
3 changed files with 58 additions and 0 deletions
|
|
@ -159,6 +159,9 @@ bool Autodetection::detect()
|
||||||
m_device = ipod.targetname;
|
m_device = ipod.targetname;
|
||||||
#if !defined(Q_OS_WIN32)
|
#if !defined(Q_OS_WIN32)
|
||||||
m_mountpoint = resolveMountPoint(ipod.diskname);
|
m_mountpoint = resolveMountPoint(ipod.diskname);
|
||||||
|
#endif
|
||||||
|
#if defined(Q_OS_WIN32)
|
||||||
|
m_mountpoint = getMountpointByDevice(ipod.diskname);
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -169,7 +172,12 @@ bool Autodetection::detect()
|
||||||
if(n == 1) {
|
if(n == 1) {
|
||||||
qDebug() << "Sansa found:" << sansa.targetname << "at" << sansa.diskname;
|
qDebug() << "Sansa found:" << sansa.targetname << "at" << sansa.diskname;
|
||||||
m_device = QString("sansa%1").arg(sansa.targetname);
|
m_device = QString("sansa%1").arg(sansa.targetname);
|
||||||
|
#if !defined(Q_OS_WIN32)
|
||||||
m_mountpoint = resolveMountPoint(sansa.diskname);
|
m_mountpoint = resolveMountPoint(sansa.diskname);
|
||||||
|
#endif
|
||||||
|
#if defined(Q_OS_WIN32)
|
||||||
|
m_mountpoint = getMountpointByDevice(sansa.diskname);
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,21 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define _UNICODE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32)
|
||||||
|
#include <windows.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
#include <winioctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// recursive function to delete a dir with files
|
// recursive function to delete a dir with files
|
||||||
bool recRmdir( const QString &dirName )
|
bool recRmdir( const QString &dirName )
|
||||||
{
|
{
|
||||||
|
|
@ -90,4 +99,41 @@ QString resolvePathCase(QString path)
|
||||||
return realpath;
|
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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,5 +29,9 @@
|
||||||
bool recRmdir( const QString &dirName );
|
bool recRmdir( const QString &dirName );
|
||||||
QString resolvePathCase(QString path);
|
QString resolvePathCase(QString path);
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN32)
|
||||||
|
QString getMountpointByDevice(int drive);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue