diff --git a/core/configuredivecomputer.cpp b/core/configuredivecomputer.cpp index d49b31b01..0a7eb3d3a 100644 --- a/core/configuredivecomputer.cpp +++ b/core/configuredivecomputer.cpp @@ -574,8 +574,8 @@ QString ConfigureDiveComputer::dc_open(device_data_t *data) FILE *fp = NULL; dc_status_t rc; - if (data->libdc_log) - fp = subsurface_fopen(logfile_name, "w"); + if (data->libdc_log && !logfile_name.empty()) + fp = subsurface_fopen(logfile_name.c_str(), "w"); data->libdc_logfile = fp; diff --git a/core/libdivecomputer.cpp b/core/libdivecomputer.cpp index 9bff5b51e..22c3de3bc 100644 --- a/core/libdivecomputer.cpp +++ b/core/libdivecomputer.cpp @@ -38,11 +38,10 @@ #include "core/version.h" #include "core/qthelper.h" #include "core/file.h" -#include #include -char *dumpfile_name; -char *logfile_name; +std::string dumpfile_name; +std::string logfile_name; const char *progress_bar_text = ""; void (*progress_callback)(const char *text) = NULL; double progress_bar_fraction = 0.0; @@ -1173,8 +1172,8 @@ static const char *do_device_import(device_data_t *data) dc_buffer_t *buffer = dc_buffer_new(0); rc = dc_device_dump(device, buffer); - if (rc == DC_STATUS_SUCCESS && dumpfile_name) { - FILE *fp = subsurface_fopen(dumpfile_name, "wb"); + if (rc == DC_STATUS_SUCCESS && !dumpfile_name.empty()) { + FILE *fp = subsurface_fopen(dumpfile_name.c_str(), "wb"); if (fp != NULL) { fwrite(dc_buffer_get_data(buffer), 1, dc_buffer_get_size(buffer), fp); fclose(fp); @@ -1479,8 +1478,8 @@ const char *do_libdivecomputer_import(device_data_t *data) data->fingerprint = NULL; data->fsize = 0; - if (data->libdc_log && logfile_name) - fp = subsurface_fopen(logfile_name, "w"); + if (data->libdc_log && !logfile_name.empty()) + fp = subsurface_fopen(logfile_name.c_str(), "w"); data->libdc_logfile = fp; diff --git a/core/libdivecomputer.h b/core/libdivecomputer.h index 184845f1e..78306a637 100644 --- a/core/libdivecomputer.h +++ b/core/libdivecomputer.h @@ -62,8 +62,6 @@ extern int import_thread_cancelled; extern const char *progress_bar_text; extern void (*progress_callback)(const char *text); extern double progress_bar_fraction; -extern char *logfile_name; -extern char *dumpfile_name; dc_status_t ble_packet_open(dc_iostream_t **iostream, dc_context_t *context, const char* devaddr, void *userdata); dc_status_t rfcomm_stream_open(dc_iostream_t **iostream, dc_context_t *context, const char* devaddr); @@ -76,6 +74,11 @@ unsigned int get_supported_transports(device_data_t *data); #ifdef __cplusplus } + +#include +extern std::string logfile_name; +extern std::string dumpfile_name; + #endif #endif // LIBDIVECOMPUTER_H diff --git a/desktop-widgets/configuredivecomputerdialog.cpp b/desktop-widgets/configuredivecomputerdialog.cpp index 8869daaa5..03af9121a 100644 --- a/desktop-widgets/configuredivecomputerdialog.cpp +++ b/desktop-widgets/configuredivecomputerdialog.cpp @@ -1481,10 +1481,8 @@ void ConfigureDiveComputerDialog::pickLogFile() filename = fi.absolutePath().append(QDir::separator()).append("subsurface.log"); logFile = QFileDialog::getSaveFileName(this, tr("Choose file for dive computer download logfile"), filename, tr("Log files") + " (*.log)"); - if (!logFile.isEmpty()) { - free(logfile_name); - logfile_name = copy_qstring(logFile); - } + if (!logFile.isEmpty()) + logfile_name = logFile.toStdString(); } #ifdef BT_SUPPORT diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp index e6338ca81..c1fc34684 100644 --- a/desktop-widgets/downloadfromdivecomputer.cpp +++ b/desktop-widgets/downloadfromdivecomputer.cpp @@ -466,10 +466,8 @@ void DownloadFromDCWidget::pickLogFile() QString logfilename = fi.absolutePath().append(QDir::separator()).append("subsurface.log"); QString logFile = QFileDialog::getSaveFileName(this, tr("Choose file for dive computer download logfile"), logfilename, tr("Log files") + " (*.log)"); - if (!logFile.isEmpty()) { - free(logfile_name); - logfile_name = copy_qstring(logFile); - } + if (!logFile.isEmpty()) + logfile_name = logFile.toStdString(); } void DownloadFromDCWidget::checkDumpFile(int state) @@ -491,10 +489,8 @@ void DownloadFromDCWidget::pickDumpFile() QString dumpfilename = fi.absolutePath().append(QDir::separator()).append("subsurface.bin"); QString dumpFile = QFileDialog::getSaveFileName(this, tr("Choose file for dive computer binary dump file"), dumpfilename, tr("Dump files") + " (*.bin)"); - if (!dumpFile.isEmpty()) { - free(dumpfile_name); - dumpfile_name = copy_qstring(dumpFile); - } + if (!dumpFile.isEmpty()) + dumpfile_name = dumpFile.toStdString(); } void DownloadFromDCWidget::reject() diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index 5ff8cf1ed..7e7fe783a 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -266,7 +266,7 @@ QMLManager::QMLManager() : // remove the existing libdivecomputer logfile so we don't copy an old one by mistake QFile libdcLog(libdcLogFileName); libdcLog.remove(); - logfile_name = copy_qstring(libdcLogFileName); + logfile_name = libdcLogFileName.toStdString(); } else { appendTextToLog("No writeable location found, in-memory log only and no libdivecomputer log"); } @@ -497,7 +497,7 @@ bool QMLManager::createSupportEmail() QAndroidJniObject activity = QtAndroid::androidActivity(); if (activity.isValid()) { QAndroidJniObject applogfilepath = QAndroidJniObject::fromString(appLogFileName); - QAndroidJniObject libdcfilepath = QAndroidJniObject::fromString(logfile_name); + QAndroidJniObject libdcfilepath = QAndroidJniObject::fromString(QString::fromStdString(logfile_name)); bool success = activity.callMethod("supportEmail", "(Ljava/lang/String;Ljava/lang/String;)Z", // two string arguments, return bool applogfilepath.object(), libdcfilepath.object()); @@ -508,7 +508,7 @@ bool QMLManager::createSupportEmail() qDebug() << __FUNCTION__ << "failed to share the logFiles via intent, use the fall-back mail body method"; #elif defined(Q_OS_IOS) // call into objC++ code to share on iOS - QString libdcLogFileName(logfile_name); + QString libdcLogFileName = QString::fromStdString(logfile_name); iosshare.supportEmail(appLogFileName, libdcLogFileName); // Unfortunately I haven't been able to figure out how to wait until the mail was sent // so that this could tell us whether this was successful or not @@ -536,7 +536,7 @@ QString QMLManager::getCombinedLogs() copyString += MessageHandlerModel::self()->logAsString(); // Add heading and append libdivecomputer.log - QFile f(logfile_name); + QFile f(logfile_name.c_str()); if (f.open(QFile::ReadOnly | QFile::Text)) { copyString += "\n\n\n---------- libdivecomputer.log ----------\n";