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.cpp39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index 483a76fa82..2c526847b4 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -94,9 +94,19 @@ static QString defaultTemplateName()
return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX");
}
+#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
+
+static int nextRand(int &v)
+{
+ int r = v % 62;
+ v /= 62;
+ if (v < 62)
+ v = qrand();
+ return r;
+}
+
static char *q_mkdtemp(char *templateName)
{
-#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
const size_t length = strlen(templateName);
@@ -110,16 +120,11 @@ static char *q_mkdtemp(char *templateName)
int v = qrand();
/* Fill in the random bits. */
- XXXXXX[0] = letters[v % 62];
- v /= 62;
- XXXXXX[1] = letters[v % 62];
- v /= 62;
- XXXXXX[2] = letters[v % 62];
- v /= 62;
- XXXXXX[3] = letters[v % 62];
- v /= 62;
- XXXXXX[4] = letters[v % 62];
- v /= 62;
+ XXXXXX[0] = letters[nextRand(v)];
+ XXXXXX[1] = letters[nextRand(v)];
+ XXXXXX[2] = letters[nextRand(v)];
+ XXXXXX[3] = letters[nextRand(v)];
+ XXXXXX[4] = letters[nextRand(v)];
XXXXXX[5] = letters[v % 62];
QString templateNameStr = QFile::decodeName(templateName);
@@ -137,11 +142,17 @@ static char *q_mkdtemp(char *templateName)
}
}
return 0;
-#else
- return mkdtemp(templateName);
-#endif
}
+#else // defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
+
+static char *q_mkdtemp(char *templateName)
+{
+ return mkdtemp(templateName);
+}
+
+#endif
+
void QTemporaryDirPrivate::create(const QString &templateName)
{
QByteArray buffer = QFile::encodeName(templateName);