diff options
author | Andreas Holzammer <andreas.holzammer@kdab.com> | 2012-02-06 18:36:32 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-07 12:48:23 +0100 |
commit | fe2344bd44e183b9893934d175c61a725af29b90 (patch) | |
tree | ae6ecf4d79d443af1048090cca83b506722ceaf4 /src/corelib/io | |
parent | e09025c1b6d43342e3086b7179109a08f39afd10 (diff) |
Use the QNX implementation of mkdtemp for win and wince.
There is no mktemp for Windows CE, nor mkdtemp. So use the
implementation for QNX for Windows CE too, to simplify
the implementation use it for windows too.
Change-Id: Icddaf474a2d696752d8f9774fb4f033454e34e83
Reviewed-by: David Faure <faure@kde.org>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qtemporarydir.cpp | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp index 53a48609e5..13969ca90e 100644 --- a/src/corelib/io/qtemporarydir.cpp +++ b/src/corelib/io/qtemporarydir.cpp @@ -53,8 +53,7 @@ #include <stdlib.h> // mkdtemp #ifdef Q_OS_WIN -#include <private/qfsfileengine_p.h> -#include <qt_windows.h> +#include <private/qfilesystemengine_p.h> #endif QT_BEGIN_NAMESPACE @@ -95,7 +94,7 @@ static QString defaultTemplateName() return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX"); } -#ifdef Q_OS_QNX +#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) static char *mkdtemp(char *templateName) { static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; @@ -123,33 +122,26 @@ static char *mkdtemp(char *templateName) v /= 62; XXXXXX[5] = letters[v % 62]; - if (!mkdir(templateName, 0700)) + QString templateNameStr = QFile::decodeName(templateName); + + QFileSystemEntry fileSystemEntry(templateNameStr); + if (QFileSystemEngine::createDirectory(fileSystemEntry, false)) { + QSystemError error; + QFileSystemEngine::setPermissions(fileSystemEntry, + QFile::ReadOwner | + QFile::WriteOwner | + QFile::ExeOwner, error); + if (error.error() != 0) + continue; return templateName; + } } - return 0; } #endif void QTemporaryDirPrivate::create(const QString &templateName) { -#ifdef Q_OS_WIN - QString buffer = templateName; - // Windows' mktemp believes 26 temp files per process ought to be enough for everyone (!) - // Let's add a few random chars then, before the XXXXXX template. - for (int i = 0 ; i < 4 ; ++i) - buffer += QChar((qrand() & 0xffff) % (26) + 'A'); - if (!buffer.endsWith(QLatin1String("XXXXXX"))) - buffer += QLatin1String("XXXXXX"); - QFileSystemEntry baseEntry(buffer); - QFileSystemEntry::NativePath basePath = baseEntry.nativeFilePath(); - wchar_t* array = (wchar_t*)basePath.utf16(); - if (_wmktemp(array) && ::CreateDirectory(array, 0)) { - success = true; - QFileSystemEntry entry(QString::fromWCharArray(array), QFileSystemEntry::FromNativePath()); - path = entry.filePath(); - } -#else QByteArray buffer = QFile::encodeName(templateName); if (!buffer.endsWith("XXXXXX")) buffer += "XXXXXX"; @@ -157,7 +149,6 @@ void QTemporaryDirPrivate::create(const QString &templateName) success = true; path = QFile::decodeName(buffer.constData()); } -#endif } //************* QTemporaryDir |