Fix scan of floppy drive under win

This should fix scan of floppy drives and also detection of non
removable drives
This commit is contained in:
Romolo Manfredini
2015-05-02 01:00:24 +02:00
parent 116b147c51
commit d9fb195443
+32 -9
View File
@@ -361,12 +361,29 @@ bool writeEeprom(const QString &filename, ProgressWidget *progress)
return false;
}
#if defined WIN32 || !defined __GNUC__
bool isRemovableMedia( QString vol )
{
char szDosDeviceName[MAX_PATH];
UINT DriveType = GetDriveType( vol.replace("/","\\").toLatin1() );
if ( DriveType != DRIVE_REMOVABLE )
return false;
QueryDosDevice( vol.replace("/","").toLatin1(), szDosDeviceName, MAX_PATH );
if ( strstr( szDosDeviceName,"\\Floppy") != NULL ) { // its a floppy
return false;
}
return true;
}
#endif
QString findMassstoragePath(const QString &filename)
{
QString temppath;
QStringList drives;
QString eepromfile;
QString fsname;
static QStringList blacklist;
#if defined WIN32 || !defined __GNUC__
foreach(QFileInfo drive, QDir::drives()) {
WCHAR szVolumeName[256] ;
@@ -374,16 +391,22 @@ QString findMassstoragePath(const QString &filename)
DWORD dwSerialNumber = 0;
DWORD dwMaxFileNameLength=256;
DWORD dwFileSystemFlags=0;
bool ret = GetVolumeInformationW( (WCHAR *) drive.absolutePath().utf16(),szVolumeName,256,&dwSerialNumber,&dwMaxFileNameLength,&dwFileSystemFlags,szFileSystemName,256);
if (ret) {
QString vName = QString::fromUtf16 ( (const ushort *) szVolumeName) ;
temppath = drive.absolutePath();
eepromfile = temppath;
eepromfile.append("/" + filename);
if (QFile::exists(eepromfile)) {
return eepromfile;
if (!blacklist.contains(drive.absolutePath())) {
if (!isRemovableMedia( drive.absolutePath() )) {
blacklist.append(drive.absolutePath());
} else {
bool ret = GetVolumeInformationW( (WCHAR *) drive.absolutePath().utf16(),szVolumeName,256,&dwSerialNumber,&dwMaxFileNameLength,&dwFileSystemFlags,szFileSystemName,256);
if (ret) {
QString vName = QString::fromUtf16 ( (const ushort *) szVolumeName) ;
temppath = drive.absolutePath();
eepromfile = temppath;
eepromfile.append("/" + filename);
if (QFile::exists(eepromfile)) {
return eepromfile;
}
}
}
}
}
}
#else
struct mount_entry *entry;