diff options
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index ab7ad6df4..9fb782fec 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -53,6 +53,12 @@ #include <errno.h> +#ifdef Q_OS_UNIX +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#endif + using namespace QInstaller; @@ -304,9 +310,9 @@ class RemoveDirectoryThread : public QThread { public: explicit RemoveDirectoryThread(const QString &path, bool ignoreErrors = false, QObject *parent = 0) - : QThread(parent), - p(path), - ignore(ignoreErrors) + : QThread(parent) + , p(path) + , ignore(ignoreErrors) { } @@ -455,7 +461,7 @@ QString QInstaller::createTemporaryDirectory(const QString &templ) if (!f.open()) throw Error(QObject::tr("Could not create temporary folder for template %1: %2").arg(t, f.errorString())); const QString path = f.fileName() + QLatin1String("meta"); - qDebug() << "Creating meta data directory at" << path; + qDebug() << "\nCreating meta data directory at" << path; QInstaller::mkpath(path); return path; @@ -469,6 +475,7 @@ QString QInstaller::createTemporaryDirectory(const QString &templ) # endif #include <windows.h> + QString QInstaller::getShortPathName(const QString &name) { if (name.isEmpty()) @@ -607,4 +614,31 @@ void QInstaller::setApplicationIcon(const QString &application, const QString &i EndUpdateResourceW(updateRes, false); } +static quint64 symlinkSizeWin(const QString &path) +{ + WIN32_FILE_ATTRIBUTE_DATA fileAttributeData; + if (GetFileAttributesEx((wchar_t*)(path.utf16()), GetFileExInfoStandard, &fileAttributeData) == FALSE) + return quint64(0); + + LARGE_INTEGER size; + size.LowPart = fileAttributeData.nFileSizeLow; + size.HighPart = fileAttributeData.nFileSizeHigh; + return quint64(size.QuadPart); +} + #endif + +quint64 QInstaller::fileSize(const QFileInfo &info) +{ + if (!info.isSymLink()) + return info.size(); + +#ifndef Q_OS_WIN + struct stat buffer; + if (lstat(qPrintable(info.absoluteFilePath()), &buffer) != 0) + return quint64(0); + return quint64(buffer.st_size); +#else + return symlinkSizeWin(info.absoluteFilePath()); +#endif +} |