237
241
return QFile::setPermissions(fileName, QFile::permissions(fileName) | QFile::WriteUser);
245
static QString getShortPathName(const QString &name)
250
// Determine length, then convert.
251
const LPCTSTR nameC = reinterpret_cast<LPCTSTR>(name.utf16()); // MinGW
252
const DWORD length = GetShortPathNameW(nameC, NULL, 0);
255
QScopedArrayPointer<TCHAR> buffer(new TCHAR[length]);
256
GetShortPathNameW(nameC, buffer.data(), length);
257
const QString rc = QString::fromUtf16(reinterpret_cast<const ushort *>(buffer.data()), length - 1);
261
static QString getLongPathName(const QString &name)
266
// Determine length, then convert.
267
const LPCTSTR nameC = reinterpret_cast<LPCTSTR>(name.utf16()); // MinGW
268
const DWORD length = GetLongPathNameW(nameC, NULL, 0);
271
QScopedArrayPointer<TCHAR> buffer(new TCHAR[length]);
272
GetLongPathNameW(nameC, buffer.data(), length);
273
const QString rc = QString::fromUtf16(reinterpret_cast<const ushort *>(buffer.data()), length - 1);
278
// makes sure that capitalization of directories is canonical on Windows.
279
// This mimics the logic in QDeclarative_isFileCaseCorrect
280
QString FileUtils::normalizePathName(const QString &name)
283
QString canonicalName = getShortPathName(name);
284
if (canonicalName.isEmpty())
286
canonicalName = getLongPathName(canonicalName);
287
if (canonicalName.isEmpty())
289
// Upper case drive letter
290
if (canonicalName.size() > 2 && canonicalName.at(1) == QLatin1Char(':'))
291
canonicalName[0] = canonicalName.at(0).toUpper();
292
return canonicalName;
293
#else // Filesystem is case-insensitive only on Windows
240
298
QByteArray FileReader::fetchQrc(const QString &fileName)
242
300
QTC_ASSERT(fileName.startsWith(QLatin1Char(':')), return QByteArray());