diff options
| author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2013-04-01 20:37:13 +0200 |
|---|---|---|
| committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2013-04-04 22:42:22 +0200 |
| commit | 5ce21366d799c92e1f01abde9d42e0959622c628 (patch) | |
| tree | cf4492f972d7f183b306f5e87dbc94d3c9e92cf8 | |
| parent | f84602aa68e8bc45f0e15de23e454927fe603a29 (diff) | |
| download | rockbox-5ce21366d799c92e1f01abde9d42e0959622c628.zip rockbox-5ce21366d799c92e1f01abde9d42e0959622c628.tar.gz rockbox-5ce21366d799c92e1f01abde9d42e0959622c628.tar.bz2 rockbox-5ce21366d799c92e1f01abde9d42e0959622c628.tar.xz | |
Extend Utils::mountpoints() to allow filtering for supported types.
Instead of trying every mountpoint during autodetection allow filtering out
filesystems that are not supported when retrieving the system mountpoints.
Change-Id: Ic23a5c804cb7c78c146dbc1af7443c67ce12464e
| -rw-r--r-- | rbutil/rbutilqt/base/autodetection.cpp | 2 | ||||
| -rw-r--r-- | rbutil/rbutilqt/base/utils.cpp | 52 | ||||
| -rw-r--r-- | rbutil/rbutilqt/base/utils.h | 6 |
3 files changed, 48 insertions, 12 deletions
diff --git a/rbutil/rbutilqt/base/autodetection.cpp b/rbutil/rbutilqt/base/autodetection.cpp index 4144cca..fa2fe63 100644 --- a/rbutil/rbutilqt/base/autodetection.cpp +++ b/rbutil/rbutilqt/base/autodetection.cpp @@ -42,7 +42,7 @@ bool Autodetection::detect() detectUsb(); // Try detection via rockbox.info / rbutil.log - QStringList mounts = Utils::mountpoints(); + QStringList mounts = Utils::mountpoints(Utils::MountpointsSupported); qDebug() << "[Autodetect] paths to check:" << mounts; for(int i=0; i< mounts.size();i++) diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index 3a19397..92eacbe 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp @@ -568,39 +568,71 @@ QString Utils::resolveMountPoint(QString device) } -QStringList Utils::mountpoints() +QStringList Utils::mountpoints(enum MountpointsFilter type) { + QStringList supported; QStringList tempList; #if defined(Q_OS_WIN32) + supported << "FAT32" << "FAT16" << "FAT12"; QFileInfoList list = QDir::drives(); for(int i=0; i<list.size();i++) { - tempList << list.at(i).absolutePath(); - qDebug() << "[Utils] Mounted on" << list.at(i).absolutePath(); + wchar_t t[32]; + memset(t, 0, 32); + if(GetVolumeInformationW((LPCWSTR)list.at(i).absolutePath().utf16(), + NULL, 0, NULL, NULL, NULL, t, 32) == 0) { + // on error empty retrieved type -- don't rely on + // GetVolumeInformation not changing it. + memset(t, 0, sizeof(t)); + } + + QString fstype = QString::fromWCharArray(t); + if(type == MountpointsAll || supported.contains(fstype)) { + tempList << list.at(i).absolutePath(); + qDebug() << "[Utils] Added:" << list.at(i).absolutePath() + << "type" << fstype; + } + else { + qDebug() << "[Utils] Ignored:" << list.at(i).absolutePath() + << "type" << fstype; + } } #elif defined(Q_OS_MACX) || defined(Q_OS_OPENBSD) + supported << "vfat" << "msdos"; int num; struct statfs *mntinf; num = getmntinfo(&mntinf, MNT_WAIT); while(num--) { - tempList << QString(mntinf->f_mntonname); - qDebug() << "[Utils] Mounted on" << mntinf->f_mntonname - << "is" << mntinf->f_mntfromname << "type" << mntinf->f_fstypename; + if(type == MountpointsAll || supported.contains(mntinf->f_fstypename)) { + tempList << QString(mntinf->f_mntonname); + qDebug() << "[Utils] Added:" << mntinf->f_mntonname + << "is" << mntinf->f_mntfromname << "type" << mntinf->f_fstypename; + } + else { + qDebug() << "[Utils] Ignored:" << mntinf->f_mntonname + << "is" << mntinf->f_mntfromname << "type" << mntinf->f_fstypename; + } mntinf++; } #elif defined(Q_OS_LINUX) - + supported << "vfat" << "msdos"; FILE *mn = setmntent("/etc/mtab", "r"); if(!mn) return QStringList(""); struct mntent *ent; while((ent = getmntent(mn))) { - tempList << QString(ent->mnt_dir); - qDebug() << "[Utils] Mounted on" << ent->mnt_dir - << "is" << ent->mnt_fsname << "type" << ent->mnt_type; + if(type == MountpointsAll || supported.contains(ent->mnt_type)) { + tempList << QString(ent->mnt_dir); + qDebug() << "[Utils] Added:" << ent->mnt_dir + << "is" << ent->mnt_fsname << "type" << ent->mnt_type; + } + else { + qDebug() << "[Utils] Ignored:" << ent->mnt_dir + << "is" << ent->mnt_fsname << "type" << ent->mnt_type; + } } endmntent(mn); diff --git a/rbutil/rbutilqt/base/utils.h b/rbutil/rbutilqt/base/utils.h index db52bfb..9905341 100644 --- a/rbutil/rbutilqt/base/utils.h +++ b/rbutil/rbutilqt/base/utils.h @@ -35,6 +35,10 @@ public: FilesystemFree, FilesystemClusterSize, }; + enum MountpointsFilter { + MountpointsAll, + MountpointsSupported, + }; static bool recursiveRmdir(const QString &dirName); static QString resolvePathCase(QString path); @@ -46,7 +50,7 @@ public: static QString checkEnvironment(bool permission); static int compareVersionStrings(QString s1, QString s2); static QString filesystemName(QString path); - static QStringList mountpoints(void); + static QStringList mountpoints(enum MountpointsFilter type = MountpointsAll); static QString resolveDevicename(QString path); static QString resolveMountPoint(QString device); static QStringList findRunningProcess(QStringList names); |