summaryrefslogtreecommitdiffstats
path: root/rbutil
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2008-04-01 20:30:41 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2008-04-01 20:30:41 +0000
commit92717eb9ed97447e725fb3ac6cb3182589053366 (patch)
treee1b453bcda61d91e4399d21443ba7987137921f5 /rbutil
parent0a73b16a93ab648687c3cf7fb3aa86d00bbe3f14 (diff)
downloadrockbox-92717eb9ed97447e725fb3ac6cb3182589053366.tar.gz
rockbox-92717eb9ed97447e725fb3ac6cb3182589053366.zip
Implement a function to resolve a given path case-insensitively. This is needed by file-based bootloader installs on case-sensitive systems. Bootloader installation not updated yet.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16921 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil')
-rw-r--r--rbutil/rbutilqt/utils.cpp33
-rw-r--r--rbutil/rbutilqt/utils.h1
2 files changed, 34 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/utils.cpp b/rbutil/rbutilqt/utils.cpp
index caeb30a4b5..d77a1ac125 100644
--- a/rbutil/rbutilqt/utils.cpp
+++ b/rbutil/rbutilqt/utils.cpp
@@ -30,6 +30,7 @@
#include <windows.h>
#include <tchar.h>
#endif
+#include <QDebug>
// recursive function to delete a dir with files
bool recRmdir( const QString &dirName )
@@ -54,6 +55,38 @@ bool recRmdir( const QString &dirName )
}
+//! @brief resolves the given path, ignoring case.
+//! @param path absolute path to resolve.
+//! @return returns exact casing of path, empty string if path not found.
+QString resolvePathCase(QString path)
+{
+ QStringList elems;
+ QString realpath = "/";
+ elems = path.split("/", QString::SkipEmptyParts);
+
+ for(int i = 0; i < elems.size(); i++) {
+ QStringList direlems = QDir(realpath).entryList(QDir::AllEntries);
+ if(direlems.contains(elems.at(i), Qt::CaseInsensitive)) {
+ // need to filter using QRegExp as QStringList::filter(QString)
+ // matches any substring
+ QString expr = QString("^" + elems.at(i) + "$");
+ QRegExp rx = QRegExp(expr, Qt::CaseInsensitive);
+ QStringList a = direlems.filter(rx);
+
+ if(a.size() != 1)
+ return QString("");
+ if(!realpath.endsWith("/"))
+ realpath += "/";
+ realpath += a.at(0);
+ }
+ else
+ return QString("");
+ }
+ qDebug() << __func__ << path << "->" << realpath;
+ return realpath;
+}
+
+
//! @brief get system proxy value.
QUrl systemProxy(void)
{
diff --git a/rbutil/rbutilqt/utils.h b/rbutil/rbutilqt/utils.h
index c7dbf58f76..8ca782fc05 100644
--- a/rbutil/rbutilqt/utils.h
+++ b/rbutil/rbutilqt/utils.h
@@ -25,6 +25,7 @@
#include <QUrl>
bool recRmdir( const QString &dirName );
+QString resolvePathCase(QString path);
QUrl systemProxy(void);