[PATCH 1/4] Return the file name from prepare_dives_for_divelogs in a QString

Thiago Macieira thiago at macieira.org
Mon Dec 16 09:06:51 UTC 2013


This avoids having to remember to free it at every point. This is C++,
we have destructors :-)

Signed-off-by: Thiago Macieira <thiago at macieira.org>
---
 qt-ui/subsurfacewebservices.cpp | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp
index 096100a..1daffce 100644
--- a/qt-ui/subsurfacewebservices.cpp
+++ b/qt-ui/subsurfacewebservices.cpp
@@ -98,18 +98,18 @@ static void clear_table(struct dive_table *table)
 	table->nr = 0;
 }
 
-static char *prepare_dives_for_divelogs(const bool selected)
+static QString prepare_dives_for_divelogs(const bool selected)
 {
 	static const char errPrefix[] = "divelog.de-upload:";
 	if (!amount_selected) {
 		qDebug() << errPrefix << "no dives selected";
-		return NULL;
+		return QString();
 	}
 
 	int i;
 	struct dive *dive;
 	FILE *f;
-	char filename[PATH_MAX], *tempfile;
+	char filename[PATH_MAX];
 	int streamsize;
 	char *membuf;
 	xsltStylesheetPtr xslt = NULL;
@@ -124,14 +124,12 @@ static char *prepare_dives_for_divelogs(const bool selected)
 	}
 
 	/* generate a random filename and create/open that file with zip_open */
-	QString tempfileQ = QDir::tempPath() + "/import-" + QString::number(qrand() % 99999999) + ".dld";
-	tempfile = strdup(tempfileQ.toLocal8Bit().data());
-	zip = zip_open(tempfile, ZIP_CREATE, NULL);
+	QString tempfile = QDir::tempPath() + "/import-" + QString::number(qrand() % 99999999) + ".dld";
+	zip = zip_open(QFile::encodeName(tempfile), ZIP_CREATE, NULL);
 
 	if (!zip) {
 		qDebug() << errPrefix << "cannot open file as zip";
-		free((void *)tempfile);
-		return NULL;
+		return QString();
 	}
 
 	/* walk the dive list in chronological order */
@@ -192,8 +190,7 @@ static char *prepare_dives_for_divelogs(const bool selected)
 
 error_close_zip:
 	zip_close(zip);
-	QFile::remove(tempfileQ);
-	free(tempfile);
+	QFile::remove(tempfile);
 	xsltFreeStylesheet(xslt);
 	return NULL;
 }
@@ -555,18 +552,16 @@ void DivelogsDeWebServices::downloadDives()
 void DivelogsDeWebServices::prepareDivesForUpload()
 {
 	QString errorText(tr("Cannot create DLD file"));
-	char *filename = prepare_dives_for_divelogs(true);
-	if (filename) {
+	QString filename = prepare_dives_for_divelogs(true);
+	if (!filename.isEmpty()) {
 		QFile f(filename);
 		if (f.open(QIODevice::ReadOnly)) {
 			uploadDives((QIODevice *)&f);
 			f.close();
 			f.remove();
-			free((void *)filename);
 			return;
 		}
 		mainWindow()->showError(errorText.append(": ").append(filename));
-		free((void *)filename);
 		return;
 	}
 	mainWindow()->showError(errorText.append("!"));
-- 
1.7.11.7



More information about the subsurface mailing list