mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: make fp_get_data return an std::string
No need for manual memory management. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
e456c1b574
commit
a49e84082c
4 changed files with 17 additions and 12 deletions
|
@ -286,12 +286,20 @@ extern "C" uint32_t fp_get_diveid(struct fingerprint_table *table, unsigned int
|
|||
return table->fingerprints[i].fdiveid;
|
||||
}
|
||||
|
||||
extern "C" char *fp_get_data(struct fingerprint_table *table, unsigned int i)
|
||||
static char to_hex_digit(unsigned char d)
|
||||
{
|
||||
return d <= 9 ? d + '0' : d - 10 + 'a';
|
||||
}
|
||||
|
||||
std::string fp_get_data(struct fingerprint_table *table, unsigned int i)
|
||||
{
|
||||
if (!table || i >= table->fingerprints.size())
|
||||
return 0;
|
||||
return std::string();
|
||||
struct fingerprint_record *fpr = &table->fingerprints[i];
|
||||
// fromRawData() avoids one copy of the raw_data
|
||||
QByteArray hex = QByteArray::fromRawData((char *)fpr->raw_data, fpr->fsize).toHex();
|
||||
return strdup(hex.constData());
|
||||
std::string res(' ', fpr->fsize * 2);
|
||||
for (unsigned int i = 0; i < fpr->fsize; ++i) {
|
||||
res[2 * i] = to_hex_digit((fpr->raw_data[i] >> 4) & 0xf);
|
||||
res[2 * i + 1] = to_hex_digit(fpr->raw_data[i] & 0xf);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -54,7 +54,6 @@ extern uint32_t fp_get_model(struct fingerprint_table *table, unsigned int i);
|
|||
extern uint32_t fp_get_serial(struct fingerprint_table *table, unsigned int i);
|
||||
extern uint32_t fp_get_deviceid(struct fingerprint_table *table, unsigned int i);
|
||||
extern uint32_t fp_get_diveid(struct fingerprint_table *table, unsigned int i);
|
||||
extern char *fp_get_data(struct fingerprint_table *table, unsigned int i);
|
||||
|
||||
extern int is_default_dive_computer_device(const char *);
|
||||
|
||||
|
@ -100,6 +99,8 @@ struct fingerprint_table {
|
|||
std::vector<fingerprint_record> fingerprints;
|
||||
};
|
||||
|
||||
std::string fp_get_data(struct fingerprint_table *table, unsigned int i);
|
||||
|
||||
#endif
|
||||
|
||||
#endif // DEVICE_H
|
||||
|
|
|
@ -881,14 +881,12 @@ static void save_one_device(struct membuffer *b, const struct device *d)
|
|||
|
||||
static void save_one_fingerprint(struct membuffer *b, int i)
|
||||
{
|
||||
char *fp_data = fp_get_data(&fingerprint_table, i);
|
||||
put_format(b, "fingerprint model=%08x serial=%08x deviceid=%08x diveid=%08x data=\"%s\"\n",
|
||||
fp_get_model(&fingerprint_table, i),
|
||||
fp_get_serial(&fingerprint_table, i),
|
||||
fp_get_deviceid(&fingerprint_table, i),
|
||||
fp_get_diveid(&fingerprint_table, i),
|
||||
fp_data);
|
||||
free(fp_data);
|
||||
fp_get_data(&fingerprint_table, i).c_str());
|
||||
}
|
||||
|
||||
static void save_settings(git_repository *repo, struct dir *tree)
|
||||
|
|
|
@ -620,14 +620,12 @@ static void save_one_device(struct membuffer *b, const struct device *d)
|
|||
|
||||
static void save_one_fingerprint(struct membuffer *b, int i)
|
||||
{
|
||||
char *data = fp_get_data(&fingerprint_table, i);
|
||||
put_format(b, "<fingerprint model='%08x' serial='%08x' deviceid='%08x' diveid='%08x' data='%s'/>\n",
|
||||
fp_get_model(&fingerprint_table, i),
|
||||
fp_get_serial(&fingerprint_table, i),
|
||||
fp_get_deviceid(&fingerprint_table, i),
|
||||
fp_get_diveid(&fingerprint_table, i),
|
||||
data);
|
||||
free(data);
|
||||
fp_get_data(&fingerprint_table, i).c_str());
|
||||
}
|
||||
|
||||
extern "C" int save_dives(const char *filename)
|
||||
|
|
Loading…
Add table
Reference in a new issue