summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qtemporarydir.cpp
diff options
context:
space:
mode:
authorAndreas Holzammer <andreas.holzammer@kdab.com>2012-02-06 18:36:32 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-07 12:48:23 +0100
commitfe2344bd44e183b9893934d175c61a725af29b90 (patch)
treeae6ecf4d79d443af1048090cca83b506722ceaf4 /src/corelib/io/qtemporarydir.cpp
parente09025c1b6d43342e3086b7179109a08f39afd10 (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/qtemporarydir.cpp')
-rw-r--r--src/corelib/io/qtemporarydir.cpp37
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