From 92717eb9ed97447e725fb3ac6cb3182589053366 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Tue, 1 Apr 2008 20:30:41 +0000 Subject: 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 --- rbutil/rbutilqt/utils.cpp | 33 +++++++++++++++++++++++++++++++++ rbutil/rbutilqt/utils.h | 1 + 2 files changed, 34 insertions(+) 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 #include #endif +#include // 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 bool recRmdir( const QString &dirName ); +QString resolvePathCase(QString path); QUrl systemProxy(void); -- cgit v1.2.3