summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qtemporarydir.cpp
diff options
context:
space:
mode:
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