core: port string handling in divecomputer.cpp to C++

Replace formatstring() by the C++ version.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2024-03-02 07:27:52 +01:00 committed by Michael Keller
parent ad7530f7bb
commit 203ff8b2e6

View file

@ -37,7 +37,6 @@
#include "libdivecomputer.h" #include "libdivecomputer.h"
#include "core/version.h" #include "core/version.h"
#include "core/qthelper.h" #include "core/qthelper.h"
#include "core/membuffer.h"
#include "core/file.h" #include "core/file.h"
#include <QtGlobal> #include <QtGlobal>
#include <array> #include <array>
@ -947,7 +946,7 @@ static void do_save_fingerprint(device_data_t *devdata, const char *tmp, const c
unlink(tmp); unlink(tmp);
} }
static char *fingerprint_file(device_data_t *devdata) static std::string fingerprint_file(device_data_t *devdata)
{ {
uint32_t model, serial; uint32_t model, serial;
@ -955,7 +954,7 @@ static char *fingerprint_file(device_data_t *devdata)
model = calculate_string_hash(devdata->model); model = calculate_string_hash(devdata->model);
serial = devdata->devinfo.serial; serial = devdata->devinfo.serial;
return format_string("%s/fingerprints/%04x.%u", return format_string_std("%s/fingerprints/%04x.%u",
system_default_directory(), system_default_directory(),
model, serial); model, serial);
} }
@ -992,23 +991,18 @@ static char *fingerprint_file(device_data_t *devdata)
*/ */
static void save_fingerprint(device_data_t *devdata) static void save_fingerprint(device_data_t *devdata)
{ {
char *dir, *tmp, *final;
// Don't try to save nonexistent fingerprint data // Don't try to save nonexistent fingerprint data
if (!devdata->fingerprint || !devdata->fdiveid) if (!devdata->fingerprint || !devdata->fdiveid)
return; return;
// Make sure the fingerprints directory exists // Make sure the fingerprints directory exists
dir = format_string("%s/fingerprints", system_default_directory()); std::string dir = format_string_std("%s/fingerprints", system_default_directory());
subsurface_mkdir(dir); subsurface_mkdir(dir.c_str());
final = fingerprint_file(devdata); std::string final = fingerprint_file(devdata);
tmp = format_string("%s.tmp", final); std::string tmp = final + ".tmp";
free(dir);
do_save_fingerprint(devdata, tmp, final); do_save_fingerprint(devdata, tmp.c_str(), final.c_str());
free(tmp);
free(final);
} }
/* /*
@ -1050,7 +1044,6 @@ static void verify_fingerprint(dc_device_t *device, device_data_t *devdata, cons
*/ */
static void lookup_fingerprint(dc_device_t *device, device_data_t *devdata) static void lookup_fingerprint(dc_device_t *device, device_data_t *devdata)
{ {
char *cachename;
const unsigned char *raw_data; const unsigned char *raw_data;
if (devdata->force_download) if (devdata->force_download)
@ -1065,16 +1058,15 @@ static void lookup_fingerprint(dc_device_t *device, device_data_t *devdata)
return; return;
} }
/* now check if we have a fingerprint on disk */ /* now check if we have a fingerprint on disk */
cachename = fingerprint_file(devdata); std::string cachename = fingerprint_file(devdata);
if (verbose) if (verbose)
dev_info(devdata, "Looking for fingerprint in '%s'", cachename); dev_info(devdata, "Looking for fingerprint in '%s'", cachename.c_str());
auto [mem, err] = readfile(cachename); auto [mem, err] = readfile(cachename.c_str());
if (err > 0) { if (err > 0) {
if (verbose) if (verbose)
dev_info(devdata, " ... got %zu bytes", mem.size()); dev_info(devdata, " ... got %zu bytes", mem.size());
verify_fingerprint(device, devdata, (unsigned char *)mem.data(), mem.size()); verify_fingerprint(device, devdata, (unsigned char *)mem.data(), mem.size());
} }
free(cachename);
} }
static void event_cb(dc_device_t *device, dc_event_type_t event, const void *data, void *userdata) static void event_cb(dc_device_t *device, dc_event_type_t event, const void *data, void *userdata)