diff options
-rw-r--r-- | rbutil/rbutilqt/autodetection.cpp | 8 | ||||
-rw-r--r-- | rbutil/rbutilqt/utils.cpp | 46 | ||||
-rw-r--r-- | rbutil/rbutilqt/utils.h | 4 |
3 files changed, 58 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/autodetection.cpp b/rbutil/rbutilqt/autodetection.cpp index c356cc6307..431cb0251e 100644 --- a/rbutil/rbutilqt/autodetection.cpp +++ b/rbutil/rbutilqt/autodetection.cpp | |||
@@ -160,6 +160,9 @@ bool Autodetection::detect() | |||
160 | #if !defined(Q_OS_WIN32) | 160 | #if !defined(Q_OS_WIN32) |
161 | m_mountpoint = resolveMountPoint(ipod.diskname); | 161 | m_mountpoint = resolveMountPoint(ipod.diskname); |
162 | #endif | 162 | #endif |
163 | #if defined(Q_OS_WIN32) | ||
164 | m_mountpoint = getMountpointByDevice(ipod.diskname); | ||
165 | #endif | ||
163 | return true; | 166 | return true; |
164 | } | 167 | } |
165 | 168 | ||
@@ -169,7 +172,12 @@ bool Autodetection::detect() | |||
169 | if(n == 1) { | 172 | if(n == 1) { |
170 | qDebug() << "Sansa found:" << sansa.targetname << "at" << sansa.diskname; | 173 | qDebug() << "Sansa found:" << sansa.targetname << "at" << sansa.diskname; |
171 | m_device = QString("sansa%1").arg(sansa.targetname); | 174 | m_device = QString("sansa%1").arg(sansa.targetname); |
175 | #if !defined(Q_OS_WIN32) | ||
172 | m_mountpoint = resolveMountPoint(sansa.diskname); | 176 | m_mountpoint = resolveMountPoint(sansa.diskname); |
177 | #endif | ||
178 | #if defined(Q_OS_WIN32) | ||
179 | m_mountpoint = getMountpointByDevice(sansa.diskname); | ||
180 | #endif | ||
173 | return true; | 181 | return true; |
174 | } | 182 | } |
175 | 183 | ||
diff --git a/rbutil/rbutilqt/utils.cpp b/rbutil/rbutilqt/utils.cpp index 236f28babd..3e3a5912b2 100644 --- a/rbutil/rbutilqt/utils.cpp +++ b/rbutil/rbutilqt/utils.cpp | |||
@@ -18,12 +18,21 @@ | |||
18 | ****************************************************************************/ | 18 | ****************************************************************************/ |
19 | 19 | ||
20 | #include "utils.h" | 20 | #include "utils.h" |
21 | #ifdef UNICODE | ||
22 | #define _UNICODE | ||
23 | #endif | ||
21 | 24 | ||
22 | #include <QtCore> | 25 | #include <QtCore> |
23 | #include <QDebug> | 26 | #include <QDebug> |
24 | #include <cstdlib> | 27 | #include <cstdlib> |
25 | #include <stdio.h> | 28 | #include <stdio.h> |
26 | 29 | ||
30 | #if defined(Q_OS_WIN32) | ||
31 | #include <windows.h> | ||
32 | #include <tchar.h> | ||
33 | #include <winioctl.h> | ||
34 | #endif | ||
35 | |||
27 | // recursive function to delete a dir with files | 36 | // recursive function to delete a dir with files |
28 | bool recRmdir( const QString &dirName ) | 37 | bool recRmdir( const QString &dirName ) |
29 | { | 38 | { |
@@ -90,4 +99,41 @@ QString resolvePathCase(QString path) | |||
90 | return realpath; | 99 | return realpath; |
91 | } | 100 | } |
92 | 101 | ||
102 | #if defined(Q_OS_WIN32) | ||
103 | QString getMountpointByDevice(int drive) | ||
104 | { | ||
105 | QString result; | ||
106 | for(int letter = 'A'; letter <= 'Z'; letter++) { | ||
107 | DWORD written; | ||
108 | HANDLE h; | ||
109 | TCHAR uncpath[MAX_PATH]; | ||
110 | UCHAR buffer[0x400]; | ||
111 | PVOLUME_DISK_EXTENTS extents = (PVOLUME_DISK_EXTENTS)buffer; | ||
112 | |||
113 | _stprintf(uncpath, _TEXT("\\\\.\\%c:"), letter); | ||
114 | h = CreateFile(uncpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, | ||
115 | NULL, OPEN_EXISTING, 0, NULL); | ||
116 | if(h == INVALID_HANDLE_VALUE) { | ||
117 | qDebug() << "error getting extents for" << uncpath; | ||
118 | continue; | ||
119 | } | ||
120 | // get the extents | ||
121 | if(DeviceIoControl(h, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, | ||
122 | NULL, 0, extents, sizeof(buffer), &written, NULL)) { | ||
123 | for(int a = 0; a < extents->NumberOfDiskExtents; a++) { | ||
124 | qDebug() << "Disk:" << extents->Extents[a].DiskNumber; | ||
125 | if(extents->Extents[a].DiskNumber == drive) { | ||
126 | result = letter; | ||
127 | qDebug("found: %c", letter); | ||
128 | break; | ||
129 | } | ||
130 | } | ||
131 | |||
132 | } | ||
133 | |||
134 | } | ||
135 | return result; | ||
136 | |||
137 | } | ||
138 | #endif | ||
93 | 139 | ||
diff --git a/rbutil/rbutilqt/utils.h b/rbutil/rbutilqt/utils.h index 19cdca92c9..904f5903bc 100644 --- a/rbutil/rbutilqt/utils.h +++ b/rbutil/rbutilqt/utils.h | |||
@@ -29,5 +29,9 @@ | |||
29 | bool recRmdir( const QString &dirName ); | 29 | bool recRmdir( const QString &dirName ); |
30 | QString resolvePathCase(QString path); | 30 | QString resolvePathCase(QString path); |
31 | 31 | ||
32 | #if defined(Q_OS_WIN32) | ||
33 | QString getMountpointByDevice(int drive); | ||
34 | #endif | ||
35 | |||
32 | #endif | 36 | #endif |
33 | 37 | ||