| 21 | int offset); |
| 22 | |
| 23 | QStringList resolveShellGlobbingInternal(const QStringList& segments, QDir& dir, int offset = 0) |
| 24 | { |
| 25 | if (offset >= segments.size()) { |
| 26 | return QStringList(); |
| 27 | } |
| 28 | |
| 29 | const QString& pathPattern = segments.at(offset); |
| 30 | |
| 31 | QStringList entries; |
| 32 | if (pathPattern.contains(QLatin1Char('*')) || |
| 33 | pathPattern.contains(QLatin1Char('?')) || |
| 34 | pathPattern.contains(QLatin1Char('['))) { |
| 35 | // pattern contains globbing chars |
| 36 | const auto dirEntries = |
| 37 | dir.entryInfoList(QStringList() << pathPattern, QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Unsorted); |
| 38 | for (const auto& match : dirEntries) { |
| 39 | resolveShellGlobbingInternal(entries, segments, match, dir, offset); |
| 40 | } |
| 41 | } else { |
| 42 | // pattern is "simple" hence be fast, but make sure the file exists |
| 43 | QFileInfo info(dir.filePath(pathPattern)); |
| 44 | if (info.exists()) { |
| 45 | resolveShellGlobbingInternal(entries, segments, info, dir, offset); |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | return entries; |
| 50 | } |
| 51 | |
| 52 | void resolveShellGlobbingInternal(QStringList& entries, const QStringList& segments, const QFileInfo& match, QDir& dir, |
| 53 | int offset) |