summaryrefslogtreecommitdiffstats
path: root/qt-ui/subsurfacewebservices.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2014-08-04 22:15:58 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-08-04 22:15:58 -0700
commit3fd8e50044c76143d5d401c5274e03bff498a713 (patch)
tree8ffe150dd631cdad44bfd2875a65acbc30925e1c /qt-ui/subsurfacewebservices.cpp
parent092a973f7c5ae55f67e4c87ee807852f186ec081 (diff)
downloadsubsurface-3fd8e50044c76143d5d401c5274e03bff498a713.tar.gz
Don't use tmpfile()
It appears that at least on Win7-64 Windows tries to create the temporary file in C:\ and fails because of insufficient permissions. How stupid is that. Instead we roll our own tempfiles, based on the already existing tempfile name that is passed in. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/subsurfacewebservices.cpp')
-rw-r--r--qt-ui/subsurfacewebservices.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp
index 6fa0b0afe..e7f81d7fa 100644
--- a/qt-ui/subsurfacewebservices.cpp
+++ b/qt-ui/subsurfacewebservices.cpp
@@ -5,6 +5,7 @@
#include <libxml/parser.h>
#include <zip.h>
#include <errno.h>
+#include <stdio.h>
#include <QDir>
#include <QHttpMultiPart>
@@ -149,7 +150,10 @@ bool DivelogsDeWebServices::prepare_dives_for_divelogs(const QString &tempfile,
*/
if (selected && !dive->selected)
continue;
- f = tmpfile();
+ QString innerTmpFile = tempfile;
+ QString tmpSuffix = QString::number(qrand() % 9999) + ".tmp";
+ innerTmpFile.replace(".dld", tmpSuffix);
+ f = fopen(QFile::encodeName(QDir::toNativeSeparators(innerTmpFile)), "w+");
if (!f) {
report_error(tr("cannot create temporary file: %s").toUtf8(), qt_error_string().toUtf8().data());
goto error_close_zip;
@@ -168,7 +172,7 @@ bool DivelogsDeWebServices::prepare_dives_for_divelogs(const QString &tempfile,
}
membuf[streamsize] = 0;
fclose(f);
-
+ unlink(QFile::encodeName(QDir::toNativeSeparators(innerTmpFile)));
/*
* Parse the memory buffer into XML document and
* transform it to divelogs.de format, finally dumping