diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2008-04-01 20:30:41 +0000 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2008-04-01 20:30:41 +0000 |
commit | 92717eb9ed97447e725fb3ac6cb3182589053366 (patch) | |
tree | e1b453bcda61d91e4399d21443ba7987137921f5 /rbutil | |
parent | 0a73b16a93ab648687c3cf7fb3aa86d00bbe3f14 (diff) | |
download | rockbox-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.cpp | 33 | ||||
-rw-r--r-- | rbutil/rbutilqt/utils.h | 1 |
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); |