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 /rbutil/rbutilqt/base | |
parent | f84602aa68e8bc45f0e15de23e454927fe603a29 (diff) | |
download | rockbox-5ce21366d799c92e1f01abde9d42e0959622c628.tar.gz rockbox-5ce21366d799c92e1f01abde9d42e0959622c628.zip |
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
Diffstat (limited to 'rbutil/rbutilqt/base')
-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 4144cca19d..fa2fe63cb8 100644 --- a/rbutil/rbutilqt/base/autodetection.cpp +++ b/rbutil/rbutilqt/base/autodetection.cpp | |||
@@ -42,7 +42,7 @@ bool Autodetection::detect() | |||
42 | detectUsb(); | 42 | detectUsb(); |
43 | 43 | ||
44 | // Try detection via rockbox.info / rbutil.log | 44 | // Try detection via rockbox.info / rbutil.log |
45 | QStringList mounts = Utils::mountpoints(); | 45 | QStringList mounts = Utils::mountpoints(Utils::MountpointsSupported); |
46 | qDebug() << "[Autodetect] paths to check:" << mounts; | 46 | qDebug() << "[Autodetect] paths to check:" << mounts; |
47 | 47 | ||
48 | for(int i=0; i< mounts.size();i++) | 48 | for(int i=0; i< mounts.size();i++) |
diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index 3a19397efb..92eacbe313 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp | |||
@@ -568,39 +568,71 @@ QString Utils::resolveMountPoint(QString device) | |||
568 | } | 568 | } |
569 | 569 | ||
570 | 570 | ||
571 | QStringList Utils::mountpoints() | 571 | QStringList Utils::mountpoints(enum MountpointsFilter type) |
572 | { | 572 | { |
573 | QStringList supported; | ||
573 | QStringList tempList; | 574 | QStringList tempList; |
574 | #if defined(Q_OS_WIN32) | 575 | #if defined(Q_OS_WIN32) |
576 | supported << "FAT32" << "FAT16" << "FAT12"; | ||
575 | QFileInfoList list = QDir::drives(); | 577 | QFileInfoList list = QDir::drives(); |
576 | for(int i=0; i<list.size();i++) | 578 | for(int i=0; i<list.size();i++) |
577 | { | 579 | { |
578 | tempList << list.at(i).absolutePath(); | 580 | wchar_t t[32]; |
579 | qDebug() << "[Utils] Mounted on" << list.at(i).absolutePath(); | 581 | memset(t, 0, 32); |
582 | if(GetVolumeInformationW((LPCWSTR)list.at(i).absolutePath().utf16(), | ||
583 | NULL, 0, NULL, NULL, NULL, t, 32) == 0) { | ||
584 | // on error empty retrieved type -- don't rely on | ||
585 | // GetVolumeInformation not changing it. | ||
586 | memset(t, 0, sizeof(t)); | ||
587 | } | ||
588 | |||
589 | QString fstype = QString::fromWCharArray(t); | ||
590 | if(type == MountpointsAll || supported.contains(fstype)) { | ||
591 | tempList << list.at(i).absolutePath(); | ||
592 | qDebug() << "[Utils] Added:" << list.at(i).absolutePath() | ||
593 | << "type" << fstype; | ||
594 | } | ||
595 | else { | ||
596 | qDebug() << "[Utils] Ignored:" << list.at(i).absolutePath() | ||
597 | << "type" << fstype; | ||
598 | } | ||
580 | } | 599 | } |
581 | 600 | ||
582 | #elif defined(Q_OS_MACX) || defined(Q_OS_OPENBSD) | 601 | #elif defined(Q_OS_MACX) || defined(Q_OS_OPENBSD) |
602 | supported << "vfat" << "msdos"; | ||
583 | int num; | 603 | int num; |
584 | struct statfs *mntinf; | 604 | struct statfs *mntinf; |
585 | 605 | ||
586 | num = getmntinfo(&mntinf, MNT_WAIT); | 606 | num = getmntinfo(&mntinf, MNT_WAIT); |
587 | while(num--) { | 607 | while(num--) { |
588 | tempList << QString(mntinf->f_mntonname); | 608 | if(type == MountpointsAll || supported.contains(mntinf->f_fstypename)) { |
589 | qDebug() << "[Utils] Mounted on" << mntinf->f_mntonname | 609 | tempList << QString(mntinf->f_mntonname); |
590 | << "is" << mntinf->f_mntfromname << "type" << mntinf->f_fstypename; | 610 | qDebug() << "[Utils] Added:" << mntinf->f_mntonname |
611 | << "is" << mntinf->f_mntfromname << "type" << mntinf->f_fstypename; | ||
612 | } | ||
613 | else { | ||
614 | qDebug() << "[Utils] Ignored:" << mntinf->f_mntonname | ||
615 | << "is" << mntinf->f_mntfromname << "type" << mntinf->f_fstypename; | ||
616 | } | ||
591 | mntinf++; | 617 | mntinf++; |
592 | } | 618 | } |
593 | #elif defined(Q_OS_LINUX) | 619 | #elif defined(Q_OS_LINUX) |
594 | 620 | supported << "vfat" << "msdos"; | |
595 | FILE *mn = setmntent("/etc/mtab", "r"); | 621 | FILE *mn = setmntent("/etc/mtab", "r"); |
596 | if(!mn) | 622 | if(!mn) |
597 | return QStringList(""); | 623 | return QStringList(""); |
598 | 624 | ||
599 | struct mntent *ent; | 625 | struct mntent *ent; |
600 | while((ent = getmntent(mn))) { | 626 | while((ent = getmntent(mn))) { |
601 | tempList << QString(ent->mnt_dir); | 627 | if(type == MountpointsAll || supported.contains(ent->mnt_type)) { |
602 | qDebug() << "[Utils] Mounted on" << ent->mnt_dir | 628 | tempList << QString(ent->mnt_dir); |
603 | << "is" << ent->mnt_fsname << "type" << ent->mnt_type; | 629 | qDebug() << "[Utils] Added:" << ent->mnt_dir |
630 | << "is" << ent->mnt_fsname << "type" << ent->mnt_type; | ||
631 | } | ||
632 | else { | ||
633 | qDebug() << "[Utils] Ignored:" << ent->mnt_dir | ||
634 | << "is" << ent->mnt_fsname << "type" << ent->mnt_type; | ||
635 | } | ||
604 | } | 636 | } |
605 | endmntent(mn); | 637 | endmntent(mn); |
606 | 638 | ||
diff --git a/rbutil/rbutilqt/base/utils.h b/rbutil/rbutilqt/base/utils.h index db52bfb4e9..9905341ad1 100644 --- a/rbutil/rbutilqt/base/utils.h +++ b/rbutil/rbutilqt/base/utils.h | |||
@@ -35,6 +35,10 @@ public: | |||
35 | FilesystemFree, | 35 | FilesystemFree, |
36 | FilesystemClusterSize, | 36 | FilesystemClusterSize, |
37 | }; | 37 | }; |
38 | enum MountpointsFilter { | ||
39 | MountpointsAll, | ||
40 | MountpointsSupported, | ||
41 | }; | ||
38 | 42 | ||
39 | static bool recursiveRmdir(const QString &dirName); | 43 | static bool recursiveRmdir(const QString &dirName); |
40 | static QString resolvePathCase(QString path); | 44 | static QString resolvePathCase(QString path); |
@@ -46,7 +50,7 @@ public: | |||
46 | static QString checkEnvironment(bool permission); | 50 | static QString checkEnvironment(bool permission); |
47 | static int compareVersionStrings(QString s1, QString s2); | 51 | static int compareVersionStrings(QString s1, QString s2); |
48 | static QString filesystemName(QString path); | 52 | static QString filesystemName(QString path); |
49 | static QStringList mountpoints(void); | 53 | static QStringList mountpoints(enum MountpointsFilter type = MountpointsAll); |
50 | static QString resolveDevicename(QString path); | 54 | static QString resolveDevicename(QString path); |
51 | static QString resolveMountPoint(QString device); | 55 | static QString resolveMountPoint(QString device); |
52 | static QStringList findRunningProcess(QStringList names); | 56 | static QStringList findRunningProcess(QStringList names); |