From da7ea17b6621e9c5611d0ba76b8f0e41c28038f8 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sun, 24 Mar 2024 21:03:08 +0100 Subject: [PATCH] cleanup: replace fprintf to stderr by report_info() Let's try to unify debugging output! Signed-off-by: Berthold Stoeger --- commands/command_pictures.cpp | 7 ++-- core/checkcloudconnection.cpp | 2 +- core/dive.cpp | 8 ++-- core/divelog.cpp | 3 +- core/divesite.c | 7 ++-- core/equipment.c | 5 ++- core/file.cpp | 6 +-- core/filterconstraint.cpp | 32 +++++++-------- core/gas.c | 3 +- core/import-cobalt.cpp | 15 +++---- core/import-csv.cpp | 41 ++++++++++++-------- core/import-divinglog.cpp | 9 +++-- core/import-seac.cpp | 10 ++--- core/import-shearwater.cpp | 23 +++++------ core/import-suunto.cpp | 28 +++++-------- core/libdivecomputer.cpp | 21 ++++------ core/liquivision.cpp | 5 ++- core/parse-gpx.cpp | 5 ++- core/parse-xml.cpp | 36 ++++++++--------- core/profile.cpp | 7 ++-- core/save-xml.cpp | 2 +- core/selection.cpp | 3 +- core/serial_ftdi.c | 15 +++---- core/uemis-downloader.cpp | 12 +++--- core/uemis.c | 7 ++-- core/windows.cpp | 18 ++++----- desktop-widgets/downloadfromdivecomputer.cpp | 3 +- mobile-widgets/statsmanager.cpp | 5 ++- subsurface-helper.cpp | 3 +- 29 files changed, 171 insertions(+), 170 deletions(-) diff --git a/commands/command_pictures.cpp b/commands/command_pictures.cpp index 7230e847c..98f09e3c8 100644 --- a/commands/command_pictures.cpp +++ b/commands/command_pictures.cpp @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include "command_pictures.h" +#include "core/errorhelper.h" #include "core/subsurface-qt/divelistnotifier.h" #include "qt-models/divelocationmodel.h" @@ -24,7 +25,7 @@ void SetPictureOffset::redo() { picture *pic = dive_get_picture(d, filename); if (!pic) { - fprintf(stderr, "SetPictureOffset::redo(): picture disappeared!\n"); + report_info("SetPictureOffset::redo(): picture disappeared!"); return; } std::swap(pic->offset, offset); @@ -73,7 +74,7 @@ static std::vector removePictures(std::vectorpictures, fn.c_str()); if (idx < 0) { - fprintf(stderr, "removePictures(): picture disappeared!\n"); + report_info("removePictures(): picture disappeared!"); continue; // Huh? We made sure that this can't happen by filtering out non-existent pictures. } filenames.push_back(QString::fromStdString(fn)); @@ -103,7 +104,7 @@ static std::vector addPictures(std::vectorpictures, pic.filename.c_str()); // This should *not* already exist! if (idx >= 0) { - fprintf(stderr, "addPictures(): picture disappeared!\n"); + report_info("addPictures(): picture disappeared!"); continue; // Huh? We made sure that this can't happen by filtering out existing pictures. } picsForSignal.push_back(pic); diff --git a/core/checkcloudconnection.cpp b/core/checkcloudconnection.cpp index c751bd538..79c19e466 100644 --- a/core/checkcloudconnection.cpp +++ b/core/checkcloudconnection.cpp @@ -35,7 +35,7 @@ CheckCloudConnection::CheckCloudConnection(QObject *parent) : bool CheckCloudConnection::checkServer() { if (verbose) - fprintf(stderr, "Checking cloud connection...\n"); + report_info("Checking cloud connection..."); QEventLoop loop; QNetworkAccessManager *mgr = new QNetworkAccessManager(); diff --git a/core/dive.cpp b/core/dive.cpp index 0dd214db5..fbe080fe5 100644 --- a/core/dive.cpp +++ b/core/dive.cpp @@ -658,7 +658,7 @@ extern "C" void update_setpoint_events(const struct dive *dive, struct divecompu ev->value = new_setpoint; } else { if (!add_event(dc, 0, SAMPLE_EVENT_PO2, 0, new_setpoint, "SP change")) - fprintf(stderr, "Could not add setpoint change event\n"); + report_info("Could not add setpoint change event"); } } @@ -3063,7 +3063,7 @@ extern "C" struct dive *make_first_dc(const struct dive *d, int dc_number) ; if (!dc) { free(newdc); - fprintf(stderr, "data inconsistent: can't find the current DC"); + report_info("data inconsistent: can't find the current DC"); return res; } dc->next = old_dc->next; @@ -3386,7 +3386,7 @@ extern "C" struct dive *get_dive_by_uniq_id(int id) } #ifdef DEBUG if (dive == NULL) { - fprintf(stderr, "Invalid id %x passed to get_dive_by_diveid, try to fix the code\n", id); + report_info("Invalid id %x passed to get_dive_by_diveid, try to fix the code", id); exit(1); } #endif @@ -3404,7 +3404,7 @@ extern "C" int get_idx_by_uniq_id(int id) } #ifdef DEBUG if (dive == NULL) { - fprintf(stderr, "Invalid id %x passed to get_dive_by_diveid, try to fix the code\n", id); + report_info("Invalid id %x passed to get_dive_by_diveid, try to fix the code", id); exit(1); } #endif diff --git a/core/divelog.cpp b/core/divelog.cpp index 158121180..ce8d3c2f0 100644 --- a/core/divelog.cpp +++ b/core/divelog.cpp @@ -3,6 +3,7 @@ #include "divelist.h" #include "divesite.h" #include "device.h" +#include "errorhelper.h" #include "filterpreset.h" #include "trip.h" @@ -70,7 +71,7 @@ void divelog::clear() while (sites->nr) delete_dive_site(get_dive_site(0, sites), sites); if (trips->nr != 0) { - fprintf(stderr, "Warning: trip table not empty in divelog::clear()!\n"); + report_info("Warning: trip table not empty in divelog::clear()!"); trips->nr = 0; } clear_device_table(devices); diff --git a/core/divesite.c b/core/divesite.c index 4ea2696d1..ed83514ab 100644 --- a/core/divesite.c +++ b/core/divesite.c @@ -4,6 +4,7 @@ #include "dive.h" #include "divelist.h" #include "divelog.h" +#include "errorhelper.h" #include "membuffer.h" #include "subsurface-string.h" #include "table.h" @@ -371,17 +372,17 @@ void add_dive_to_dive_site(struct dive *d, struct dive_site *ds) { int idx; if (!d) { - fprintf(stderr, "Warning: add_dive_to_dive_site called with NULL dive\n"); + report_info("Warning: add_dive_to_dive_site called with NULL dive"); return; } if (!ds) { - fprintf(stderr, "Warning: add_dive_to_dive_site called with NULL dive site\n"); + report_info("Warning: add_dive_to_dive_site called with NULL dive site"); return; } if (d->dive_site == ds) return; if (d->dive_site) { - fprintf(stderr, "Warning: adding dive that already belongs to a dive site to a different site\n"); + report_info("Warning: adding dive that already belongs to a dive site to a different site"); unregister_dive_from_dive_site(d); } idx = dive_table_get_insertion_index(&ds->dives, d); diff --git a/core/equipment.c b/core/equipment.c index c4cd1e767..df1b7074d 100644 --- a/core/equipment.c +++ b/core/equipment.c @@ -16,6 +16,7 @@ #include "dive.h" #include "divelist.h" #include "divelog.h" +#include "errorhelper.h" #include "pref.h" #include "subsurface-string.h" #include "table.h" @@ -460,7 +461,7 @@ cylinder_t *get_cylinder(const struct dive *d, int idx) * in the table to mark no-cylinder surface interavals. This is horrendous. Fix ASAP. */ // if (idx < 0 || idx >= d->cylinders.nr) { if (idx < 0 || idx >= d->cylinders.nr + 1 || idx >= d->cylinders.allocated) { - fprintf(stderr, "Warning: accessing invalid cylinder %d (%d existing)\n", idx, d->cylinders.nr); + report_info("Warning: accessing invalid cylinder %d (%d existing)", idx, d->cylinders.nr); return NULL; } return &d->cylinders.cylinders[idx]; @@ -469,7 +470,7 @@ cylinder_t *get_cylinder(const struct dive *d, int idx) cylinder_t *get_or_create_cylinder(struct dive *d, int idx) { if (idx < 0) { - fprintf(stderr, "Warning: accessing invalid cylinder %d\n", idx); + report_info("Warning: accessing invalid cylinder %d", idx); return NULL; } while (idx >= d->cylinders.nr) diff --git a/core/file.cpp b/core/file.cpp index bbab9e1fc..dd9f15b8b 100644 --- a/core/file.cpp +++ b/core/file.cpp @@ -125,7 +125,7 @@ static int try_to_open_db(const char *filename, std::string &mem, struct divelog retval = sqlite3_open(filename, &handle); if (retval) { - fprintf(stderr, "Database connection failed '%s'.\n", filename); + report_info("Database connection failed '%s'", filename); return 1; } @@ -258,7 +258,7 @@ bool remote_repo_uptodate(const char *filename, struct git_info *info) if (is_git_repository(filename, info) && open_git_repository(info)) { std::string sha = get_sha(info->repo, info->branch); if (!sha.empty() && current_sha == sha) { - fprintf(stderr, "already have loaded SHA %s - don't load again\n", sha.c_str()); + report_info("already have loaded SHA %s - don't load again", sha.c_str()); return true; } } @@ -314,7 +314,7 @@ extern "C" int parse_file(const char *filename, struct divelog *log) std::string wl_name = std::string(filename, t - filename) + ".add"; auto [wl_mem, err] = readfile(wl_name.c_str()); if (err < 0) { - fprintf(stderr, "No file %s found. No WLog extensions.\n", wl_name.c_str()); + report_info("No file %s found. No WLog extensions.", wl_name.c_str()); wl_mem.clear(); } return datatrak_import(mem, wl_mem, log); diff --git a/core/filterconstraint.cpp b/core/filterconstraint.cpp index 1b4a1ef63..b77f76054 100644 --- a/core/filterconstraint.cpp +++ b/core/filterconstraint.cpp @@ -644,7 +644,7 @@ std::string filter_constraint_data_to_string(const filter_constraint *c) void filter_constraint_set_stringlist(filter_constraint &c, const QString &s) { if (!filter_constraint_is_string(c.type)) { - fprintf(stderr, "Setting strings in non-string constraint!\n"); + report_info("Setting strings in non-string constraint!"); return; } c.data.string_list->clear(); @@ -655,7 +655,7 @@ void filter_constraint_set_stringlist(filter_constraint &c, const QString &s) void filter_constraint_set_timestamp_from(filter_constraint &c, timestamp_t from) { if (!filter_constraint_is_timestamp(c.type)) { - fprintf(stderr, "Setting timestamp from in non-timestamp constraint!\n"); + report_info("Setting timestamp from in non-timestamp constraint!"); return; } c.data.timestamp_range.from = from; @@ -664,7 +664,7 @@ void filter_constraint_set_timestamp_from(filter_constraint &c, timestamp_t from void filter_constraint_set_timestamp_to(filter_constraint &c, timestamp_t to) { if (!filter_constraint_is_timestamp(c.type)) { - fprintf(stderr, "Setting timestamp to in non-timestamp constraint!\n"); + report_info("Setting timestamp to in non-timestamp constraint!"); return; } c.data.timestamp_range.to = to; @@ -673,7 +673,7 @@ void filter_constraint_set_timestamp_to(filter_constraint &c, timestamp_t to) void filter_constraint_set_integer_from(filter_constraint &c, int from) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Setting integer from of non-numerical constraint!\n"); + report_info("Setting integer from of non-numerical constraint!"); return; } c.data.numerical_range.from = from; @@ -682,7 +682,7 @@ void filter_constraint_set_integer_from(filter_constraint &c, int from) void filter_constraint_set_integer_to(filter_constraint &c, int to) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Setting integer to of non-numerical constraint!\n"); + report_info("Setting integer to of non-numerical constraint!"); return; } c.data.numerical_range.to = to; @@ -691,7 +691,7 @@ void filter_constraint_set_integer_to(filter_constraint &c, int to) void filter_constraint_set_float_from(filter_constraint &c, double from) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Setting float from of non-numerical constraint!\n"); + report_info("Setting float from of non-numerical constraint!"); return; } c.data.numerical_range.from = display_to_base_unit(from, c.type); @@ -700,7 +700,7 @@ void filter_constraint_set_float_from(filter_constraint &c, double from) void filter_constraint_set_float_to(filter_constraint &c, double to) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Setting float to of non-numerical constraint!\n"); + report_info("Setting float to of non-numerical constraint!"); return; } c.data.numerical_range.to = display_to_base_unit(to, c.type); @@ -709,7 +709,7 @@ void filter_constraint_set_float_to(filter_constraint &c, double to) void filter_constraint_set_multiple_choice(filter_constraint &c, uint64_t multiple_choice) { if (!filter_constraint_is_multiple_choice(c.type)) { - fprintf(stderr, "Setting multiple-choice to of non-multiple-choice constraint!\n"); + report_info("Setting multiple-choice to of non-multiple-choice constraint!"); return; } c.data.multiple_choice = multiple_choice; @@ -718,7 +718,7 @@ void filter_constraint_set_multiple_choice(filter_constraint &c, uint64_t multip QString filter_constraint_get_string(const filter_constraint &c) { if (!filter_constraint_is_string(c.type)) { - fprintf(stderr, "Getting string of non-string constraint!\n"); + report_info("Getting string of non-string constraint!"); return QString(); } return c.data.string_list->join(","); @@ -727,7 +727,7 @@ QString filter_constraint_get_string(const filter_constraint &c) int filter_constraint_get_integer_from(const filter_constraint &c) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Getting integer from of non-numerical constraint!\n"); + report_info("Getting integer from of non-numerical constraint!"); return -1; } return c.data.numerical_range.from; @@ -736,7 +736,7 @@ int filter_constraint_get_integer_from(const filter_constraint &c) int filter_constraint_get_integer_to(const filter_constraint &c) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Getting integer to of non-numerical constraint!\n"); + report_info("Getting integer to of non-numerical constraint!"); return -1; } return c.data.numerical_range.to; @@ -745,7 +745,7 @@ int filter_constraint_get_integer_to(const filter_constraint &c) double filter_constraint_get_float_from(const filter_constraint &c) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Getting float from of non-numerical constraint!\n"); + report_info("Getting float from of non-numerical constraint!"); return 0.0; } return base_to_display_unit(c.data.numerical_range.from, c.type); @@ -754,7 +754,7 @@ double filter_constraint_get_float_from(const filter_constraint &c) double filter_constraint_get_float_to(const filter_constraint &c) { if (!is_numerical_constraint(c.type)) { - fprintf(stderr, "Getting float to of non-numerical constraint!\n"); + report_info("Getting float to of non-numerical constraint!"); return 0.0; } return base_to_display_unit(c.data.numerical_range.to, c.type); @@ -763,7 +763,7 @@ double filter_constraint_get_float_to(const filter_constraint &c) timestamp_t filter_constraint_get_timestamp_from(const filter_constraint &c) { if (!filter_constraint_is_timestamp(c.type)) { - fprintf(stderr, "Getting timestamp from of non-timestamp constraint!\n"); + report_info("Getting timestamp from of non-timestamp constraint!"); return 0; } return c.data.timestamp_range.from; @@ -772,7 +772,7 @@ timestamp_t filter_constraint_get_timestamp_from(const filter_constraint &c) timestamp_t filter_constraint_get_timestamp_to(const filter_constraint &c) { if (!filter_constraint_is_timestamp(c.type)) { - fprintf(stderr, "Getting timestamp to of non-timestamp constraint!\n"); + report_info("Getting timestamp to of non-timestamp constraint!"); return 0; } return c.data.timestamp_range.to; @@ -781,7 +781,7 @@ timestamp_t filter_constraint_get_timestamp_to(const filter_constraint &c) uint64_t filter_constraint_get_multiple_choice(const filter_constraint &c) { if (!filter_constraint_is_multiple_choice(c.type)) { - fprintf(stderr, "Getting multiple-choice of non-multiple choice constraint!\n"); + report_info("Getting multiple-choice of non-multiple choice constraint!"); return 0; } return c.data.multiple_choice; diff --git a/core/gas.c b/core/gas.c index 7e8a98309..d43781e8a 100644 --- a/core/gas.c +++ b/core/gas.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include "gas.h" #include "pref.h" +#include "errorhelper.h" #include "gettext.h" #include #include @@ -59,7 +60,7 @@ void sanitize_gasmix(struct gasmix *mix) /* Sane mix? */ if (o2 <= 1000 && he <= 1000 && o2 + he <= 1000) return; - fprintf(stderr, "Odd gasmix: %u O2 %u He\n", o2, he); + report_info("Odd gasmix: %u O2 %u He", o2, he); memset(mix, 0, sizeof(*mix)); } diff --git a/core/import-cobalt.cpp b/core/import-cobalt.cpp index 1155c7091..d79a9a35e 100644 --- a/core/import-cobalt.cpp +++ b/core/import-cobalt.cpp @@ -8,6 +8,7 @@ #include "ssrf.h" #include "dive.h" #include "divesite.h" +#include "errorhelper.h" #include "gas.h" #include "parse.h" #include "sample.h" @@ -147,35 +148,35 @@ static int cobalt_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_cylinder_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_buffer, &cobalt_cylinders, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query cobalt_cylinders failed.\n"); + report_info("Database query cobalt_cylinders failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_buddy_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_buffer, &cobalt_buddies, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query cobalt_buddies failed.\n"); + report_info("Database query cobalt_buddies failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_visibility_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_buffer, &cobalt_visibility, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query cobalt_visibility failed.\n"); + report_info("Database query cobalt_visibility failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_location_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_buffer, &cobalt_location, &location, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query cobalt_location failed.\n"); + report_info("Database query cobalt_location failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_site_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_buffer, &cobalt_location, &location_site, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query cobalt_location (site) failed.\n"); + report_info("Database query cobalt_location (site) failed."); return 1; } @@ -196,7 +197,7 @@ static int cobalt_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_profile_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_buffer, &cobalt_profile_sample, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query cobalt_profile_sample failed.\n"); + report_info("Database query cobalt_profile_sample failed."); return 1; } @@ -219,7 +220,7 @@ extern "C" int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char retval = sqlite3_exec(handle, get_dives, &cobalt_dive, &state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "Database query failed '%s'.\n", url); + report_info("Database query failed '%s'.\n", url); return 1; } diff --git a/core/import-csv.cpp b/core/import-csv.cpp index e16e9174b..777db16a9 100644 --- a/core/import-csv.cpp +++ b/core/import-csv.cpp @@ -10,6 +10,7 @@ #include "divelist.h" #include "divelog.h" #include "file.h" +#include "format.h" #include "parse.h" #include "sample.h" #include "divelist.h" @@ -100,7 +101,7 @@ static char *parse_dan_new_line(char *buf, const char *NL) if (iter) { iter += strlen(NL); } else { - fprintf(stderr, "DEBUG: No new line found\n"); + report_info("DEBUG: No new line found"); return NULL; } return iter; @@ -128,7 +129,7 @@ static int parse_dan_format(const char *filename, struct xml_params *params, str } else if ((ptr = strstr(mem.data(), "\n")) != NULL) { NL = "\n"; } else { - fprintf(stderr, "DEBUG: failed to detect NL\n"); + report_info("DEBUG: failed to detect NL"); return -1; } @@ -144,7 +145,7 @@ static int parse_dan_format(const char *filename, struct xml_params *params, str xml_params_add(params, "diveNro", tmpbuf); } - //fprintf(stderr, "DEBUG: BEGIN end_ptr %d round %d <%s>\n", end_ptr, j++, ptr); + //report_info("DEBUG: BEGIN end_ptr %d round %d <%s>", end_ptr, j++, ptr); iter = ptr + 1; for (i = 0; i <= 4 && iter; ++i) { iter = strchr(iter, '|'); @@ -153,7 +154,7 @@ static int parse_dan_format(const char *filename, struct xml_params *params, str } if (!iter) { - fprintf(stderr, "DEBUG: Data corrupt"); + report_info("DEBUG: Data corrupt"); return -1; } @@ -214,7 +215,7 @@ static int parse_dan_format(const char *filename, struct xml_params *params, str /* After ZDH we should get either ZDT (above) or ZDP */ if (strncmp(iter, "ZDP{", 4) != 0) { - fprintf(stderr, "DEBUG: Input appears to violate DL7 specification\n"); + report_info("DEBUG: Input appears to violate DL7 specification"); end_ptr = iter - mem.data(); continue; } @@ -236,7 +237,7 @@ static int parse_dan_format(const char *filename, struct xml_params *params, str if (ptr) { *ptr = 0; } else { - fprintf(stderr, "DEBUG: failed to find end ZDP\n"); + report_info("DEBUG: failed to find end ZDP"); return -1; } mem_csv.resize(ptr - mem_csv.data()); @@ -313,10 +314,11 @@ extern "C" int parse_csv_file(const char *filename, struct xml_params *params, c #ifndef SUBSURFACE_MOBILE if (verbose >= 2) { - fprintf(stderr, "(echo ''; cat %s;echo '') | xsltproc ", filename); + std::string info = format_string_std("(echo ''; cat %s;echo '') | xsltproc ", filename); for (int i = 0; i < xml_params_count(params); i++) - fprintf(stderr, "--stringparam %s %s ", xml_params_get_key(params, i), xml_params_get_value(params, i)); - fprintf(stderr, "%s/xslt/%s -\n", SUBSURFACE_SOURCE, csvtemplate); + info += format_string_std("--stringparam %s %s ", xml_params_get_key(params, i), xml_params_get_value(params, i)); + info += format_string_std("%s/xslt/%s -", SUBSURFACE_SOURCE, csvtemplate); + report_info("%s", info.c_str()); } #endif ret = parse_xml_buffer(filename, mem.data(), mem.size(), log, params); @@ -385,8 +387,11 @@ static int try_to_xslt_open_csv(const char *filename, std::string &mem, const ch memcpy(ptr_out, tag, tag_name_size); *--ptr_out = '<'; + // On Windows, ptrdiff_t is long long int, on Linux it is long int. + // Windows doesn't support the ptrdiff_t format specifier "%td", so + // let's cast to long int. if (ptr_out != mem.data()) - fprintf(stderr, "try_to_xslt_open_csv(): ptr_out off by %ld. This shouldn't happen\n", ptr_out - mem.data()); + report_info("try_to_xslt_open_csv(): ptr_out off by %ld. This shouldn't happen", static_cast(ptr_out - mem.data())); return 0; } @@ -719,7 +724,7 @@ int parse_txt_file(const char *filename, const char *csv, struct divelog *log) case EOF: break; default: - printf("Unable to parse input: %s\n", lineptr); + report_info("Unable to parse input: %s\n", lineptr); break; } @@ -886,10 +891,11 @@ static int parse_seabear_csv_file(const char *filename, struct xml_params *param */ if (verbose >= 2) { - fprintf(stderr, "xsltproc "); + std::string info = "xsltproc "; for (i = 0; i < xml_params_count(params); i++) - fprintf(stderr, "--stringparam %s %s ", xml_params_get_key(params, i), xml_params_get_value(params, i)); - fprintf(stderr, "xslt/csv2xml.xslt\n"); + info += format_string_std("--stringparam %s %s ", xml_params_get_key(params, i), xml_params_get_value(params, i)); + info += "xslt/csv2xml.xslt"; + report_info("%s", info.c_str()); } ret = parse_xml_buffer(filename, mem.data(), mem.size(), log, params); @@ -926,10 +932,11 @@ int parse_manual_file(const char *filename, struct xml_params *params, struct di #ifndef SUBSURFACE_MOBILE if (verbose >= 2) { - fprintf(stderr, "(echo ''; cat %s;echo '') | xsltproc ", filename); + std::string info = format_string_std("(echo ''; cat %s;echo '') | xsltproc ", filename); for (int i = 0; i < xml_params_count(params); i++) - fprintf(stderr, "--stringparam %s %s ", xml_params_get_key(params, i), xml_params_get_value(params, i)); - fprintf(stderr, "%s/xslt/manualcsv2xml.xslt -\n", SUBSURFACE_SOURCE); + info += format_string_std("--stringparam %s %s ", xml_params_get_key(params, i), xml_params_get_value(params, i)); + info += format_string_std("%s/xslt/manualcsv2xml.xslt -", SUBSURFACE_SOURCE); + report_info("%s", info.c_str()); } #endif ret = parse_xml_buffer(filename, mem.data(), mem.size(), log, params); diff --git a/core/import-divinglog.cpp b/core/import-divinglog.cpp index 4609b2207..8b4230721 100644 --- a/core/import-divinglog.cpp +++ b/core/import-divinglog.cpp @@ -13,6 +13,7 @@ #include "divelist.h" #include "divelog.h" #include "device.h" +#include "errorhelper.h" #include "membuffer.h" #include "gettext.h" @@ -336,14 +337,14 @@ static int divinglog_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_cylinder0_template, diveid); retval = sqlite3_exec(handle, get_buffer, &divinglog_cylinder, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query divinglog_cylinder0 failed.\n"); + report_info("Database query divinglog_cylinder0 failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_cylinder_template, diveid); retval = sqlite3_exec(handle, get_buffer, &divinglog_cylinder, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query divinglog_cylinder failed.\n"); + report_info("Database query divinglog_cylinder failed."); return 1; } @@ -373,7 +374,7 @@ static int divinglog_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_profile_template, diveid); retval = sqlite3_exec(handle, get_buffer, &divinglog_profile, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query divinglog_profile failed.\n"); + report_info("Database query divinglog_profile failed."); return 1; } @@ -396,7 +397,7 @@ extern "C" int parse_divinglog_buffer(sqlite3 *handle, const char *url, const ch retval = sqlite3_exec(handle, get_dives, &divinglog_dive, &state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "Database query failed '%s'.\n", url); + report_info("Database query failed '%s'.", url); return 1; } diff --git a/core/import-seac.cpp b/core/import-seac.cpp index ac52ea18a..07416e47e 100644 --- a/core/import-seac.cpp +++ b/core/import-seac.cpp @@ -143,7 +143,7 @@ static int seac_dive(void *param, int, char **data, char **) break; default: if (verbose) { - fprintf(stderr, "Unknown divetype %i", atoi(data[6])); + report_info("Unknown divetype %i", atoi(data[6])); } } } @@ -174,7 +174,7 @@ static int seac_dive(void *param, int, char **data, char **) break; default: if (verbose) { - fprintf(stderr, "Unknown salinity %i", atoi(data[8])); + report_info("Unknown salinity %i", atoi(data[8])); } } } @@ -187,7 +187,7 @@ static int seac_dive(void *param, int, char **data, char **) // Create sql_stmt type to query DB retval = sqlite3_prepare_v2(handle, get_samples, -1, &sqlstmt, 0); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Preparing SQL object failed when getting SeacSync dives.\n"); + report_info("Preparing SQL object failed when getting SeacSync dives."); return 1; } @@ -198,7 +198,7 @@ static int seac_dive(void *param, int, char **data, char **) // Catch a bad query retval = sqlite3_step(sqlstmt); if (retval == SQLITE_ERROR) { - fprintf(stderr, "%s", "Getting dive data from SeacSync DB failed.\n"); + report_info("Getting dive data from SeacSync DB failed."); return 1; } @@ -293,7 +293,7 @@ extern "C" int parse_seac_buffer(sqlite3 *handle, const char *url, const char *, retval = sqlite3_exec(handle, get_dives, &seac_dive, &state, &err); if (retval != SQLITE_OK) { - fprintf(stderr, "Database query failed '%s'.\n", url); + report_info("Database query failed '%s'.", url); return 1; } diff --git a/core/import-shearwater.cpp b/core/import-shearwater.cpp index 8bb0708cc..07c3a6a8f 100644 --- a/core/import-shearwater.cpp +++ b/core/import-shearwater.cpp @@ -12,6 +12,7 @@ #include "divelist.h" #include "divelog.h" #include "device.h" +#include "errorhelper.h" #include "membuffer.h" #include "gettext.h" @@ -300,7 +301,7 @@ static int shearwater_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_mode_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_mode, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_mode failed.\n"); + report_info("Database query shearwater_mode failed."); return 1; } } @@ -308,14 +309,14 @@ static int shearwater_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_cylinder_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_cylinders, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_cylinders failed.\n"); + report_info("Database query shearwater_cylinders failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_changes_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_changes, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_changes failed.\n"); + report_info("Database query shearwater_changes failed."); return 1; } @@ -325,7 +326,7 @@ static int shearwater_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_profile_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_profile_sample, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_profile_sample failed.\n"); + report_info("Database query shearwater_profile_sample failed."); return 1; } } @@ -430,7 +431,7 @@ static int shearwater_cloud_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_mode_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_mode, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_mode failed.\n"); + report_info("Database query shearwater_mode failed."); return 1; } } @@ -438,21 +439,21 @@ static int shearwater_cloud_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_cylinder_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_cylinders, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_cylinders failed.\n"); + report_info("Database query shearwater_cylinders failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_first_gas_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_changes, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_changes failed.\n"); + report_info("Database query shearwater_changes failed."); return 1; } snprintf(get_buffer, sizeof(get_buffer) - 1, get_changes_template, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_changes, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_changes failed.\n"); + report_info("Database query shearwater_changes failed."); return 1; } @@ -462,7 +463,7 @@ static int shearwater_cloud_dive(void *param, int, char **data, char **) snprintf(get_buffer, sizeof(get_buffer) - 1, get_profile_template, dive_id, dive_id); retval = sqlite3_exec(handle, get_buffer, &shearwater_profile_sample, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query shearwater_profile_sample failed.\n"); + report_info("Database query shearwater_profile_sample failed."); return 1; } } @@ -488,7 +489,7 @@ extern "C" int parse_shearwater_buffer(sqlite3 *handle, const char *url, const c retval = sqlite3_exec(handle, get_dives, &shearwater_dive, &state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "Database query failed '%s'.\n", url); + report_info("Database query failed '%s'.", url); return 1; } @@ -508,7 +509,7 @@ extern "C" int parse_shearwater_cloud_buffer(sqlite3 *handle, const char *url, c retval = sqlite3_exec(handle, get_dives, &shearwater_cloud_dive, &state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "Database query failed '%s'.\n", url); + report_info("Database query failed '%s'.", url); return 1; } diff --git a/core/import-suunto.cpp b/core/import-suunto.cpp index af5fa256b..0ed7dc396 100644 --- a/core/import-suunto.cpp +++ b/core/import-suunto.cpp @@ -12,6 +12,7 @@ #include "divelist.h" #include "divelog.h" #include "device.h" +#include "errorhelper.h" #include "membuffer.h" #include "gettext.h" #include "tag.h" @@ -260,30 +261,19 @@ static int dm4_dive(void *param, int, char **data, char **) snprintf(get_events, sizeof(get_events) - 1, get_events_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_events, &dm4_events, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query dm4_events failed.\n"); + report_info("Database query dm4_events failed."); return 1; } snprintf(get_events, sizeof(get_events) - 1, get_tags_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_events, &dm4_tags, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query dm4_tags failed.\n"); + report_info("Database query dm4_tags failed."); return 1; } dive_end(state); - /* - for (i=0; icur_dive->number); retval = sqlite3_exec(handle, get_events, &dm5_cylinders, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query dm5_cylinders failed.\n"); + report_info("Database query dm5_cylinders failed."); return 1; } @@ -536,21 +526,21 @@ static int dm5_dive(void *param, int, char **data, char **) snprintf(get_events, sizeof(get_events) - 1, get_gaschange_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_events, &dm5_gaschange, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query dm5_gaschange failed.\n"); + report_info("Database query dm5_gaschange failed."); return 1; } snprintf(get_events, sizeof(get_events) - 1, get_events_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_events, &dm4_events, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query dm4_events failed.\n"); + report_info("Database query dm4_events failed."); return 1; } snprintf(get_events, sizeof(get_events) - 1, get_tags_template, state->cur_dive->number); retval = sqlite3_exec(handle, get_events, &dm4_tags, state, NULL); if (retval != SQLITE_OK) { - fprintf(stderr, "%s", "Database query dm4_tags failed.\n"); + report_info("Database query dm4_tags failed."); return 1; } @@ -575,7 +565,7 @@ extern "C" int parse_dm5_buffer(sqlite3 *handle, const char *url, const char *, retval = sqlite3_exec(handle, get_dives, &dm5_dive, &state, &err); if (retval != SQLITE_OK) { - fprintf(stderr, "Database query failed '%s'.\n", url); + report_info("Database query failed '%s'.", url); return 1; } diff --git a/core/libdivecomputer.cpp b/core/libdivecomputer.cpp index 9d989bb54..c246e6565 100644 --- a/core/libdivecomputer.cpp +++ b/core/libdivecomputer.cpp @@ -51,15 +51,8 @@ static int stoptime, stopdepth, ndl, po2, cns, heartbeat, bearing; static bool in_deco, first_temp_is_air; static int current_gas_index; -/* logging bits from libdivecomputer */ -#ifndef __ANDROID__ -#define INFO(context, fmt, ...) fprintf(stderr, "INFO: " fmt "\n", ##__VA_ARGS__) -#define ERROR(context, fmt, ...) fprintf(stderr, "ERROR: " fmt "\n", ##__VA_ARGS__) -#else -#include -#define INFO(context, fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "INFO: " fmt "\n", ##__VA_ARGS__) -#define ERROR(context, fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "ERROR: " fmt "\n", ##__VA_ARGS__) -#endif +#define INFO(context, fmt, ...) report_info("INFO: " fmt, ##__VA_ARGS__) +#define ERROR(context, fmt, ...) report_info("ERROR: " fmt, ##__VA_ARGS__) /* * Directly taken from libdivecomputer's examples/common.c to improve @@ -504,7 +497,7 @@ static void dev_info(device_data_t *, const char *fmt, ...) va_end(ap); progress_bar_text = buffer; if (verbose) - INFO(0, "dev_info: %s\n", buffer); + INFO(0, "dev_info: %s", buffer); if (progress_callback) (*progress_callback)(buffer); @@ -1099,14 +1092,14 @@ static void event_cb(dc_device_t *device, dc_event_type_t event, const void *dat if (dc_descriptor_get_model(devdata->descriptor) != devinfo->model) { dc_descriptor_t *better_descriptor = get_descriptor(dc_descriptor_get_type(devdata->descriptor), devinfo->model); if (better_descriptor != NULL) { - fprintf(stderr, "EVENT_DEVINFO gave us a different detected product (model %d instead of %d), which we are using now.\n", + report_info("EVENT_DEVINFO gave us a different detected product (model %d instead of %d), which we are using now.", devinfo->model, dc_descriptor_get_model(devdata->descriptor)); devdata->descriptor = better_descriptor; devdata->product = dc_descriptor_get_product(better_descriptor); devdata->vendor = dc_descriptor_get_vendor(better_descriptor); devdata->model = str_printf("%s %s", devdata->vendor, devdata->product); } else { - fprintf(stderr, "EVENT_DEVINFO gave us a different detected product (model %d instead of %d), but that one is unknown.\n", + report_info("EVENT_DEVINFO gave us a different detected product (model %d instead of %d), but that one is unknown.", devinfo->model, dc_descriptor_get_model(devdata->descriptor)); } } @@ -1288,7 +1281,7 @@ static dc_status_t usbhid_device_open(dc_iostream_t **iostream, dc_context_t *co dc_iterator_free (iterator); if (!device) { - ERROR(context, "didn't find HID device\n"); + ERROR(context, "didn't find HID device"); return DC_STATUS_NODEVICE; } dev_info(data, "Opening USB HID device for %04x:%04x", @@ -1639,7 +1632,7 @@ dc_descriptor_t *get_descriptor(dc_family_t type, unsigned int model) rc = dc_descriptor_iterator(&iterator); if (rc != DC_STATUS_SUCCESS) { - fprintf(stderr, "Error creating the device descriptor iterator.\n"); + report_info("Error creating the device descriptor iterator."); return NULL; } while ((dc_iterator_next(iterator, &descriptor)) == DC_STATUS_SUCCESS) { diff --git a/core/liquivision.cpp b/core/liquivision.cpp index a6bce5668..5d4b5e6a9 100644 --- a/core/liquivision.cpp +++ b/core/liquivision.cpp @@ -6,6 +6,7 @@ #include "divesite.h" #include "dive.h" #include "divelog.h" +#include "errorhelper.h" #include "file.h" #include "sample.h" #include "strndup.h" @@ -279,11 +280,11 @@ static void parse_dives(int log_version, const unsigned char *buf, unsigned int } if (sample_count == 0) { - fprintf(stderr, "DEBUG: sample count 0 - terminating parser\n"); + report_info("DEBUG: sample count 0 - terminating parser"); break; } if (ptr + sample_count * 4 + 4 > buf_size) { - fprintf(stderr, "DEBUG: BOF - terminating parser\n"); + report_info("DEBUG: BOF - terminating parser"); break; } // we aren't using the start_cns, dive_mode, and algorithm, yet diff --git a/core/parse-gpx.cpp b/core/parse-gpx.cpp index 49471c7f3..70e7b2fad 100644 --- a/core/parse-gpx.cpp +++ b/core/parse-gpx.cpp @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 #include "core/parse-gpx.h" +#include "core/errorhelper.h" #include "core/subsurface-time.h" #include "core/namecmp.h" #include @@ -25,7 +26,7 @@ int getCoordsFromGPXFile(struct dive_coords *coords, const QString &fileName) if (!gpxFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QByteArray local8bitBAString1 = fileName.toLocal8Bit(); char *fname = local8bitBAString1.data(); // convert QString to a C string fileName - fprintf(stderr, "GPS file open error: file name = %s\n", fname); + report_info("GPS file open error: file name = %s", fname); return 1; } @@ -76,7 +77,7 @@ int getCoordsFromGPXFile(struct dive_coords *coords, const QString &fileName) #ifdef GPSDEBUG utc_mkdate(trkpt_time, &time); // print coordinates and time of each trkpt element of the GPX file as well as dive start time - fprintf(stderr, " %02d: lat=%f lon=%f timestamp=%ld (%ld) %02d/%02d/%02d %02d:%02d dt=%ld %02d/%02d/%02d %02d:%02d\n", line, lat, + report_info(" %02d: lat=%f lon=%f timestamp=%ld (%ld) %02d/%02d/%02d %02d:%02d dt=%ld %02d/%02d/%02d %02d:%02d", line, lat, lon, trkpt_time, time_offset, time.tm_year, time.tm_mon+1, time.tm_mday, time.tm_hour, time.tm_min, divetime, dyr, dmon+1, dday,dhr, dmin); #endif diff --git a/core/parse-xml.cpp b/core/parse-xml.cpp index 4b1cf9ca6..d3428758d 100644 --- a/core/parse-xml.cpp +++ b/core/parse-xml.cpp @@ -56,7 +56,7 @@ static void divedate(const char *buffer, timestamp_t *when, struct parser_state } else if (sscanf(buffer, "%d-%d-%d %d:%d:%d", &y, &m, &d, &hh, &mm, &ss) >= 3) { /* This is also ok */ } else { - fprintf(stderr, "Unable to parse date '%s'\n", buffer); + report_info("Unable to parse date '%s'", buffer); return; } state->cur_tm.tm_year = y; @@ -166,7 +166,7 @@ static enum number_type parse_float(const char *buffer, double *res, const char * as this is likely indication of a bug - but right now we don't have * that information available */ if (first_time) { - fprintf(stderr, "Floating point value with decimal comma (%s)?\n", buffer); + report_info("Floating point value with decimal comma (%s)?", buffer); first_time = false; } /* Try again in permissive mode*/ @@ -218,7 +218,7 @@ static void pressure(const char *buffer, pressure_t *pressure, struct parser_sta } /* fallthrough */ default: - printf("Strange pressure reading %s\n", buffer); + report_info("Strange pressure reading %s", buffer); } } @@ -253,7 +253,7 @@ static void salinity(const char *buffer, int *salinity) *salinity = lrint(val.fp * 10.0); break; default: - printf("Strange salinity reading %s\n", buffer); + report_info("Strange salinity reading %s", buffer); } } @@ -273,7 +273,7 @@ static void depth(const char *buffer, depth_t *depth, struct parser_state *state } break; default: - printf("Strange depth reading %s\n", buffer); + report_info("Strange depth reading %s", buffer); } } @@ -306,7 +306,7 @@ static void weight(const char *buffer, weight_t *weight, struct parser_state *st } break; default: - printf("Strange weight reading %s\n", buffer); + report_info("Strange weight reading %s", buffer); } } @@ -329,7 +329,7 @@ static void temperature(const char *buffer, temperature_t *temperature, struct p } break; default: - printf("Strange temperature reading %s\n", buffer); + report_info("Strange temperature reading %s", buffer); } /* temperatures outside -40C .. +70C should be ignored */ if (temperature->mkelvin < ZERO_C_IN_MKELVIN - 40000 || @@ -358,7 +358,7 @@ static void sampletime(const char *buffer, duration_t *time) break; default: time->seconds = 0; - printf("Strange sample time reading %s\n", buffer); + report_info("Strange sample time reading %s", buffer); } } @@ -412,7 +412,7 @@ static void percent(const char *buffer, fraction_t *fraction) break; } default: - printf(translate("gettextFromC", "Strange percentage reading %s\n"), buffer); + report_info(translate("gettextFromC", "Strange percentage reading %s"), buffer); break; } } @@ -440,7 +440,7 @@ static void cylindersize(const char *buffer, volume_t *volume) break; default: - printf("Strange volume reading %s\n", buffer); + report_info("Strange volume reading %s", buffer); break; } } @@ -620,7 +620,7 @@ static void fahrenheit(const char *buffer, temperature_t *temperature) temperature->mkelvin = F_to_mkelvin(val.fp); break; default: - fprintf(stderr, "Crazy Diving Log temperature reading %s\n", buffer); + report_info("Crazy Diving Log temperature reading %s", buffer); } } @@ -656,7 +656,7 @@ static void psi_or_bar(const char *buffer, pressure_t *pressure) pressure->mbar = lrint(val.fp * 1000); break; default: - fprintf(stderr, "Crazy Diving Log PSI reading %s\n", buffer); + report_info("Crazy Diving Log PSI reading %s", buffer); } } @@ -1069,7 +1069,7 @@ static void uddf_datetime(const char *buffer, timestamp_t *when, struct parser_s if (i == 6) goto success; bad_date: - printf("Bad date time %s\n", buffer); + report_info("Bad date time %s", buffer); return; success: @@ -1169,7 +1169,7 @@ static void gps_lat(const char *buffer, struct dive *dive, struct parser_state * add_dive_to_dive_site(dive, create_dive_site_with_gps(NULL, &location, state->log->sites)); } else { if (ds->location.lat.udeg && ds->location.lat.udeg != location.lat.udeg) - fprintf(stderr, "Oops, changing the latitude of existing dive site id %8x name %s; not good\n", ds->uuid, ds->name ?: "(unknown)"); + report_info("Oops, changing the latitude of existing dive site id %8x name %s; not good", ds->uuid, ds->name ?: "(unknown)"); ds->location.lat = location.lat; } } @@ -1185,7 +1185,7 @@ static void gps_long(const char *buffer, struct dive *dive, struct parser_state add_dive_to_dive_site(dive, create_dive_site_with_gps(NULL, &location, state->log->sites)); } else { if (ds->location.lon.udeg && ds->location.lon.udeg != location.lon.udeg) - fprintf(stderr, "Oops, changing the longitude of existing dive site id %8x name %s; not good\n", ds->uuid, ds->name ?: "(unknown)"); + report_info("Oops, changing the longitude of existing dive site id %8x name %s; not good", ds->uuid, ds->name ?: "(unknown)"); ds->location.lon = location.lon; } } @@ -1226,7 +1226,7 @@ static void gps_in_dive(const char *buffer, struct dive *dive, struct parser_sta if (dive_site_has_gps_location(ds) && has_location(&location) && !same_location(&ds->location, &location)) { // Houston, we have a problem - fprintf(stderr, "dive site uuid in dive, but gps location (%10.6f/%10.6f) different from dive location (%10.6f/%10.6f)\n", + report_info("dive site uuid in dive, but gps location (%10.6f/%10.6f) different from dive location (%10.6f/%10.6f)", ds->location.lat.udeg / 1000000.0, ds->location.lon.udeg / 1000000.0, location.lat.udeg / 1000000.0, location.lon.udeg / 1000000.0); std::string coords = printGPSCoordsC(&location); @@ -2219,11 +2219,11 @@ extern "C" int parse_dlf_buffer(unsigned char *buffer, size_t size, struct divel break; case 2: /* Measure He */ - //printf("%ds he2 cells(0.01 mV): %d %d\n", time, (ptr[5] << 8) + ptr[4], (ptr[9] << 8) + ptr[8]); + //report_info("%ds he2 cells(0.01 mV): %d %d", time, (ptr[5] << 8) + ptr[4], (ptr[9] << 8) + ptr[8]); break; case 3: /* Measure Oxygen */ - //printf("%d s: o2 cells(0.01 mV): %d %d %d %d\n", time, (ptr[5] << 8) + ptr[4], (ptr[7] << 8) + ptr[6], (ptr[9] << 8) + ptr[8], (ptr[11] << 8) + ptr[10]); + //report_info("%d s: o2 cells(0.01 mV): %d %d %d %d", time, (ptr[5] << 8) + ptr[4], (ptr[7] << 8) + ptr[6], (ptr[9] << 8) + ptr[8], (ptr[11] << 8) + ptr[10]); // [Pa/mV] coeficient O2 // 100 Pa == 1 mbar sample_start(&state); diff --git a/core/profile.cpp b/core/profile.cpp index 5acc5d970..a6e71839c 100644 --- a/core/profile.cpp +++ b/core/profile.cpp @@ -11,6 +11,7 @@ #include "dive.h" #include "divelist.h" +#include "errorhelper.h" #include "event.h" #include "interpolate.h" #include "sample.h" @@ -208,7 +209,7 @@ extern "C" int get_cylinder_index(const struct dive *dive, const struct event *e * We now match up gas change events with their cylinders at dive * event fixup time. */ - report_info("Still looking up cylinder based on gas mix in get_cylinder_index()!\n"); + report_info("Still looking up cylinder based on gas mix in get_cylinder_index()!"); mix = get_gasmix_from_event(dive, ev); best = find_best_gasmix_match(mix, &dive->cylinders); @@ -771,7 +772,7 @@ static void setup_gas_sensor_pressure(const struct dive *dive, const struct dive if (cyl < 0) continue; // unknown cylinder if (cyl >= num_cyl) { - fprintf(stderr, "setup_gas_sensor_pressure(): invalid cylinder idx %d\n", cyl); + report_info("setup_gas_sensor_pressure(): invalid cylinder idx %d", cyl); continue; } @@ -965,7 +966,7 @@ static void calculate_deco_information(struct deco_state *ds, const struct deco_ entry->ambpressure = depth_to_bar(entry->depth, dive); entry->gfline = get_gf(ds, entry->ambpressure, dive) * (100.0 - AMB_PERCENTAGE) + AMB_PERCENTAGE; if (t0 > t1) { - report_info("non-monotonous dive stamps %d %d\n", t0, t1); + report_info("non-monotonous dive stamps %d %d", t0, t1); int xchg = t1; t1 = t0; t0 = xchg; diff --git a/core/save-xml.cpp b/core/save-xml.cpp index 68ebd7158..91782cd55 100644 --- a/core/save-xml.cpp +++ b/core/save-xml.cpp @@ -865,7 +865,7 @@ static int export_dives_xslt_doit(const char *filename, struct xml_params *param int res = 0; if (verbose) - fprintf(stderr, "export_dives_xslt with stylesheet %s\n", export_xslt); + report_info("export_dives_xslt with stylesheet %s", export_xslt); if (!filename) return report_error("No filename for export"); diff --git a/core/selection.cpp b/core/selection.cpp index ca38359df..616ad6f5b 100644 --- a/core/selection.cpp +++ b/core/selection.cpp @@ -4,6 +4,7 @@ #include "selection.h" #include "divelist.h" #include "divelog.h" +#include "errorhelper.h" #include "trip.h" #include "subsurface-qt/divelistnotifier.h" @@ -318,6 +319,6 @@ extern "C" struct dive_trip *single_selected_trip() if (divelog.trips->trips[i]->selected) return divelog.trips->trips[i]; } - fprintf(stderr, "warning: found no selected trip even though one should be selected\n"); + report_info("warning: found no selected trip even though one should be selected"); return NULL; // shouldn't happen } diff --git a/core/serial_ftdi.c b/core/serial_ftdi.c index 7bc7f2805..556807fd6 100644 --- a/core/serial_ftdi.c +++ b/core/serial_ftdi.c @@ -37,14 +37,9 @@ #include // nanosleep #endif -#ifndef __ANDROID__ -#define INFO(context, fmt, ...) fprintf(stderr, "INFO: " fmt "\n", ##__VA_ARGS__) -#define ERROR(context, fmt, ...) fprintf(stderr, "ERROR: " fmt "\n", ##__VA_ARGS__) -#else -#include -#define INFO(context, fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "INFO: " fmt "\n", ##__VA_ARGS__) -#define ERROR(context, fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "ERROR: " fmt "\n", ##__VA_ARGS__) -#endif +#include "errorhelper.h" +#define INFO(context, fmt, ...) report_info(stderr, "INFO: " fmt, ##__VA_ARGS__) +#define ERROR(context, fmt, ...) report_info(stderr, "ERROR: " fmt, ##__VA_ARGS__) //#define SYSERROR(context, errcode) ERROR(__FILE__ ":" __LINE__ ": %s", strerror(errcode)) #define SYSERROR(context, errcode) ; @@ -161,7 +156,7 @@ static int serial_ftdi_open_device (struct ftdi_context *ftdi_ctx) for (i = 0; i < num_accepted_pids; i++) { pid = accepted_pids[i]; ret = ftdi_usb_open (ftdi_ctx, VID, pid); - INFO(0, "FTDI tried VID %04x pid %04x ret %d\n", VID, pid, ret); + INFO(0, "FTDI tried VID %04x pid %04x ret %d", VID, pid, ret); if (ret == -3) // Device not found continue; else @@ -257,7 +252,7 @@ static dc_status_t serial_ftdi_close (void *io) int ret = ftdi_usb_close(device->ftdi_ctx); if (ret < 0) { - ERROR (device->context, "Unable to close the ftdi device : %d (%s)\n", + ERROR (device->context, "Unable to close the ftdi device : %d (%s)", ret, ftdi_get_error_string(device->ftdi_ctx)); return ret; } diff --git a/core/uemis-downloader.cpp b/core/uemis-downloader.cpp index 30571c2ac..37bdfce23 100644 --- a/core/uemis-downloader.cpp +++ b/core/uemis-downloader.cpp @@ -232,7 +232,7 @@ static void uemis_info(const char *fmt, ...) va_end(ap); progress_bar_text = buffer; if (verbose) - fprintf(stderr, "Uemis downloader: %s\n", buffer); + report_info("Uemis downloader: %s", buffer); } static long bytes_available(int file) @@ -643,7 +643,7 @@ static bool uemis_get_answer(const char *path, const char *request, int n_param_ reqtxt_file = subsurface_open(reqtxt_path, O_RDWR | O_CREAT, 0666); if (reqtxt_file < 0) { *error_text = "can't open req.txt"; - fprintf(stderr, "open %s failed with errno %d\n", reqtxt_path, errno); + report_info("open %s failed with errno %d", reqtxt_path, errno); return false; } trigger_response(reqtxt_file, "n", filenr, file_length); @@ -658,7 +658,7 @@ static bool uemis_get_answer(const char *path, const char *request, int n_param_ reqtxt_file = subsurface_open(reqtxt_path, O_RDWR | O_CREAT, 0666); if (reqtxt_file < 0) { *error_text = "can't open req.txt"; - fprintf(stderr, "open %s failed with errno %d\n", reqtxt_path, errno); + report_info("open %s failed with errno %d", reqtxt_path, errno); return false; } trigger_response(reqtxt_file, "r", filenr, file_length); @@ -1294,7 +1294,7 @@ static bool get_matching_dive(int idx, char *newmax, int *uemis_mem_status, devi dive_to_read = -1; } else if (!strstr(mbuf, "act{") && ++fail_count == 10) { if (verbose) - fprintf(stderr, "Uemis downloader: Cannot access dive details - searching from start\n"); + report_info("Uemis downloader: Cannot access dive details - searching from start"); dive_to_read = -1; } } @@ -1367,7 +1367,7 @@ const char *do_uemis_import(device_data_t *data) param_buff[1] = "notempty"; newmax = uemis_get_divenr(deviceid, data->log->dives, force_download); if (verbose) - fprintf(stderr, "Uemis downloader: start looking at dive nr %s\n", newmax); + report_info("Uemis downloader: start looking at dive nr %s", newmax); first = start = atoi(newmax); dive_to_read = (int)mindiveid < first ? first - mindiveid : first; @@ -1453,7 +1453,7 @@ const char *do_uemis_import(device_data_t *data) if (!uemis_get_answer(mountpath, "getDeviceId", 0, 1, &result)) goto bail; if (strcmp(deviceid, param_buff[0]) != 0) { - fprintf(stderr, "Uemis: Device id has changed after reconnect!\n"); + report_info("Uemis: Device id has changed after reconnect!"); goto bail; } param_buff[0] = strdup(deviceid); diff --git a/core/uemis.c b/core/uemis.c index c4950a890..967a56d71 100644 --- a/core/uemis.c +++ b/core/uemis.c @@ -15,6 +15,7 @@ #include "uemis.h" #include "divesite.h" +#include "errorhelper.h" #include "sample.h" #include #include @@ -85,7 +86,7 @@ static int uemis_convert_base64(char *base64, uint8_t **data) datalen = (len / 4 + 1) * 3; if (datalen < 0x123 + 0x25) /* less than header + 1 sample??? */ - fprintf(stderr, "suspiciously short data block %d\n", datalen); + report_info("suspiciously short data block %d", datalen); *data = malloc(datalen); if (!*data) { @@ -95,7 +96,7 @@ static int uemis_convert_base64(char *base64, uint8_t **data) decode((unsigned char *)base64, *data, len); if (memcmp(*data, "Dive\01\00\00", 7)) - fprintf(stderr, "Missing Dive100 header\n"); + report_info("Missing Dive100 header"); return datalen; } @@ -350,7 +351,7 @@ void uemis_parse_divelog_binary(char *base64, void *datap) while ((i <= datalen) && (data[i] != 0 || data[i + 1] != 0)) { if (u_sample->active_tank != active) { if (u_sample->active_tank >= dive->cylinders.nr) { - fprintf(stderr, "got invalid sensor #%d was #%d\n", u_sample->active_tank, active); + report_info("got invalid sensor #%d was #%d", u_sample->active_tank, active); } else { active = u_sample->active_tank; add_gas_switch_event(dive, dc, u_sample->dive_time, active); diff --git a/core/windows.cpp b/core/windows.cpp index 26d7535ee..76a37fe6a 100644 --- a/core/windows.cpp +++ b/core/windows.cpp @@ -32,7 +32,7 @@ static std::string utf16_to_utf8_fl(const std::wstring &utf16, const char *file, /* estimate buffer size */ const int sz = WideCharToMultiByte(CP_UTF8, 0, utf16.c_str(), -1, NULL, 0, NULL, NULL); if (!sz) { - fprintf(stderr, "%s:%d: cannot estimate buffer size\n", file, line); + report_info("%s:%d: cannot estimate buffer size", file, line); return std::string(); } std::string utf8(sz, ' '); // Note: includes the terminating '\0', just in case. @@ -40,7 +40,7 @@ static std::string utf16_to_utf8_fl(const std::wstring &utf16, const char *file, utf8.resize(sz - 1); // Chop off final '\0' byte return utf8; } - fprintf(stderr, "%s:%d: cannot convert string\n", file, line); + report_info("%s:%d: cannot convert string", file, line); return std::string(); } @@ -58,7 +58,7 @@ static std::wstring utf8_to_utf16_fl(const char *utf8, const char *file, int lin utf16.resize(actual_size - 1); // Chop off final '\0' character return utf16; } - fprintf(stderr, "%s:%d: cannot convert string\n", file, line); + report_info("%s:%d: cannot convert string", file, line); return std::wstring(); } @@ -80,7 +80,7 @@ static std::wstring system_default_path() if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, wpath))) { path = wpath; } else { - fprintf(stderr, "%s: cannot obtain path!\n", fname); + report_info("%s: cannot obtain path!", fname); path = L'.'; } return path + L"\\Subsurface"; @@ -251,7 +251,7 @@ int subsurface_dir_rename(const char *path, const char *newpath) if (attrib != INVALID_FILE_ATTRIBUTES && attrib & FILE_ATTRIBUTE_DIRECTORY) exists = TRUE; if (!exists && verbose) { - fprintf(stderr, "folder not found or path is not a folder: %s\n", path); + report_info("folder not found or path is not a folder: %s", path); return EXIT_FAILURE; } @@ -265,11 +265,11 @@ int subsurface_dir_rename(const char *path, const char *newpath) if (h == INVALID_HANDLE_VALUE) { errorCode = GetLastError(); if (verbose) - fprintf(stderr, "cannot obtain exclusive write access for folder: %u\n", (unsigned int)errorCode ); + report_info("cannot obtain exclusive write access for folder: %u", (unsigned int)errorCode ); return EXIT_FAILURE; } else { if (verbose) - fprintf(stderr, "exclusive write access obtained...closing handle!"); + report_info("exclusive write access obtained...closing handle!"); CloseHandle(h); // attempt to rename @@ -277,11 +277,11 @@ int subsurface_dir_rename(const char *path, const char *newpath) if (!result) { errorCode = GetLastError(); if (verbose) - fprintf(stderr, "rename failed: %u\n", (unsigned int)errorCode); + report_info("rename failed: %u", (unsigned int)errorCode); return EXIT_FAILURE; } if (verbose > 1) - fprintf(stderr, "folder rename success: %s ---> %s\n", path, newpath); + report_info("folder rename success: %s ---> %s", path, newpath); } return EXIT_SUCCESS; } diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp index 5c91a713d..1eda8aaa7 100644 --- a/desktop-widgets/downloadfromdivecomputer.cpp +++ b/desktop-widgets/downloadfromdivecomputer.cpp @@ -5,6 +5,7 @@ #include "core/device.h" #include "core/divelist.h" #include "core/divelog.h" +#include "core/errorhelper.h" #include "core/settings/qPrefDiveComputer.h" #include "core/subsurface-float.h" #include "core/subsurface-string.h" @@ -433,7 +434,7 @@ void DownloadFromDCWidget::on_downloadCancelRetryButton_clicked() if ((colon = strstr(devname, ":\\ (UEMISSDA)")) != NULL) { *(colon + 2) = '\0'; - fprintf(stderr, "shortened devname to \"%s\"", devname); + report_info("shortened devname to \"%s\"", devname); } data->setDevName(devname); } else { diff --git a/mobile-widgets/statsmanager.cpp b/mobile-widgets/statsmanager.cpp index 794706d8f..c4cfec9a5 100644 --- a/mobile-widgets/statsmanager.cpp +++ b/mobile-widgets/statsmanager.cpp @@ -2,6 +2,7 @@ #include "statsmanager.h" #include "themeinterface.h" #include "stats/chartlistmodel.h" +#include "core/errorhelper.h" StatsManager::StatsManager() : view(nullptr), charts(nullptr), themeInitialized(false) { @@ -15,9 +16,9 @@ StatsManager::~StatsManager() void StatsManager::init(StatsView *v, ChartListModel *m) { if (!v) - fprintf(stderr, "StatsManager::init(): no StatsView - statistics will not work.\n"); + report_info("StatsManager::init(): no StatsView - statistics will not work."); if (!m) - fprintf(stderr, "StatsManager::init(): no ChartListModel - statistics will not work.\n"); + report_info("StatsManager::init(): no ChartListModel - statistics will not work."); view = v; charts = m; diff --git a/subsurface-helper.cpp b/subsurface-helper.cpp index 62ba125f8..4c7e4c5c5 100644 --- a/subsurface-helper.cpp +++ b/subsurface-helper.cpp @@ -9,6 +9,7 @@ #include "stats/statsview.h" #include "core/devicedetails.h" +#include "core/errorhelper.h" #include "core/globals.h" #include "core/qt-gui.h" #include "core/settings/qPref.h" @@ -146,7 +147,7 @@ void run_mobile_ui(double initial_font_size) qDebug() << "loaded main.qml"; qqWindowObject = engine.rootObjects().value(0); if (!qqWindowObject) { - fprintf(stderr, "can't create window object\n"); + report_info("can't create window object"); exit(1); } QQuickWindow *qml_window = qobject_cast(qqWindowObject);