~bzoltan/kubuntu-packaging/decouple_cmake_plugin

« back to all changes in this revision

Viewing changes to src/libs/utils/fileutils.cpp

  • Committer: Timo Jyrinki
  • Date: 2013-12-02 09:16:15 UTC
  • mfrom: (1.1.29)
  • Revision ID: timo.jyrinki@canonical.com-20131202091615-xbj1os1f604ber1m
New upstream release candidate.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
#include <QDateTime>
39
39
#include <QMessageBox>
40
40
 
 
41
#ifdef Q_OS_WIN
 
42
#include <qt_windows.h>
 
43
#endif
 
44
 
41
45
namespace Utils {
42
46
 
43
47
/*! \class Utils::FileUtils
237
241
    return QFile::setPermissions(fileName, QFile::permissions(fileName) | QFile::WriteUser);
238
242
}
239
243
 
 
244
#ifdef Q_OS_WIN
 
245
static QString getShortPathName(const QString &name)
 
246
{
 
247
    if (name.isEmpty())
 
248
        return name;
 
249
 
 
250
    // Determine length, then convert.
 
251
    const LPCTSTR nameC = reinterpret_cast<LPCTSTR>(name.utf16()); // MinGW
 
252
    const DWORD length = GetShortPathNameW(nameC, NULL, 0);
 
253
    if (length == 0)
 
254
        return name;
 
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);
 
258
    return rc;
 
259
}
 
260
 
 
261
static QString getLongPathName(const QString &name)
 
262
{
 
263
    if (name.isEmpty())
 
264
        return name;
 
265
 
 
266
    // Determine length, then convert.
 
267
    const LPCTSTR nameC = reinterpret_cast<LPCTSTR>(name.utf16()); // MinGW
 
268
    const DWORD length = GetLongPathNameW(nameC, NULL, 0);
 
269
    if (length == 0)
 
270
        return name;
 
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);
 
274
    return rc;
 
275
}
 
276
#endif // Q_OS_WIN
 
277
 
 
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)
 
281
{
 
282
#ifdef Q_OS_WIN
 
283
    QString canonicalName = getShortPathName(name);
 
284
    if (canonicalName.isEmpty())
 
285
        return name;
 
286
    canonicalName = getLongPathName(canonicalName);
 
287
    if (canonicalName.isEmpty())
 
288
        return name;
 
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
 
294
    return name;
 
295
#endif
 
296
}
 
297
 
240
298
QByteArray FileReader::fetchQrc(const QString &fileName)
241
299
{
242
300
    QTC_ASSERT(fileName.startsWith(QLatin1Char(':')), return QByteArray());