From b56dd13adddb1d0018e00bd0ea0c3b1a45c719c6 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sat, 4 May 2024 18:45:55 +0200 Subject: [PATCH] build: remove extern "C" linkage No more C source files, no more necessity to use C-linkage. Signed-off-by: Berthold Stoeger --- CODINGSTYLE.md | 1 - core/android.cpp | 3 - core/checkcloudconnection.cpp | 2 +- core/deco.cpp | 34 ++++---- core/deco.h | 4 - core/device.cpp | 52 ++++++------ core/device.h | 4 - core/dive.cpp | 130 ++++++++++++++--------------- core/dive.h | 3 - core/divecomputer.cpp | 60 +++++++------ core/divecomputer.h | 4 - core/divelist.cpp | 40 +++++---- core/divelist.h | 4 - core/divelog.cpp | 2 +- core/divelog.h | 4 - core/equipment.cpp | 54 ++++++------ core/equipment.h | 4 - core/errorhelper.h | 4 - core/event.h | 4 - core/eventtype.cpp | 14 ++-- core/eventtype.h | 9 +- core/file.cpp | 4 +- core/file.h | 7 +- core/filterconstraint.cpp | 36 ++++---- core/filterconstraint.h | 4 - core/filterpreset.cpp | 16 ++-- core/filterpreset.h | 5 -- core/fulltext.cpp | 4 - core/fulltext.h | 12 +-- core/gas.h | 4 - core/gettext.h | 2 +- core/gettextfromc.cpp | 2 +- core/gettextfromc.h | 2 +- core/git-access.cpp | 12 +-- core/git-access.h | 4 - core/import-cobalt.cpp | 2 +- core/import-csv.cpp | 2 +- core/import-csv.h | 4 - core/import-divinglog.cpp | 2 +- core/import-seac.cpp | 2 +- core/import-shearwater.cpp | 4 +- core/import-suunto.cpp | 4 +- core/ios.cpp | 3 - core/libdivecomputer.h | 4 - core/load-git.cpp | 4 +- core/macos.cpp | 4 - core/membuffer.h | 4 - core/metadata.cpp | 4 +- core/metadata.h | 4 - core/ostctools.cpp | 2 +- core/owning_ptrs.h | 4 +- core/parse-xml.cpp | 10 +-- core/parse.cpp | 10 +-- core/parse.h | 3 - core/picture.h | 4 - core/planner.cpp | 16 ++-- core/planner.h | 4 - core/plannernotes.cpp | 4 +- core/pref.cpp | 4 +- core/pref.h | 4 - core/profile.cpp | 2 +- core/qt-ble.cpp | 4 - core/qt-ble.h | 3 - core/qthelper.cpp | 22 ++--- core/qthelper.h | 28 ++----- core/qtserialbluetooth.cpp | 3 - core/sample.cpp | 2 +- core/sample.h | 4 - core/save-git.cpp | 4 +- core/save-html.h | 5 -- core/save-profiledata.h | 3 - core/save-xml.cpp | 10 +-- core/selection.cpp | 18 ++-- core/selection.h | 14 +--- core/ssrf.h | 4 - core/strtod.cpp | 4 +- core/subsurface-string.h | 4 - core/subsurface-time.h | 5 -- core/subsurfacestartup.cpp | 8 +- core/subsurfacestartup.h | 4 - core/subsurfacesysinfo.cpp | 2 +- core/subsurfacesysinfo.h | 4 - core/tag.cpp | 12 +-- core/tag.h | 9 +- core/time.cpp | 10 +-- core/trip.h | 4 - core/units.cpp | 18 ++-- core/units.h | 3 - core/unix.cpp | 4 - core/version.cpp | 4 +- core/version.h | 4 - core/webservice.h | 4 - core/windows.cpp | 4 - core/windowtitleupdate.cpp | 2 +- core/worldmap-save.cpp | 2 +- core/worldmap-save.h | 4 - core/xmlparams.cpp | 18 ++-- core/xmlparams.h | 4 - desktop-widgets/mainwindow.cpp | 4 +- desktop-widgets/profilewidget.h | 2 - mobile-widgets/qmlmanager.cpp | 4 +- smtk-import/smartrak.cpp | 2 +- smtk-import/smrtk2ssrfc_window.cpp | 2 +- smtk-import/smrtk2ssrfc_window.h | 2 +- 104 files changed, 364 insertions(+), 577 deletions(-) diff --git a/CODINGSTYLE.md b/CODINGSTYLE.md index 884c0cfbd..909c0e467 100644 --- a/CODINGSTYLE.md +++ b/CODINGSTYLE.md @@ -401,7 +401,6 @@ close to our coding standards. filetype plugin indent on filetype detect set cindent tabstop=8 shiftwidth=8 cinoptions=l1,:0,(0,g0 -" TODO: extern "C" gets indented " And some sane defaults, optional, but quite nice set nocompatible diff --git a/core/android.cpp b/core/android.cpp index a8a0dd0e9..fef58a48c 100644 --- a/core/android.cpp +++ b/core/android.cpp @@ -41,8 +41,6 @@ static std::string make_default_filename() return system_default_path() + "/subsurface.xml"; } -extern "C" { - const char android_system_divelist_default_font[] = "Roboto"; const char *system_divelist_default_font = android_system_divelist_default_font; double system_divelist_default_font_size = -1; @@ -251,7 +249,6 @@ bool subsurface_user_is_root() { return false; } -} /* called from QML manager */ void checkPendingIntents() diff --git a/core/checkcloudconnection.cpp b/core/checkcloudconnection.cpp index 384afdb3d..ff180ddf9 100644 --- a/core/checkcloudconnection.cpp +++ b/core/checkcloudconnection.cpp @@ -200,7 +200,7 @@ void CheckCloudConnection::gotContinent(QNetworkReply *reply) } // helper to be used from C code -extern "C" bool canReachCloudServer(struct git_info *info) +bool canReachCloudServer(struct git_info *info) { if (verbose) qWarning() << "Cloud storage: checking connection to cloud server" << info->url.c_str(); diff --git a/core/deco.cpp b/core/deco.cpp index eb4d4308a..7c8b6bdee 100644 --- a/core/deco.cpp +++ b/core/deco.cpp @@ -216,7 +216,7 @@ static double vpmb_tolerated_ambient_pressure(struct deco_state *ds, double refe return ds->tissue_n2_sat[ci] + ds->tissue_he_sat[ci] + vpmb_config.other_gases_pressure - total_gradient; } -extern "C" double tissue_tolerance_calc(struct deco_state *ds, const struct dive *dive, double pressure, bool in_planner) +double tissue_tolerance_calc(struct deco_state *ds, const struct dive *dive, double pressure, bool in_planner) { int ci = -1; double ret_tolerance_limit_ambient_pressure = 0.0; @@ -323,7 +323,7 @@ static double calc_surface_phase(double surface_pressure, double he_pressure, do return 0; } -extern "C" void vpmb_start_gradient(struct deco_state *ds) +void vpmb_start_gradient(struct deco_state *ds) { int ci; @@ -333,7 +333,7 @@ extern "C" void vpmb_start_gradient(struct deco_state *ds) } } -extern "C" void vpmb_next_gradient(struct deco_state *ds, double deco_time, double surface_pressure, bool in_planner) +void vpmb_next_gradient(struct deco_state *ds, double deco_time, double surface_pressure, bool in_planner) { int ci; double n2_b, n2_c; @@ -379,7 +379,7 @@ static double solve_cubic(double A, double B, double C) } -extern "C" void nuclear_regeneration(struct deco_state *ds, double time) +void nuclear_regeneration(struct deco_state *ds, double time) { time /= 60.0; int ci; @@ -411,7 +411,7 @@ static double calc_inner_pressure(double crit_radius, double onset_tension, doub } // Calculates the crushing pressure in the given moment. Updates crushing_onset_tension and critical radius if needed -extern "C" void calc_crushing_pressure(struct deco_state *ds, double pressure) +void calc_crushing_pressure(struct deco_state *ds, double pressure) { int ci; double gradient; @@ -443,7 +443,7 @@ extern "C" void calc_crushing_pressure(struct deco_state *ds, double pressure) } /* add period_in_seconds at the given pressure and gas to the deco calculation */ -extern "C" void add_segment(struct deco_state *ds, double pressure, struct gasmix gasmix, int period_in_seconds, int ccpo2, enum divemode_t divemode, int, bool in_planner) +void add_segment(struct deco_state *ds, double pressure, struct gasmix gasmix, int period_in_seconds, int ccpo2, enum divemode_t divemode, int, bool in_planner) { int ci; struct gas_pressures pressures; @@ -476,7 +476,7 @@ extern "C" void add_segment(struct deco_state *ds, double pressure, struct gasmi } #if DECO_CALC_DEBUG -extern "C" void dump_tissues(struct deco_state *ds) +void dump_tissues(struct deco_state *ds) { int ci; printf("N2 tissues:"); @@ -489,7 +489,7 @@ extern "C" void dump_tissues(struct deco_state *ds) } #endif -extern "C" void clear_vpmb_state(struct deco_state *ds) +void clear_vpmb_state(struct deco_state *ds) { int ci; for (ci = 0; ci < 16; ci++) { @@ -501,7 +501,7 @@ extern "C" void clear_vpmb_state(struct deco_state *ds) ds->max_bottom_ceiling_pressure.mbar = 0; } -extern "C" void clear_deco(struct deco_state *ds, double surface_pressure, bool in_planner) +void clear_deco(struct deco_state *ds, double surface_pressure, bool in_planner) { int ci; @@ -545,7 +545,7 @@ void deco_state_cache::restore(struct deco_state *target, bool keep_vpmb_state) *target = *data; } -extern "C" int deco_allowed_depth(double tissues_tolerance, double surface_pressure, const struct dive *dive, bool smooth) +int deco_allowed_depth(double tissues_tolerance, double surface_pressure, const struct dive *dive, bool smooth) { int depth; double pressure_delta; @@ -564,7 +564,7 @@ extern "C" int deco_allowed_depth(double tissues_tolerance, double surface_press return depth; } -extern "C" void set_gf(short gflow, short gfhigh) +void set_gf(short gflow, short gfhigh) { if (gflow != -1) buehlmann_config.gf_low = (double)gflow / 100.0; @@ -572,7 +572,7 @@ extern "C" void set_gf(short gflow, short gfhigh) buehlmann_config.gf_high = (double)gfhigh / 100.0; } -extern "C" void set_vpmb_conservatism(short conservatism) +void set_vpmb_conservatism(short conservatism) { if (conservatism < 0) vpmb_config.conservatism = 0; @@ -582,7 +582,7 @@ extern "C" void set_vpmb_conservatism(short conservatism) vpmb_config.conservatism = conservatism; } -extern "C" double get_gf(struct deco_state *ds, double ambpressure_bar, const struct dive *dive) +double get_gf(struct deco_state *ds, double ambpressure_bar, const struct dive *dive) { double surface_pressure_bar = get_surface_pressure_in_mbar(dive, true) / 1000.0; double gf_low = buehlmann_config.gf_low; @@ -596,7 +596,7 @@ extern "C" double get_gf(struct deco_state *ds, double ambpressure_bar, const st return gf; } -extern "C" double regressiona(const struct deco_state *ds) +double regressiona(const struct deco_state *ds) { if (ds->sum1 > 1) { double avxy = ds->sumxy / ds->sum1; @@ -609,7 +609,7 @@ extern "C" double regressiona(const struct deco_state *ds) return 0.0; } -extern "C" double regressionb(const struct deco_state *ds) +double regressionb(const struct deco_state *ds) { if (ds->sum1) return ds->sumy / ds->sum1 - ds->sumx * regressiona(ds) / ds->sum1; @@ -617,14 +617,14 @@ extern "C" double regressionb(const struct deco_state *ds) return 0.0; } -extern "C" void reset_regression(struct deco_state *ds) +void reset_regression(struct deco_state *ds) { ds->sum1 = 0; ds->sumxx = ds->sumx = 0L; ds->sumy = ds->sumxy = 0.0; } -extern "C" void update_regression(struct deco_state *ds, const struct dive *dive) +void update_regression(struct deco_state *ds, const struct dive *dive) { if (!ds->plot_depth) return; diff --git a/core/deco.h b/core/deco.h index 5d2dbba06..479f81cb1 100644 --- a/core/deco.h +++ b/core/deco.h @@ -7,8 +7,6 @@ #include "divemode.h" #include -extern "C" { - struct dive; struct divecomputer; struct decostop; @@ -69,8 +67,6 @@ extern double regressionb(const struct deco_state *ds); extern void reset_regression(struct deco_state *ds); extern void update_regression(struct deco_state *ds, const struct dive *dive); -} - struct deco_state_cache { // Test if there is cached data operator bool () { diff --git a/core/device.cpp b/core/device.cpp index f72240f6f..9a64cf83d 100644 --- a/core/device.cpp +++ b/core/device.cpp @@ -27,7 +27,7 @@ bool device::operator<(const device &a) const return serialNumber < a.serialNumber; } -extern "C" const struct device *get_device_for_dc(const struct device_table *table, const struct divecomputer *dc) +const struct device *get_device_for_dc(const struct device_table *table, const struct divecomputer *dc) { if (!dc->model || !dc->serial) return NULL; @@ -38,7 +38,7 @@ extern "C" const struct device *get_device_for_dc(const struct device_table *tab return it != dcs.end() && same_device(*it, dev) ? &*it : NULL; } -extern "C" int get_or_add_device_for_dc(struct device_table *table, const struct divecomputer *dc) +int get_or_add_device_for_dc(struct device_table *table, const struct divecomputer *dc) { if (!dc->model || !dc->serial) return -1; @@ -50,7 +50,7 @@ extern "C" int get_or_add_device_for_dc(struct device_table *table, const struct return create_device_node(table, dc->model, dc->serial, ""); } -extern "C" bool device_exists(const struct device_table *device_table, const struct device *dev) +bool device_exists(const struct device_table *device_table, const struct device *dev) { auto it = std::lower_bound(device_table->devices.begin(), device_table->devices.end(), *dev); return it != device_table->devices.end() && same_device(*it, *dev); @@ -86,17 +86,17 @@ static int addDC(std::vector &dcs, const std::string &m, const std::stri } } -extern "C" int create_device_node(struct device_table *device_table, const char *model, const char *serial, const char *nickname) +int create_device_node(struct device_table *device_table, const char *model, const char *serial, const char *nickname) { return addDC(device_table->devices, model ?: "", serial ?: "", nickname ?: ""); } -extern "C" int add_to_device_table(struct device_table *device_table, const struct device *dev) +int add_to_device_table(struct device_table *device_table, const struct device *dev) { return create_device_node(device_table, dev->model.c_str(), dev->serialNumber.c_str(), dev->nickName.c_str()); } -extern "C" int remove_device(struct device_table *device_table, const struct device *dev) +int remove_device(struct device_table *device_table, const struct device *dev) { auto it = std::lower_bound(device_table->devices.begin(), device_table->devices.end(), *dev); if (it != device_table->devices.end() && same_device(*it, *dev)) { @@ -108,20 +108,20 @@ extern "C" int remove_device(struct device_table *device_table, const struct dev } } -extern "C" void remove_from_device_table(struct device_table *device_table, int idx) +void remove_from_device_table(struct device_table *device_table, int idx) { if (idx < 0 || idx >= (int)device_table->devices.size()) return; device_table->devices.erase(device_table->devices.begin() + idx); } -extern "C" void clear_device_table(struct device_table *device_table) +void clear_device_table(struct device_table *device_table) { device_table->devices.clear(); } /* Returns whether the given device is used by a selected dive. */ -extern "C" bool device_used_by_selected_dive(const struct device *dev) +bool device_used_by_selected_dive(const struct device *dev) { for (dive *d: getDiveSelection()) { struct divecomputer *dc; @@ -133,7 +133,7 @@ extern "C" bool device_used_by_selected_dive(const struct device *dev) return false; } -extern "C" int is_default_dive_computer_device(const char *name) +int is_default_dive_computer_device(const char *name) { return qPrefDiveComputer::device() == name; } @@ -148,46 +148,46 @@ const char *get_dc_nickname(const struct divecomputer *dc) return dc->model; } -extern "C" int nr_devices(const struct device_table *table) +int nr_devices(const struct device_table *table) { return (int)table->devices.size(); } -extern "C" const struct device *get_device(const struct device_table *table, int i) +const struct device *get_device(const struct device_table *table, int i) { if (i < 0 || i > nr_devices(table)) return NULL; return &table->devices[i]; } -extern "C" struct device *get_device_mutable(struct device_table *table, int i) +struct device *get_device_mutable(struct device_table *table, int i) { if (i < 0 || i > nr_devices(table)) return NULL; return &table->devices[i]; } -extern "C" const char *device_get_model(const struct device *dev) +const char *device_get_model(const struct device *dev) { return dev ? dev->model.c_str() : NULL; } -extern "C" const char *device_get_serial(const struct device *dev) +const char *device_get_serial(const struct device *dev) { return dev ? dev->serialNumber.c_str() : NULL; } -extern "C" const char *device_get_nickname(const struct device *dev) +const char *device_get_nickname(const struct device *dev) { return dev ? dev->nickName.c_str() : NULL; } -extern "C" struct device_table *alloc_device_table() +struct device_table *alloc_device_table() { return new struct device_table; } -extern "C" void free_device_table(struct device_table *devices) +void free_device_table(struct device_table *devices) { delete devices; } @@ -202,7 +202,7 @@ bool fingerprint_record::operator<(const fingerprint_record &a) const // annoyingly, the Cressi Edy doesn't support a serial number (it's always 0), but still uses fingerprints // so we can't bail on the serial number being 0 -extern "C" unsigned int get_fingerprint_data(const struct fingerprint_table *table, uint32_t model, uint32_t serial, const unsigned char **fp_out) +unsigned int get_fingerprint_data(const struct fingerprint_table *table, uint32_t model, uint32_t serial, const unsigned char **fp_out) { if (model == 0 || fp_out == nullptr) return 0; @@ -219,7 +219,7 @@ extern "C" unsigned int get_fingerprint_data(const struct fingerprint_table *tab return 0; } -extern "C" void create_fingerprint_node(struct fingerprint_table *table, uint32_t model, uint32_t serial, +void create_fingerprint_node(struct fingerprint_table *table, uint32_t model, uint32_t serial, const unsigned char *raw_data_in, unsigned int fsize, uint32_t fdeviceid, uint32_t fdiveid) { // since raw data can contain \0 we copy this manually, not as string @@ -245,7 +245,7 @@ extern "C" void create_fingerprint_node(struct fingerprint_table *table, uint32_ } } -extern "C" void create_fingerprint_node_from_hex(struct fingerprint_table *table, uint32_t model, uint32_t serial, +void create_fingerprint_node_from_hex(struct fingerprint_table *table, uint32_t model, uint32_t serial, const char *hex_data, uint32_t fdeviceid, uint32_t fdiveid) { QByteArray raw = QByteArray::fromHex(hex_data); @@ -253,33 +253,33 @@ extern "C" void create_fingerprint_node_from_hex(struct fingerprint_table *table (const unsigned char *)raw.constData(), raw.size(), fdeviceid, fdiveid); } -extern "C" int nr_fingerprints(struct fingerprint_table *table) +int nr_fingerprints(struct fingerprint_table *table) { return table->fingerprints.size(); } -extern "C" uint32_t fp_get_model(struct fingerprint_table *table, unsigned int i) +uint32_t fp_get_model(struct fingerprint_table *table, unsigned int i) { if (!table || i >= table->fingerprints.size()) return 0; return table->fingerprints[i].model; } -extern "C" uint32_t fp_get_serial(struct fingerprint_table *table, unsigned int i) +uint32_t fp_get_serial(struct fingerprint_table *table, unsigned int i) { if (!table || i >= table->fingerprints.size()) return 0; return table->fingerprints[i].serial; } -extern "C" uint32_t fp_get_deviceid(struct fingerprint_table *table, unsigned int i) +uint32_t fp_get_deviceid(struct fingerprint_table *table, unsigned int i) { if (!table || i >= table->fingerprints.size()) return 0; return table->fingerprints[i].fdeviceid; } -extern "C" uint32_t fp_get_diveid(struct fingerprint_table *table, unsigned int i) +uint32_t fp_get_diveid(struct fingerprint_table *table, unsigned int i) { if (!table || i >= table->fingerprints.size()) return 0; diff --git a/core/device.h b/core/device.h index 1d9b4210e..5c9f042b1 100644 --- a/core/device.h +++ b/core/device.h @@ -6,8 +6,6 @@ #include #include -extern "C" { - struct divecomputer; struct device; struct device_table; @@ -61,8 +59,6 @@ typedef void (*device_callback_t)(const char *name, void *userdata); extern int enumerate_devices(device_callback_t callback, void *userdata, unsigned int transport); -} - // Functions and global variables that are only available to C++ code struct device { bool operator<(const device &a) const; diff --git a/core/dive.cpp b/core/dive.cpp index 888f92ef5..80a441dfb 100644 --- a/core/dive.cpp +++ b/core/dive.cpp @@ -51,7 +51,7 @@ static double calculate_depth_to_mbarf(int depth, pressure_t surface_pressure, i * This function returns a negative number for "no legacy mode", * or a non-negative number that indicates the o2 sensor index. */ -extern "C" int legacy_format_o2pressures(const struct dive *dive, const struct divecomputer *dc) +int legacy_format_o2pressures(const struct dive *dive, const struct divecomputer *dc) { int i, o2sensor; @@ -83,7 +83,7 @@ extern "C" int legacy_format_o2pressures(const struct dive *dive, const struct d } /* warning: does not test idx for validity */ -extern "C" struct event *create_gas_switch_event(struct dive *dive, struct divecomputer *dc, int seconds, int idx) +struct event *create_gas_switch_event(struct dive *dive, struct divecomputer *dc, int seconds, int idx) { /* The gas switch event format is insane for historical reasons */ struct gasmix mix = get_cylinder(dive, idx)->gasmix; @@ -102,7 +102,7 @@ extern "C" struct event *create_gas_switch_event(struct dive *dive, struct divec return ev; } -extern "C" void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int seconds, int idx) +void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int seconds, int idx) { /* sanity check so we don't crash */ /* FIXME: The planner uses a dummy cylinder one past the official number of cylinders @@ -120,7 +120,7 @@ extern "C" void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, * have to actually remove the existing event and replace it with a new one. * WARNING, WARNING... this may end up freeing event in case that event is indeed * WARNING, WARNING... part of this divecomputer on this dive! */ -extern "C" void update_event_name(struct dive *d, int dc_number, struct event *event, const char *name) +void update_event_name(struct dive *d, int dc_number, struct event *event, const char *name) { if (!d || !event) return; @@ -140,7 +140,7 @@ extern "C" void update_event_name(struct dive *d, int dc_number, struct event *e invalidate_dive_cache(d); } -extern "C" struct gasmix get_gasmix_from_event(const struct dive *dive, const struct event *ev) +struct gasmix get_gasmix_from_event(const struct dive *dive, const struct event *ev) { if (ev && event_is_gaschange(ev)) { int index = ev->gas.index; @@ -156,14 +156,14 @@ extern "C" struct gasmix get_gasmix_from_event(const struct dive *dive, const st // we need this to be uniq. oh, and it has no meaning whatsoever // - that's why we have the silly initial number and increment by 3 :-) -extern "C" int dive_getUniqID() +int dive_getUniqID() { static int maxId = 83529; maxId += 3; return maxId; } -extern "C" struct dive *alloc_dive(void) +struct dive *alloc_dive(void) { struct dive *dive; @@ -235,7 +235,7 @@ static void free_dive_structures(struct dive *d) free(d->pictures.pictures); } -extern "C" void free_dive(struct dive *d) +void free_dive(struct dive *d) { free_dive_structures(d); free(d); @@ -245,7 +245,7 @@ extern "C" void free_dive(struct dive *d) * in order not to leak memory, we need to free those . * copy_dive doesn't play with the divetrip and forward/backward pointers * so we can ignore those */ -extern "C" void clear_dive(struct dive *d) +void clear_dive(struct dive *d) { if (!d) return; @@ -278,7 +278,7 @@ static void copy_dive_nodc(const struct dive *s, struct dive *d) d->tag_list = taglist_copy(s->tag_list); } -extern "C" void copy_dive(const struct dive *s, struct dive *d) +void copy_dive(const struct dive *s, struct dive *d) { copy_dive_nodc(s, d); @@ -297,7 +297,7 @@ static void copy_dive_onedc(const struct dive *s, const struct divecomputer *sdc /* make a clone of the source dive and clean out the source dive; * this allows us to create a dive on the stack and then * add it to the divelist. */ -extern "C" struct dive *move_dive(struct dive *s) +struct dive *move_dive(struct dive *s) { struct dive *dive = alloc_dive(); *dive = *s; // so all the pointers in dive point to the things s pointed to @@ -310,7 +310,7 @@ extern "C" struct dive *move_dive(struct dive *s) d->_component = copy_string(s->_component) // copy elements, depending on bits in what that are set -extern "C" void selective_copy_dive(const struct dive *s, struct dive *d, struct dive_components what, bool clear) +void selective_copy_dive(const struct dive *s, struct dive *d, struct dive_components what, bool clear) { if (clear) clear_dive(d); @@ -342,7 +342,7 @@ extern "C" void selective_copy_dive(const struct dive *s, struct dive *d, struct /* copies all events from the given dive computer before a given time this is used when editing a dive in the planner to preserve the events of the old dive */ -extern "C" void copy_events_until(const struct dive *sd, struct dive *dd, int dcNr, int time) +void copy_events_until(const struct dive *sd, struct dive *dd, int dcNr, int time) { if (!sd || !dd) return; @@ -363,17 +363,17 @@ extern "C" void copy_events_until(const struct dive *sd, struct dive *dd, int dc } } -extern "C" int nr_cylinders(const struct dive *dive) +int nr_cylinders(const struct dive *dive) { return dive->cylinders.nr; } -extern "C" int nr_weightsystems(const struct dive *dive) +int nr_weightsystems(const struct dive *dive) { return dive->weightsystems.nr; } -extern "C" void copy_used_cylinders(const struct dive *s, struct dive *d, bool used_only) +void copy_used_cylinders(const struct dive *s, struct dive *d, bool used_only) { int i; if (!s || !d) @@ -488,7 +488,7 @@ static bool has_unknown_used_cylinders(const struct dive *dive, const struct div return num > 0; } -extern "C" void per_cylinder_mean_depth(const struct dive *dive, struct divecomputer *dc, int *mean, int *duration) +void per_cylinder_mean_depth(const struct dive *dive, struct divecomputer *dc, int *mean, int *duration) { int i; int32_t lasttime = 0; @@ -597,7 +597,7 @@ static int same_rounded_pressure(pressure_t a, pressure_t b) * first cylinder - in which case cylinder 0 is indeed the first cylinder. * We likewise return 0 if the event concerns a cylinder that doesn't exist. * If the dive has no cylinders, -1 is returned. */ -extern "C" int explicit_first_cylinder(const struct dive *dive, const struct divecomputer *dc) +int explicit_first_cylinder(const struct dive *dive, const struct divecomputer *dc) { int res = 0; if (!dive->cylinders.nr) @@ -615,7 +615,7 @@ extern "C" int explicit_first_cylinder(const struct dive *dive, const struct div /* this gets called when the dive mode has changed (so OC vs. CC) * there are two places we might have setpoints... events or in the samples */ -extern "C" void update_setpoint_events(const struct dive *dive, struct divecomputer *dc) +void update_setpoint_events(const struct dive *dive, struct divecomputer *dc) { struct event *ev; int new_setpoint = 0; @@ -775,7 +775,7 @@ static struct event *find_previous_event(struct divecomputer *dc, struct event * return previous; } -extern "C" pressure_t calculate_surface_pressure(const struct dive *dive) +pressure_t calculate_surface_pressure(const struct dive *dive) { const struct divecomputer *dc; pressure_t res; @@ -799,7 +799,7 @@ static void fixup_surface_pressure(struct dive *dive) /* if the surface pressure in the dive data is redundant to the calculated * value (i.e., it was added by running fixup on the dive) return 0, * otherwise return the surface pressure given in the dive */ -extern "C" pressure_t un_fixup_surface_pressure(const struct dive *d) +pressure_t un_fixup_surface_pressure(const struct dive *d) { pressure_t res = d->surface_pressure; if (res.mbar && res.mbar == calculate_surface_pressure(d).mbar) @@ -824,7 +824,7 @@ static void fixup_water_salinity(struct dive *dive) dive->salinity = (sum + nr / 2) / nr; } -extern "C" int get_dive_salinity(const struct dive *dive) +int get_dive_salinity(const struct dive *dive) { return dive->user_salinity ? dive->user_salinity : dive->salinity; } @@ -1263,7 +1263,7 @@ static void fixup_dive_dc(struct dive *dive, struct divecomputer *dc) fake_dc(dc); } -extern "C" struct dive *fixup_dive(struct dive *dive) +struct dive *fixup_dive(struct dive *dive) { int i; struct divecomputer *dc; @@ -1653,7 +1653,7 @@ pick_b: * A negative number returned indicates that a match could not be found. * Call parameters: dive = the dive being processed * cylinder_use_type = an enum, one of {oxygen, diluent, bailout} */ -extern "C" int get_cylinder_idx_by_use(const struct dive *dive, enum cylinderuse cylinder_use_type) +int get_cylinder_idx_by_use(const struct dive *dive, enum cylinderuse cylinder_use_type) { int cylinder_index; for (cylinder_index = 0; cylinder_index < dive->cylinders.nr; cylinder_index++) { @@ -1750,14 +1750,14 @@ static void dc_cylinder_renumber(struct dive *dive, struct divecomputer *dc, con * Also note that we assume that the initial cylinder is cylinder 0, * so if that got renamed, we need to create a fake gas change event */ -extern "C" void cylinder_renumber(struct dive *dive, int mapping[]) +void cylinder_renumber(struct dive *dive, int mapping[]) { struct divecomputer *dc; for_each_dc (dive, dc) dc_cylinder_renumber(dive, dc, mapping); } -extern "C" int same_gasmix_cylinder(const cylinder_t *cyl, int cylid, const struct dive *dive, bool check_unused) +int same_gasmix_cylinder(const cylinder_t *cyl, int cylid, const struct dive *dive, bool check_unused) { struct gasmix mygas = cyl->gasmix; for (int i = 0; i < dive->cylinders.nr; i++) { @@ -2352,7 +2352,7 @@ static int likely_same_dive(const struct dive *a, const struct dive *b) * Attn: The dive_site parameter of the dive will be set, but the caller * still has to register the dive in the dive site! */ -extern "C" struct dive *try_to_merge(struct dive *a, struct dive *b, bool prefer_downloaded) +struct dive *try_to_merge(struct dive *a, struct dive *b, bool prefer_downloaded) { struct dive *res; struct dive_site *site; @@ -2562,12 +2562,12 @@ static bool has_dc_type(const struct dive *dive, bool dc_is_planner) } // Does this dive have a dive computer for which is_dc_planner has value planned -extern "C" bool is_planned(const struct dive *dive) +bool is_planned(const struct dive *dive) { return has_dc_type(dive, true); } -extern "C" bool is_logged(const struct dive *dive) +bool is_logged(const struct dive *dive) { return has_dc_type(dive, false); } @@ -2601,7 +2601,7 @@ extern "C" bool is_logged(const struct dive *dive) * The dive site the new dive should be added to (if any) is returned * in the "dive_site" output parameter. */ -extern "C" struct dive *merge_dives(const struct dive *a, const struct dive *b, int offset, bool prefer_downloaded, struct dive_trip **trip, struct dive_site **site) +struct dive *merge_dives(const struct dive *a, const struct dive *b, int offset, bool prefer_downloaded, struct dive_trip **trip, struct dive_site **site) { struct dive *res = alloc_dive(); @@ -2871,7 +2871,7 @@ static bool should_split(const struct divecomputer *dc, int t1, int t2) * * In other words, this is a (simplified) reversal of the dive merging. */ -extern "C" int split_dive(const struct dive *dive, struct dive **new1, struct dive **new2) +int split_dive(const struct dive *dive, struct dive **new1, struct dive **new2) { int i; int at_surface, surface_start; @@ -2914,7 +2914,7 @@ extern "C" int split_dive(const struct dive *dive, struct dive **new1, struct di return -1; } -extern "C" int split_dive_at_time(const struct dive *dive, duration_t time, struct dive **new1, struct dive **new2) +int split_dive_at_time(const struct dive *dive, duration_t time, struct dive **new1, struct dive **new2) { int i = 0; @@ -2977,12 +2977,12 @@ static inline int dive_totaltime(const struct dive *dive) return time; } -extern "C" timestamp_t dive_endtime(const struct dive *dive) +timestamp_t dive_endtime(const struct dive *dive) { return dive->when + dive_totaltime(dive); } -extern "C" bool time_during_dive_with_offset(const struct dive *dive, timestamp_t when, timestamp_t offset) +bool time_during_dive_with_offset(const struct dive *dive, timestamp_t when, timestamp_t offset) { timestamp_t start = dive->when; timestamp_t end = dive_endtime(dive); @@ -2999,7 +2999,7 @@ extern "C" bool time_during_dive_with_offset(const struct dive *dive, timestamp_ * functionality for the core library that Subsurface itself doesn't * use but that another consumer of the library (like an HTML exporter) * will need */ -extern "C" void set_informational_units(const char *units) +void set_informational_units(const char *units) { if (strstr(units, "METRIC")) { git_prefs.unit_system = METRIC; @@ -3035,7 +3035,7 @@ extern "C" void set_informational_units(const char *units) } -extern "C" void set_git_prefs(const char *prefs) +void set_git_prefs(const char *prefs) { if (strstr(prefs, "TANKBAR")) git_prefs.tankbar = 1; @@ -3048,7 +3048,7 @@ extern "C" void set_git_prefs(const char *prefs) } /* clones a dive and moves given dive computer to front */ -extern "C" struct dive *make_first_dc(const struct dive *d, int dc_number) +struct dive *make_first_dc(const struct dive *d, int dc_number) { struct dive *res; struct divecomputer *dc, *newdc, *old_dc; @@ -3112,7 +3112,7 @@ static void delete_divecomputer(struct dive *d, int num) } /* Clone a dive and delete goven dive computer */ -extern "C" struct dive *clone_delete_divecomputer(const struct dive *d, int dc_number) +struct dive *clone_delete_divecomputer(const struct dive *d, int dc_number) { struct dive *res; @@ -3135,7 +3135,7 @@ extern "C" struct dive *clone_delete_divecomputer(const struct dive *d, int dc_n * The dives will not be associated with a trip. * On error, both output parameters are set to NULL. */ -extern "C" void split_divecomputer(const struct dive *src, int num, struct dive **out1, struct dive **out2) +void split_divecomputer(const struct dive *src, int num, struct dive **out1, struct dive **out2) { const struct divecomputer *srcdc = get_dive_dc_const(src, num); @@ -3161,7 +3161,7 @@ extern "C" void split_divecomputer(const struct dive *src, int num, struct dive } //Calculate O2 in best mix -extern "C" fraction_t best_o2(depth_t depth, const struct dive *dive, bool in_planner) +fraction_t best_o2(depth_t depth, const struct dive *dive, bool in_planner) { fraction_t fo2; int po2 = in_planner ? prefs.bottompo2 : (int)(prefs.modpO2 * 1000.0); @@ -3174,7 +3174,7 @@ extern "C" fraction_t best_o2(depth_t depth, const struct dive *dive, bool in_pl } //Calculate He in best mix. O2 is considered narcopic -extern "C" fraction_t best_he(depth_t depth, const struct dive *dive, bool o2narcotic, fraction_t fo2) +fraction_t best_he(depth_t depth, const struct dive *dive, bool o2narcotic, fraction_t fo2) { fraction_t fhe; int pnarcotic, ambient; @@ -3190,18 +3190,18 @@ extern "C" fraction_t best_he(depth_t depth, const struct dive *dive, bool o2nar return fhe; } -extern "C" void invalidate_dive_cache(struct dive *dive) +void invalidate_dive_cache(struct dive *dive) { memset(dive->git_id, 0, 20); } -extern "C" bool dive_cache_is_valid(const struct dive *dive) +bool dive_cache_is_valid(const struct dive *dive) { static const unsigned char null_id[20] = { 0, }; return !!memcmp(dive->git_id, null_id, 20); } -extern "C" int get_surface_pressure_in_mbar(const struct dive *dive, bool non_null) +int get_surface_pressure_in_mbar(const struct dive *dive, bool non_null) { int mbar = dive->surface_pressure.mbar; if (!mbar && non_null) @@ -3237,12 +3237,12 @@ static double calculate_depth_to_mbarf(int depth, pressure_t surface_pressure, i return mbar + depth * specific_weight; } -extern "C" int depth_to_mbar(int depth, const struct dive *dive) +int depth_to_mbar(int depth, const struct dive *dive) { return lrint(depth_to_mbarf(depth, dive)); } -extern "C" double depth_to_mbarf(int depth, const struct dive *dive) +double depth_to_mbarf(int depth, const struct dive *dive) { // For downloaded and planned dives, use DC's values int salinity = dive->dc.salinity; @@ -3255,12 +3255,12 @@ extern "C" double depth_to_mbarf(int depth, const struct dive *dive) return calculate_depth_to_mbarf(depth, surface_pressure, salinity); } -extern "C" double depth_to_bar(int depth, const struct dive *dive) +double depth_to_bar(int depth, const struct dive *dive) { return depth_to_mbar(depth, dive) / 1000.0; } -extern "C" double depth_to_atm(int depth, const struct dive *dive) +double depth_to_atm(int depth, const struct dive *dive) { return mbar_to_atm(depth_to_mbar(depth, dive)); } @@ -3269,7 +3269,7 @@ extern "C" double depth_to_atm(int depth, const struct dive *dive) * (that's the one that some dive computers like the Uemis Zurich * provide - for the other models that do this libdivecomputer has to * take care of this, but the Uemis we support natively */ -extern "C" int rel_mbar_to_depth(int mbar, const struct dive *dive) +int rel_mbar_to_depth(int mbar, const struct dive *dive) { // For downloaded and planned dives, use DC's salinity. Manual dives, use user's salinity int salinity = is_dc_manually_added_dive(&dive->dc) ? dive->user_salinity : dive->dc.salinity; @@ -3281,7 +3281,7 @@ extern "C" int rel_mbar_to_depth(int mbar, const struct dive *dive) return (int)lrint(mbar / specific_weight); } -extern "C" int mbar_to_depth(int mbar, const struct dive *dive) +int mbar_to_depth(int mbar, const struct dive *dive) { // For downloaded and planned dives, use DC's pressure. Manual dives, use user's pressure pressure_t surface_pressure = is_dc_manually_added_dive(&dive->dc) @@ -3295,7 +3295,7 @@ extern "C" int mbar_to_depth(int mbar, const struct dive *dive) } /* MOD rounded to multiples of roundto mm */ -extern "C" depth_t gas_mod(struct gasmix mix, pressure_t po2_limit, const struct dive *dive, int roundto) +depth_t gas_mod(struct gasmix mix, pressure_t po2_limit, const struct dive *dive, int roundto) { depth_t rounded_depth; @@ -3305,7 +3305,7 @@ extern "C" depth_t gas_mod(struct gasmix mix, pressure_t po2_limit, const struct } /* Maximum narcotic depth rounded to multiples of roundto mm */ -extern "C" depth_t gas_mnd(struct gasmix mix, depth_t end, const struct dive *dive, int roundto) +depth_t gas_mnd(struct gasmix mix, depth_t end, const struct dive *dive, int roundto) { depth_t rounded_depth; pressure_t ppo2n2; @@ -3323,14 +3323,14 @@ extern "C" depth_t gas_mnd(struct gasmix mix, depth_t end, const struct dive *di return rounded_depth; } -extern "C" struct dive *get_dive(int nr) +struct dive *get_dive(int nr) { if (nr >= divelog.dives->nr || nr < 0) return NULL; return divelog.dives->dives[nr]; } -extern "C" struct dive_site *get_dive_site_for_dive(const struct dive *dive) +struct dive_site *get_dive_site_for_dive(const struct dive *dive) { return dive->dive_site; } @@ -3347,7 +3347,7 @@ std::string get_dive_location(const struct dive *dive) return ds ? ds->name : std::string(); } -extern "C" unsigned int number_of_computers(const struct dive *dive) +unsigned int number_of_computers(const struct dive *dive) { unsigned int total_number = 0; const struct divecomputer *dc = &dive->dc; @@ -3362,7 +3362,7 @@ extern "C" unsigned int number_of_computers(const struct dive *dive) return total_number; } -extern "C" struct divecomputer *get_dive_dc(struct dive *dive, int nr) +struct divecomputer *get_dive_dc(struct dive *dive, int nr) { struct divecomputer *dc; if (!dive) @@ -3377,12 +3377,12 @@ extern "C" struct divecomputer *get_dive_dc(struct dive *dive, int nr) return dc; } -extern "C" const struct divecomputer *get_dive_dc_const(const struct dive *dive, int nr) +const struct divecomputer *get_dive_dc_const(const struct dive *dive, int nr) { return get_dive_dc((struct dive *)dive, nr); } -extern "C" struct dive *get_dive_by_uniq_id(int id) +struct dive *get_dive_by_uniq_id(int id) { int i; struct dive *dive = NULL; @@ -3400,7 +3400,7 @@ extern "C" struct dive *get_dive_by_uniq_id(int id) return dive; } -extern "C" int get_idx_by_uniq_id(int id) +int get_idx_by_uniq_id(int id) { int i; struct dive *dive = NULL; @@ -3418,12 +3418,12 @@ extern "C" int get_idx_by_uniq_id(int id) return i; } -extern "C" bool dive_site_has_gps_location(const struct dive_site *ds) +bool dive_site_has_gps_location(const struct dive_site *ds) { return ds && has_location(&ds->location); } -extern "C" int dive_has_gps_location(const struct dive *dive) +int dive_has_gps_location(const struct dive *dive) { if (!dive) return false; @@ -3458,7 +3458,7 @@ static location_t dc_get_gps_location(const struct divecomputer *dc) * This function is potentially slow, therefore only call sparingly * and remember the result. */ -extern "C" location_t dive_get_gps_location(const struct dive *d) +location_t dive_get_gps_location(const struct dive *d) { location_t res = { }; @@ -3478,7 +3478,7 @@ extern "C" location_t dive_get_gps_location(const struct dive *d) } /* When evaluated at the time of a gasswitch, this returns the new gas */ -extern "C" struct gasmix get_gasmix(const struct dive *dive, const struct divecomputer *dc, int time, const struct event **evp, struct gasmix gasmix) +struct gasmix get_gasmix(const struct dive *dive, const struct divecomputer *dc, int time, const struct event **evp, struct gasmix gasmix) { const struct event *ev = *evp; struct gasmix res; @@ -3506,7 +3506,7 @@ extern "C" struct gasmix get_gasmix(const struct dive *dive, const struct diveco /* get the gas at a certain time during the dive */ /* If there is a gasswitch at that time, it returns the new gasmix */ -extern "C" struct gasmix get_gasmix_at_time(const struct dive *d, const struct divecomputer *dc, duration_t time) +struct gasmix get_gasmix_at_time(const struct dive *d, const struct divecomputer *dc, duration_t time) { const struct event *ev = NULL; struct gasmix gasmix = gasmix_air; @@ -3514,7 +3514,7 @@ extern "C" struct gasmix get_gasmix_at_time(const struct dive *d, const struct d } /* Does that cylinder have any pressure readings? */ -extern "C" bool cylinder_with_sensor_sample(const struct dive *dive, int cylinder_id) +bool cylinder_with_sensor_sample(const struct dive *dive, int cylinder_id) { for (const struct divecomputer *dc = &dive->dc; dc; dc = dc->next) { for (int i = 0; i < dc->samples; ++i) { diff --git a/core/dive.h b/core/dive.h index e78214282..1c8696110 100644 --- a/core/dive.h +++ b/core/dive.h @@ -13,8 +13,6 @@ #include #include -extern "C" { - extern int last_xml_version; extern const char *divemode_text_ui[]; @@ -218,7 +216,6 @@ extern struct gasmix get_gasmix(const struct dive *dive, const struct divecomput extern struct gasmix get_gasmix_at_time(const struct dive *dive, const struct divecomputer *dc, duration_t time); extern void update_setpoint_events(const struct dive *dive, struct divecomputer *dc); -} /* Make pointers to dive and dive_trip "Qt metatypes" so that they can be passed through * QVariants and through QML. diff --git a/core/divecomputer.cpp b/core/divecomputer.cpp index 4577baf39..61a90fbfb 100644 --- a/core/divecomputer.cpp +++ b/core/divecomputer.cpp @@ -117,7 +117,7 @@ static void fill_samples_no_avg(struct sample *s, int max_d, int max_t, double s } } -extern "C" void fake_dc(struct divecomputer *dc) +void fake_dc(struct divecomputer *dc) { alloc_samples(dc, 6); struct sample *fake = dc->sample; @@ -199,7 +199,7 @@ extern "C" void fake_dc(struct divecomputer *dc) * saving the dive mode for each event. When the events occur AFTER 'time' seconds, the last stored divemode * is returned. This function is self-tracking, relying on setting the event pointer 'evp' so that, in each iteration * that calls this function, the search does not have to begin at the first event of the dive */ -extern "C" enum divemode_t get_current_divemode(const struct divecomputer *dc, int time, const struct event **evp, enum divemode_t *divemode) +enum divemode_t get_current_divemode(const struct divecomputer *dc, int time, const struct event **evp, enum divemode_t *divemode) { const struct event *ev = *evp; if (dc) { @@ -221,7 +221,7 @@ extern "C" enum divemode_t get_current_divemode(const struct divecomputer *dc, i /* helper function to make it easier to work with our structures * we don't interpolate here, just use the value from the last sample up to that time */ -extern "C" int get_depth_at_time(const struct divecomputer *dc, unsigned int time) +int get_depth_at_time(const struct divecomputer *dc, unsigned int time) { int depth = 0; if (dc && dc->sample) @@ -236,7 +236,7 @@ extern "C" int get_depth_at_time(const struct divecomputer *dc, unsigned int tim /* The first divecomputer is embedded in the dive structure. Free its data but not * the structure itself. For all remainding dcs in the list, free data *and* structures. */ -extern "C" void free_dive_dcs(struct divecomputer *dc) +void free_dive_dcs(struct divecomputer *dc) { free_dc_contents(dc); STRUCTURED_LIST_FREE(struct divecomputer, dc->next, free_dc); @@ -244,7 +244,7 @@ extern "C" void free_dive_dcs(struct divecomputer *dc) /* make room for num samples; if not enough space is available, the sample * array is reallocated and the existing samples are copied. */ -extern "C" void alloc_samples(struct divecomputer *dc, int num) +void alloc_samples(struct divecomputer *dc, int num) { if (num > dc->alloc_samples) { dc->alloc_samples = (num * 3) / 2 + 10; @@ -254,7 +254,7 @@ extern "C" void alloc_samples(struct divecomputer *dc, int num) } } -extern "C" void free_samples(struct divecomputer *dc) +void free_samples(struct divecomputer *dc) { if (dc) { free(dc->sample); @@ -264,7 +264,7 @@ extern "C" void free_samples(struct divecomputer *dc) } } -extern "C" struct sample *prepare_sample(struct divecomputer *dc) +struct sample *prepare_sample(struct divecomputer *dc) { if (dc) { int nr = dc->samples; @@ -291,12 +291,12 @@ extern "C" struct sample *prepare_sample(struct divecomputer *dc) } -extern "C" void finish_sample(struct divecomputer *dc) +void finish_sample(struct divecomputer *dc) { dc->samples++; } -extern "C" struct sample *add_sample(const struct sample *sample, int time, struct divecomputer *dc) +struct sample *add_sample(const struct sample *sample, int time, struct divecomputer *dc) { struct sample *p = prepare_sample(dc); @@ -314,7 +314,7 @@ extern "C" struct sample *add_sample(const struct sample *sample, int time, stru * * This ignores any surface time in the middle of the dive. */ -extern "C" void fixup_dc_duration(struct divecomputer *dc) +void fixup_dc_duration(struct divecomputer *dc) { int duration, i; int lasttime, lastdepth, depthtime; @@ -347,7 +347,7 @@ extern "C" void fixup_dc_duration(struct divecomputer *dc) * What do the dive computers say the water temperature is? * (not in the samples, but as dc property for dcs that support that) */ -extern "C" unsigned int dc_watertemp(const struct divecomputer *dc) +unsigned int dc_watertemp(const struct divecomputer *dc) { int sum = 0, nr = 0; @@ -365,7 +365,7 @@ extern "C" unsigned int dc_watertemp(const struct divecomputer *dc) /* * What do the dive computers say the air temperature is? */ -extern "C" unsigned int dc_airtemp(const struct divecomputer *dc) +unsigned int dc_airtemp(const struct divecomputer *dc) { int sum = 0, nr = 0; @@ -381,7 +381,7 @@ extern "C" unsigned int dc_airtemp(const struct divecomputer *dc) } /* copies all events in this dive computer */ -extern "C" void copy_events(const struct divecomputer *s, struct divecomputer *d) +void copy_events(const struct divecomputer *s, struct divecomputer *d) { const struct event *ev; struct event **pev; @@ -398,7 +398,7 @@ extern "C" void copy_events(const struct divecomputer *s, struct divecomputer *d *pev = NULL; } -extern "C" void copy_samples(const struct divecomputer *s, struct divecomputer *d) +void copy_samples(const struct divecomputer *s, struct divecomputer *d) { /* instead of carefully copying them one by one and calling add_sample * over and over again, let's just copy the whole blob */ @@ -420,7 +420,7 @@ extern "C" void copy_samples(const struct divecomputer *s, struct divecomputer * memcpy(d->sample, s->sample, nr * sizeof(struct sample)); } -extern "C" void add_event_to_dc(struct divecomputer *dc, struct event *ev) +void add_event_to_dc(struct divecomputer *dc, struct event *ev) { struct event **p; @@ -433,7 +433,7 @@ extern "C" void add_event_to_dc(struct divecomputer *dc, struct event *ev) *p = ev; } -extern "C" struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name) +struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name) { struct event *ev = create_event(time, type, flags, value, name); @@ -446,7 +446,7 @@ extern "C" struct event *add_event(struct divecomputer *dc, unsigned int time, i } /* Substitutes an event in a divecomputer for another. No reordering is performed! */ -extern "C" void swap_event(struct divecomputer *dc, struct event *from, struct event *to) +void swap_event(struct divecomputer *dc, struct event *from, struct event *to) { for (struct event **ep = &dc->events; *ep; ep = &(*ep)->next) { if (*ep == from) { @@ -459,7 +459,7 @@ extern "C" void swap_event(struct divecomputer *dc, struct event *from, struct e } /* Remove given event from dive computer. Does *not* free the event. */ -extern "C" void remove_event_from_dc(struct divecomputer *dc, struct event *event) +void remove_event_from_dc(struct divecomputer *dc, struct event *event) { for (struct event **ep = &dc->events; *ep; ep = &(*ep)->next) { if (*ep == event) { @@ -470,7 +470,7 @@ extern "C" void remove_event_from_dc(struct divecomputer *dc, struct event *even } } -extern "C" void add_extra_data(struct divecomputer *dc, const char *key, const char *value) +void add_extra_data(struct divecomputer *dc, const char *key, const char *value) { struct extra_data **ed = &dc->extra_data; @@ -492,13 +492,21 @@ extern "C" void add_extra_data(struct divecomputer *dc, const char *key, const c } } +<<<<<<< HEAD +======= +bool is_dc_planner(const struct divecomputer *dc) +{ + return same_string(dc->model, "planned dive"); +} + +>>>>>>> ed6cdf19f (build: remove extern "C" linkage) /* * Match two dive computer entries against each other, and * tell if it's the same dive. Return 0 if "don't know", * positive for "same dive" and negative for "definitely * not the same dive" */ -extern "C" int match_one_dc(const struct divecomputer *a, const struct divecomputer *b) +int match_one_dc(const struct divecomputer *a, const struct divecomputer *b) { /* Not same model? Don't know if matching.. */ if (!a->model || !b->model) @@ -527,7 +535,7 @@ static void free_extra_data(struct extra_data *ed) free((void *)ed->value); } -extern "C" void free_dc_contents(struct divecomputer *dc) +void free_dc_contents(struct divecomputer *dc) { free(dc->sample); free((void *)dc->model); @@ -537,7 +545,7 @@ extern "C" void free_dc_contents(struct divecomputer *dc) STRUCTURED_LIST_FREE(struct extra_data, dc->extra_data, free_extra_data); } -extern "C" void free_dc(struct divecomputer *dc) +void free_dc(struct divecomputer *dc) { free_dc_contents(dc); free(dc); @@ -545,12 +553,12 @@ extern "C" void free_dc(struct divecomputer *dc) static const char *planner_dc_name = "planned dive"; -extern "C" bool is_dc_planner(const struct divecomputer *dc) +bool is_dc_planner(const struct divecomputer *dc) { return same_string(dc->model, planner_dc_name); } -extern "C" void make_planner_dc(struct divecomputer *dc) +void make_planner_dc(struct divecomputer *dc) { free((void *)dc->model); dc->model = strdup(planner_dc_name); @@ -558,12 +566,12 @@ extern "C" void make_planner_dc(struct divecomputer *dc) const char *manual_dc_name = "manually added dive"; -extern "C" bool is_dc_manually_added_dive(const struct divecomputer *dc) +bool is_dc_manually_added_dive(const struct divecomputer *dc) { return dc && same_string(dc->model, manual_dc_name); } -extern "C" void make_manually_added_dive_dc(struct divecomputer *dc) +void make_manually_added_dive_dc(struct divecomputer *dc) { free((void *)dc->model); dc->model = strdup(manual_dc_name); diff --git a/core/divecomputer.h b/core/divecomputer.h index d4d0f834a..de7bdfa45 100644 --- a/core/divecomputer.h +++ b/core/divecomputer.h @@ -5,8 +5,6 @@ #include "divemode.h" #include "units.h" -extern "C" { - struct extra_data; struct sample; @@ -75,6 +73,4 @@ extern void make_manually_added_dive_dc(struct divecomputer *dc); /* Check if two dive computer entries are the exact same dive (-1=no/0=maybe/1=yes) */ extern int match_one_dc(const struct divecomputer *a, const struct divecomputer *b); -} - #endif diff --git a/core/divelist.cpp b/core/divelist.cpp index b3f072be9..805345941 100644 --- a/core/divelist.cpp +++ b/core/divelist.cpp @@ -29,7 +29,7 @@ * - Nitrox trumps air (even if hypoxic) * These are the same rules as the inter-dive sorting rules. */ -extern "C" void get_dive_gas(const struct dive *dive, int *o2_p, int *he_p, int *o2max_p) +void get_dive_gas(const struct dive *dive, int *o2_p, int *he_p, int *o2max_p) { int i; int maxo2 = -1, maxhe = -1, mino2 = 1000; @@ -63,7 +63,7 @@ extern "C" void get_dive_gas(const struct dive *dive, int *o2_p, int *he_p, int *o2max_p = maxo2; } -extern "C" int total_weight(const struct dive *dive) +int total_weight(const struct dive *dive) { int i, total_grams = 0; @@ -424,7 +424,7 @@ static void add_dive_to_deco(struct deco_state *ds, struct dive *dive, bool in_p } } -extern "C" int get_divenr(const struct dive *dive) +int get_divenr(const struct dive *dive) { int i; const struct dive *d; @@ -442,7 +442,7 @@ extern "C" int get_divenr(const struct dive *dive) /* return negative surface time if dives are overlapping */ /* The place you call this function is likely the place where you want * to create the deco_state */ -extern "C" int init_decompression(struct deco_state *ds, const struct dive *dive, bool in_planner) +int init_decompression(struct deco_state *ds, const struct dive *dive, bool in_planner) { int i, divenr = -1; int surface_time = 48 * 60 * 60; @@ -656,7 +656,7 @@ static int comp_dc(const struct divecomputer *dc1, const struct divecomputer *dc * We might also consider sorting by end-time and other criteria, * but see the caveat above (editing means rearrangement of the dives). */ -extern "C" int comp_dives(const struct dive *a, const struct dive *b) +int comp_dives(const struct dive *a, const struct dive *b) { int cmp; if (a->when < b->when) @@ -697,7 +697,7 @@ MAKE_REMOVE(dive_table, struct dive *, dive) MAKE_CLEAR_TABLE(dive_table, dives, dive) MAKE_MOVE_TABLE(dive_table, dives) -extern "C" void insert_dive(struct dive_table *table, struct dive *d) +void insert_dive(struct dive_table *table, struct dive *d) { int idx = dive_table_get_insertion_index(table, d); add_to_dive_table(table, idx, d); @@ -733,13 +733,13 @@ static void autogroup_dives(struct dive_table *table, struct trip_table *trip_ta /* Remove a dive from a dive table. This assumes that the * dive was already removed from any trip and deselected. * It simply shrinks the table and frees the trip */ -extern "C" void delete_dive_from_table(struct dive_table *table, int idx) +void delete_dive_from_table(struct dive_table *table, int idx) { free_dive(table->dives[idx]); remove_from_dive_table(table, idx); } -extern "C" struct dive *get_dive_from_table(int nr, const struct dive_table *dt) +struct dive *get_dive_from_table(int nr, const struct dive_table *dt) { if (nr >= dt->nr || nr < 0) return NULL; @@ -750,7 +750,7 @@ extern "C" struct dive *get_dive_from_table(int nr, const struct dive_table *dt) * resources associated with the dive. The caller must removed the dive * from the trip-list. Returns a pointer to the unregistered dive. * The unregistered dive has the selection- and hidden-flags cleared. */ -extern "C" struct dive *unregister_dive(int idx) +struct dive *unregister_dive(int idx) { struct dive *dive = get_dive(idx); if (!dive) @@ -765,7 +765,7 @@ extern "C" struct dive *unregister_dive(int idx) return dive; } -extern "C" void process_loaded_dives() +void process_loaded_dives() { sort_dive_table(divelog.dives); sort_trip_table(divelog.trips); @@ -944,7 +944,7 @@ static bool merge_dive_tables(struct dive_table *dives_from, struct dive_table * /* Merge the dives of the trip "from" and the dive_table "dives_from" into the trip "to" * and dive_table "dives_to". If "prefer_imported" is true, dive data of "from" takes * precedence */ -extern "C" void add_imported_dives(struct divelog *import_log, int flags) +void add_imported_dives(struct divelog *import_log, int flags) { int i, idx; struct dive_table dives_to_add = empty_dive_table; @@ -1024,7 +1024,6 @@ extern "C" void add_imported_dives(struct divelog *import_log, int flags) * Returns true if trip was merged. In this case, the trip will be * freed. */ -extern "C" bool try_to_merge_trip(struct dive_trip *trip_import, struct dive_table *import_table, bool prefer_imported, /* output parameters: */ struct dive_table *dives_to_add, struct dive_table *dives_to_remove, @@ -1081,7 +1080,6 @@ bool try_to_merge_trip(struct dive_trip *trip_import, struct dive_table *import_ * - If IMPORT_ADD_TO_NEW_TRIP is true, dives that are not assigned * to a trip will be added to a newly generated trip. */ -extern "C" void process_imported_dives(struct divelog *import_log, int flags, /* output parameters: */ struct dive_table *dives_to_add, struct dive_table *dives_to_remove, @@ -1249,7 +1247,7 @@ static struct dive *get_last_valid_dive() * - last_nr+1 for addition at end of log (if last dive had a number) * - 0 for all other cases */ -extern "C" int get_dive_nr_at_idx(int idx) +int get_dive_nr_at_idx(int idx) { if (idx < divelog.dives->nr) return 0; @@ -1261,12 +1259,12 @@ extern "C" int get_dive_nr_at_idx(int idx) static int min_datafile_version; -extern "C" int get_min_datafile_version() +int get_min_datafile_version() { return min_datafile_version; } -extern "C" void report_datafile_version(int version) +void report_datafile_version(int version) { if (min_datafile_version == 0 || min_datafile_version > version) min_datafile_version = version; @@ -1291,7 +1289,7 @@ void clear_dive_file_data() emit_reset_signal(); } -extern "C" bool dive_less_than(const struct dive *a, const struct dive *b) +bool dive_less_than(const struct dive *a, const struct dive *b) { return comp_dives(a, b) < 0; } @@ -1330,7 +1328,7 @@ static int comp_dive_or_trip(struct dive_or_trip a, struct dive_or_trip b) return -comp_dive_to_trip(b.dive, a.trip); } -extern "C" bool dive_or_trip_less_than(struct dive_or_trip a, struct dive_or_trip b) +bool dive_or_trip_less_than(struct dive_or_trip a, struct dive_or_trip b) { return comp_dive_or_trip(a, b) < 0; } @@ -1345,7 +1343,7 @@ extern "C" bool dive_or_trip_less_than(struct dive_or_trip a, struct dive_or_tri * that happened inside other dives. The interval will always be calculated * with respect to the dive that started previously. */ -extern "C" timestamp_t get_surface_interval(timestamp_t when) +timestamp_t get_surface_interval(timestamp_t when) { int i; timestamp_t prev_end; @@ -1366,7 +1364,7 @@ extern "C" timestamp_t get_surface_interval(timestamp_t when) /* Find visible dive close to given date. First search towards older, * then newer dives. */ -extern "C" struct dive *find_next_visible_dive(timestamp_t when) +struct dive *find_next_visible_dive(timestamp_t when) { int i, j; @@ -1392,7 +1390,7 @@ extern "C" struct dive *find_next_visible_dive(timestamp_t when) return NULL; } -extern "C" bool has_dive(unsigned int deviceid, unsigned int diveid) +bool has_dive(unsigned int deviceid, unsigned int diveid) { int i; struct dive *dive; diff --git a/core/divelist.h b/core/divelist.h index c46316bf2..fed83f31c 100644 --- a/core/divelist.h +++ b/core/divelist.h @@ -4,8 +4,6 @@ #include "units.h" -extern "C" { - struct dive; struct divelog; struct trip_table; @@ -60,6 +58,4 @@ void move_dive_table(struct dive_table *src, struct dive_table *dst); struct dive *unregister_dive(int idx); extern bool has_dive(unsigned int deviceid, unsigned int diveid); -} - #endif // DIVELIST_H diff --git a/core/divelog.cpp b/core/divelog.cpp index f5c42b88c..5a4caea23 100644 --- a/core/divelog.cpp +++ b/core/divelog.cpp @@ -92,7 +92,7 @@ void divelog::clear() filter_presets->clear(); } -extern "C" void clear_divelog(struct divelog *log) +void clear_divelog(struct divelog *log) { log->clear(); } diff --git a/core/divelog.h b/core/divelog.h index 44ec950a4..b3612a405 100644 --- a/core/divelog.h +++ b/core/divelog.h @@ -27,11 +27,7 @@ struct divelog { extern struct divelog divelog; -extern "C" { - void clear_divelog(struct divelog *); extern void delete_single_dive(struct divelog *, int idx); -} - #endif diff --git a/core/equipment.cpp b/core/equipment.cpp index 9dbcfdf49..82f7d5340 100644 --- a/core/equipment.cpp +++ b/core/equipment.cpp @@ -25,26 +25,26 @@ * is freed, but the data it references. The object itself is passed in by value. * This is due to the fact how the table macros work. */ -extern "C" void free_weightsystem(weightsystem_t ws) +void free_weightsystem(weightsystem_t ws) { free((void *)ws.description); ws.description = NULL; } -extern "C" void free_cylinder(cylinder_t c) +void free_cylinder(cylinder_t c) { free((void *)c.type.description); c.type.description = NULL; } -extern "C" void copy_weights(const struct weightsystem_table *s, struct weightsystem_table *d) +void copy_weights(const struct weightsystem_table *s, struct weightsystem_table *d) { clear_weightsystem_table(d); for (int i = 0; i < s->nr; i++) add_cloned_weightsystem(d, s->weightsystems[i]); } -extern "C" void copy_cylinders(const struct cylinder_table *s, struct cylinder_table *d) +void copy_cylinders(const struct cylinder_table *s, struct cylinder_table *d) { int i; clear_cylinder_table(d); @@ -76,7 +76,7 @@ const char *cylinderuse_text[NUM_GAS_USE] = { QT_TRANSLATE_NOOP("gettextFromC", "OC-gas"), QT_TRANSLATE_NOOP("gettextFromC", "diluent"), QT_TRANSLATE_NOOP("gettextFromC", "oxygen"), QT_TRANSLATE_NOOP("gettextFromC", "not used") }; -extern "C" enum cylinderuse cylinderuse_from_text(const char *text) +enum cylinderuse cylinderuse_from_text(const char *text) { for (int i = 0; i < static_cast(NUM_GAS_USE); i++) { if (same_string(text, cylinderuse_text[i]) || same_string(text, translate("gettextFromC", cylinderuse_text[i]))) @@ -178,7 +178,7 @@ weight_t get_weightsystem_weight(const std::string &name) return it != ws_info_table.end() ? it->weight : weight_t(); } -extern "C" weightsystem_t clone_weightsystem(weightsystem_t ws) +weightsystem_t clone_weightsystem(weightsystem_t ws) { weightsystem_t res = { ws.weight, copy_string(ws.description), ws.auto_filled }; return res; @@ -186,19 +186,19 @@ extern "C" weightsystem_t clone_weightsystem(weightsystem_t ws) /* Add a clone of a weightsystem to the end of a weightsystem table. * Cloned means that the description-string is copied. */ -extern "C" void add_cloned_weightsystem(struct weightsystem_table *t, weightsystem_t ws) +void add_cloned_weightsystem(struct weightsystem_table *t, weightsystem_t ws) { add_to_weightsystem_table(t, t->nr, clone_weightsystem(ws)); } -extern "C" cylinder_t clone_cylinder(cylinder_t cyl) +cylinder_t clone_cylinder(cylinder_t cyl) { cylinder_t res = cyl; res.type.description = copy_string(res.type.description); return res; } -extern "C" void add_cylinder(struct cylinder_table *t, int idx, cylinder_t cyl) +void add_cylinder(struct cylinder_table *t, int idx, cylinder_t cyl) { add_to_cylinder_table(t, idx, cyl); /* FIXME: This is a horrible hack: we make sure that at the end of @@ -212,18 +212,18 @@ extern "C" void add_cylinder(struct cylinder_table *t, int idx, cylinder_t cyl) /* Add a clone of a cylinder to the end of a cylinder table. * Cloned means that the description-string is copied. */ -extern "C" void add_cloned_cylinder(struct cylinder_table *t, cylinder_t cyl) +void add_cloned_cylinder(struct cylinder_table *t, cylinder_t cyl) { add_cylinder(t, t->nr, clone_cylinder(cyl)); } -extern "C" bool same_weightsystem(weightsystem_t w1, weightsystem_t w2) +bool same_weightsystem(weightsystem_t w1, weightsystem_t w2) { return w1.weight.grams == w2.weight.grams && same_string(w1.description, w2.description); } -extern "C" void get_gas_string(struct gasmix gasmix, char *text, int len) +void get_gas_string(struct gasmix gasmix, char *text, int len) { if (gasmix_is_air(gasmix)) snprintf(text, len, "%s", translate("gettextFromC", "air")); @@ -236,21 +236,21 @@ extern "C" void get_gas_string(struct gasmix gasmix, char *text, int len) } /* Returns a static char buffer - only good for immediate use by printf etc */ -extern "C" const char *gasname(struct gasmix gasmix) +const char *gasname(struct gasmix gasmix) { static char gas[64]; get_gas_string(gasmix, gas, sizeof(gas)); return gas; } -extern "C" int gas_volume(const cylinder_t *cyl, pressure_t p) +int gas_volume(const cylinder_t *cyl, pressure_t p) { double bar = p.mbar / 1000.0; double z_factor = gas_compressibility_factor(cyl->gasmix, bar); return lrint(cyl->type.size.mliter * bar_to_atm(bar) / z_factor); } -extern "C" int find_best_gasmix_match(struct gasmix mix, const struct cylinder_table *cylinders) +int find_best_gasmix_match(struct gasmix mix, const struct cylinder_table *cylinders) { int i; int best = -1, score = INT_MAX; @@ -355,18 +355,18 @@ struct std::vector ws_info_table = { { QT_TRANSLATE_NOOP("gettextFromC", "clip-on"), weight_t() }, }; -extern "C" void remove_cylinder(struct dive *dive, int idx) +void remove_cylinder(struct dive *dive, int idx) { remove_from_cylinder_table(&dive->cylinders, idx); } -extern "C" void remove_weightsystem(struct dive *dive, int idx) +void remove_weightsystem(struct dive *dive, int idx) { remove_from_weightsystem_table(&dive->weightsystems, idx); } // ws is cloned. -extern "C" void set_weightsystem(struct dive *dive, int idx, weightsystem_t ws) +void set_weightsystem(struct dive *dive, int idx, weightsystem_t ws) { if (idx < 0 || idx >= dive->weightsystems.nr) return; @@ -376,7 +376,7 @@ extern "C" void set_weightsystem(struct dive *dive, int idx, weightsystem_t ws) /* when planning a dive we need to make sure that all cylinders have a sane depth assigned * and if we are tracking gas consumption the pressures need to be reset to start = end = workingpressure */ -extern "C" void reset_cylinders(struct dive *dive, bool track_gas) +void reset_cylinders(struct dive *dive, bool track_gas) { pressure_t decopo2 = {.mbar = prefs.decopo2}; @@ -403,7 +403,7 @@ static void copy_cylinder_type(const cylinder_t *s, cylinder_t *d) } /* copy the equipment data part of the cylinders but keep pressures */ -extern "C" void copy_cylinder_types(const struct dive *s, struct dive *d) +void copy_cylinder_types(const struct dive *s, struct dive *d) { int i; if (!s || !d) @@ -416,7 +416,7 @@ extern "C" void copy_cylinder_types(const struct dive *s, struct dive *d) add_cloned_cylinder(&d->cylinders, *get_cylinder(s, i)); } -extern "C" cylinder_t *add_empty_cylinder(struct cylinder_table *t) +cylinder_t *add_empty_cylinder(struct cylinder_table *t) { cylinder_t cyl = empty_cylinder; cyl.type.description = strdup(""); @@ -432,7 +432,7 @@ extern "C" cylinder_t *add_empty_cylinder(struct cylinder_table *t) * Multiple cylinders might be created if the index is bigger than the * number of existing cylinders */ -extern "C" cylinder_t *get_cylinder(const struct dive *d, int idx) +cylinder_t *get_cylinder(const struct dive *d, int idx) { /* FIXME: The planner uses a dummy cylinder one past the official number of cylinders * in the table to mark no-cylinder surface interavals. This is horrendous. Fix ASAP. */ @@ -444,7 +444,7 @@ extern "C" cylinder_t *get_cylinder(const struct dive *d, int idx) return &d->cylinders.cylinders[idx]; } -extern "C" cylinder_t *get_or_create_cylinder(struct dive *d, int idx) +cylinder_t *get_or_create_cylinder(struct dive *d, int idx) { if (idx < 0) { report_info("Warning: accessing invalid cylinder %d", idx); @@ -456,7 +456,7 @@ extern "C" cylinder_t *get_or_create_cylinder(struct dive *d, int idx) } /* if a default cylinder is set, use that */ -extern "C" void fill_default_cylinder(const struct dive *dive, cylinder_t *cyl) +void fill_default_cylinder(const struct dive *dive, cylinder_t *cyl) { const char *cyl_name = prefs.default_cylinder; pressure_t pO2 = {.mbar = static_cast(lrint(prefs.modpO2 * 1000.0))}; @@ -481,7 +481,7 @@ extern "C" void fill_default_cylinder(const struct dive *dive, cylinder_t *cyl) } } -extern "C" cylinder_t create_new_cylinder(const struct dive *d) +cylinder_t create_new_cylinder(const struct dive *d) { cylinder_t cyl = empty_cylinder; fill_default_cylinder(d, &cyl); @@ -537,7 +537,7 @@ static bool show_cylinder(const struct dive *d, int i) } /* The unused cylinders at the end of the cylinder list are hidden. */ -extern "C" int first_hidden_cylinder(const struct dive *d) +int first_hidden_cylinder(const struct dive *d) { int res = d->cylinders.nr; while (res > 0 && !show_cylinder(d, res - 1)) @@ -546,7 +546,7 @@ extern "C" int first_hidden_cylinder(const struct dive *d) } #ifdef DEBUG_CYL -extern "C" void dump_cylinders(struct dive *dive, bool verbose) +void dump_cylinders(struct dive *dive, bool verbose) { printf("Cylinder list:\n"); for (int i = 0; i < dive->cylinders; i++) { diff --git a/core/equipment.h b/core/equipment.h index a048b49bf..fd15b59c6 100644 --- a/core/equipment.h +++ b/core/equipment.h @@ -8,8 +8,6 @@ #include #include -extern "C" { - struct dive; enum cylinderuse {OC_GAS, DILUENT, OXYGEN, NOT_USED, NUM_GAS_USE}; // The different uses for cylinders @@ -109,8 +107,6 @@ extern void add_cylinder(struct cylinder_table *, int idx, cylinder_t cyl); void get_gas_string(struct gasmix gasmix, char *text, int len); const char *gasname(struct gasmix gasmix); -} - struct ws_info { std::string name; weight_t weight; diff --git a/core/errorhelper.h b/core/errorhelper.h index f90927d8e..6c85ea64e 100644 --- a/core/errorhelper.h +++ b/core/errorhelper.h @@ -4,8 +4,6 @@ // error reporting functions -extern "C" { - #ifdef __GNUC__ #define __printf(x, y) __attribute__((__format__(__printf__, x, y))) #else @@ -17,6 +15,4 @@ extern int __printf(1, 2) report_error(const char *fmt, ...); extern void __printf(1, 2) report_info(const char *fmt, ...); extern void set_error_cb(void(*cb)(char *)); // Callback takes ownership of passed string -} - #endif diff --git a/core/event.h b/core/event.h index 413da7248..66ee0bffc 100644 --- a/core/event.h +++ b/core/event.h @@ -8,8 +8,6 @@ #include -extern "C" { - enum event_severity { EVENT_SEVERITY_NONE = 0, EVENT_SEVERITY_INFO, @@ -58,6 +56,4 @@ extern enum event_severity get_event_severity(const struct event *ev); extern const struct event *get_next_event(const struct event *event, const char *name); extern struct event *get_next_event_mutable(struct event *event, const char *name); -} - #endif diff --git a/core/eventtype.cpp b/core/eventtype.cpp index 5e88480a1..8fbeb2703 100644 --- a/core/eventtype.cpp +++ b/core/eventtype.cpp @@ -27,12 +27,12 @@ static bool operator==(const event_type &en1, const event_type &en2) return en1.name == en2.name && en1.severity == en2.severity; } -extern "C" void clear_event_types() +void clear_event_types() { event_types.clear(); } -extern "C" void remember_event_type(const struct event *ev) +void remember_event_type(const struct event *ev) { if (empty_string(ev->name)) return; @@ -42,33 +42,33 @@ extern "C" void remember_event_type(const struct event *ev) event_types.push_back(std::move(type)); } -extern "C" bool is_event_type_hidden(const struct event *ev) +bool is_event_type_hidden(const struct event *ev) { auto it = std::find(event_types.begin(), event_types.end(), ev); return it != event_types.end() && !it->plot; } -extern "C" void hide_event_type(const struct event *ev) +void hide_event_type(const struct event *ev) { auto it = std::find(event_types.begin(), event_types.end(), ev); if (it != event_types.end()) it->plot = false; } -extern "C" void show_all_event_types() +void show_all_event_types() { for (event_type &e: event_types) e.plot = true; } -extern "C" void show_event_type(int idx) +void show_event_type(int idx) { if (idx < 0 || idx >= (int)event_types.size()) return; event_types[idx].plot = true; } -extern "C" bool any_event_types_hidden() +bool any_event_types_hidden() { return std::any_of(event_types.begin(), event_types.end(), [] (const event_type &e) { return !e.plot; }); diff --git a/core/eventtype.h b/core/eventtype.h index 37a589424..8f0ecd28e 100644 --- a/core/eventtype.h +++ b/core/eventtype.h @@ -6,8 +6,6 @@ #include #include -extern "C" { - extern void clear_event_types(void); extern void remember_event_type(const struct event *ev); extern bool is_event_type_hidden(const struct event *ev); @@ -15,11 +13,8 @@ extern void hide_event_type(const struct event *ev); extern void show_all_event_types(); extern void show_event_type(int idx); extern bool any_event_types_hidden(); - -} - extern std::vector hidden_event_types(); -QString event_type_name(const event *ev); -QString event_type_name(int idx); +extern QString event_type_name(const event *ev); +extern QString event_type_name(int idx); #endif diff --git a/core/file.cpp b/core/file.cpp index dd9f15b8b..93ba907d5 100644 --- a/core/file.cpp +++ b/core/file.cpp @@ -78,7 +78,7 @@ static void zip_read(struct zip_file *file, const char *filename, struct divelog (void) parse_xml_buffer(filename, mem.data(), read, log, NULL); } -extern "C" int try_to_open_zip(const char *filename, struct divelog *log) +int try_to_open_zip(const char *filename, struct divelog *log) { int success = 0; /* Grr. libzip needs to re-open the file, it can't take a buffer */ @@ -268,7 +268,7 @@ bool remote_repo_uptodate(const char *filename, struct git_info *info) return false; } -extern "C" int parse_file(const char *filename, struct divelog *log) +int parse_file(const char *filename, struct divelog *log) { struct git_info info; const char *fmt; diff --git a/core/file.h b/core/file.h index 3f93a2f72..054fd384b 100644 --- a/core/file.h +++ b/core/file.h @@ -12,7 +12,6 @@ struct divelog; struct zip; -extern "C" { extern void ostctools_import(const char *file, struct divelog *log); extern int parse_file(const char *filename, struct divelog *log); @@ -28,11 +27,7 @@ extern int subsurface_access(const char *path, int mode); extern int subsurface_stat(const char *path, struct stat *buf); extern struct zip *subsurface_zip_open_readonly(const char *path, int flags, int *errorp); extern int subsurface_zip_close(struct zip *zip); - -} - -// return data, errorcode pair. -extern std::pair readfile(const char *filename); +extern std::pair readfile(const char *filename); // return data, errorcode pair. extern int try_to_open_cochran(const char *filename, std::string &mem, struct divelog *log); extern int try_to_open_liquivision(const char *filename, std::string &mem, struct divelog *log); extern int datatrak_import(std::string &mem, std::string &wl_mem, struct divelog *log); diff --git a/core/filterconstraint.cpp b/core/filterconstraint.cpp index 55444495e..16f2fe633 100644 --- a/core/filterconstraint.cpp +++ b/core/filterconstraint.cpp @@ -164,57 +164,57 @@ static enum filter_constraint_range_mode filter_constraint_range_mode_from_strin return FILTER_CONSTRAINT_EQUAL; } -extern "C" const char *filter_constraint_type_to_string(enum filter_constraint_type type) +const char *filter_constraint_type_to_string(enum filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc ? desc->token : "unknown"; } -extern "C" const char *filter_constraint_string_mode_to_string(enum filter_constraint_string_mode mode) +const char *filter_constraint_string_mode_to_string(enum filter_constraint_string_mode mode) { const string_mode_description *desc = get_string_mode_description(mode); return desc ? desc->token : "unknown"; } -extern "C" const char *filter_constraint_range_mode_to_string(enum filter_constraint_range_mode mode) +const char *filter_constraint_range_mode_to_string(enum filter_constraint_range_mode mode) { const range_mode_description *desc = get_range_mode_description(mode); return desc ? desc->token : "unknown"; } -extern "C" int filter_constraint_type_to_index(enum filter_constraint_type type) +int filter_constraint_type_to_index(enum filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc ? desc - type_descriptions : -1; } -extern "C" int filter_constraint_string_mode_to_index(enum filter_constraint_string_mode mode) +int filter_constraint_string_mode_to_index(enum filter_constraint_string_mode mode) { const string_mode_description *desc = get_string_mode_description(mode); return desc ? desc - string_mode_descriptions : -1; } -extern "C" int filter_constraint_range_mode_to_index(enum filter_constraint_range_mode mode) +int filter_constraint_range_mode_to_index(enum filter_constraint_range_mode mode) { const range_mode_description *desc = get_range_mode_description(mode); return desc ? desc - range_mode_descriptions : -1; } -extern "C" enum filter_constraint_type filter_constraint_type_from_index(int index) +enum filter_constraint_type filter_constraint_type_from_index(int index) { if (index >= 0 && index < (int)std::size(type_descriptions)) return type_descriptions[index].type; return (enum filter_constraint_type)-1; } -extern "C" enum filter_constraint_string_mode filter_constraint_string_mode_from_index(int index) +enum filter_constraint_string_mode filter_constraint_string_mode_from_index(int index) { if (index >= 0 && index < (int)std::size(string_mode_descriptions)) return string_mode_descriptions[index].mode; return (enum filter_constraint_string_mode)-1; } -extern "C" enum filter_constraint_range_mode filter_constraint_range_mode_from_index(int index) +enum filter_constraint_range_mode filter_constraint_range_mode_from_index(int index) { if (index >= 0 && index < (int)std::size(range_mode_descriptions)) return range_mode_descriptions[index].mode; @@ -390,7 +390,7 @@ QStringList filter_contraint_multiple_choice_translated(enum filter_constraint_t return QStringList(); } -extern "C" bool filter_constraint_is_string(filter_constraint_type type) +bool filter_constraint_is_string(filter_constraint_type type) { // Currently a constraint is filter based if and only if it has a string // mode (i.e. starts with, substring, exact). In the future we might also @@ -398,7 +398,7 @@ extern "C" bool filter_constraint_is_string(filter_constraint_type type) return filter_constraint_has_string_mode(type); } -extern "C" bool filter_constraint_is_timestamp(filter_constraint_type type) +bool filter_constraint_is_timestamp(filter_constraint_type type) { return type == FILTER_CONSTRAINT_DATE || type == FILTER_CONSTRAINT_DATE_TIME; } @@ -408,37 +408,37 @@ static bool is_numerical_constraint(filter_constraint_type type) return !filter_constraint_is_string(type) && !filter_constraint_is_timestamp(type); } -extern "C" bool filter_constraint_has_string_mode(enum filter_constraint_type type) +bool filter_constraint_has_string_mode(enum filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc && desc->has_string_mode; } -extern "C" bool filter_constraint_has_range_mode(enum filter_constraint_type type) +bool filter_constraint_has_range_mode(enum filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc && desc->has_range_mode; } -extern "C" bool filter_constraint_is_star(filter_constraint_type type) +bool filter_constraint_is_star(filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc && desc->is_star_widget; } -extern "C" bool filter_constraint_has_date_widget(filter_constraint_type type) +bool filter_constraint_has_date_widget(filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc && desc->has_date; } -extern "C" bool filter_constraint_has_time_widget(filter_constraint_type type) +bool filter_constraint_has_time_widget(filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc && desc->has_time; } -extern "C" int filter_constraint_num_decimals(enum filter_constraint_type type) +int filter_constraint_num_decimals(enum filter_constraint_type type) { const type_description *desc = get_type_description(type); return desc ? desc->decimal_places : 1; @@ -446,7 +446,7 @@ extern "C" int filter_constraint_num_decimals(enum filter_constraint_type type) // String constraints are valid if there is at least one term. // Other constraints are always valid. -extern "C" bool filter_constraint_is_valid(const struct filter_constraint *constraint) +bool filter_constraint_is_valid(const struct filter_constraint *constraint) { if (!filter_constraint_is_string(constraint->type)) return true; diff --git a/core/filterconstraint.h b/core/filterconstraint.h index 684c30448..e9c85ec0b 100644 --- a/core/filterconstraint.h +++ b/core/filterconstraint.h @@ -9,8 +9,6 @@ struct dive; -extern "C" { - enum filter_constraint_type { FILTER_CONSTRAINT_DATE, FILTER_CONSTRAINT_DATE_TIME, @@ -111,8 +109,6 @@ extern bool filter_constraint_has_time_widget(enum filter_constraint_type); extern int filter_constraint_num_decimals(enum filter_constraint_type); extern bool filter_constraint_is_valid(const struct filter_constraint *constraint); -} - QString filter_constraint_type_to_string_translated(enum filter_constraint_type); QString filter_constraint_negate_to_string_translated(bool negate); QString filter_constraint_string_mode_to_string_translated(enum filter_constraint_string_mode); diff --git a/core/filterpreset.cpp b/core/filterpreset.cpp index fa07f5879..518b2b264 100644 --- a/core/filterpreset.cpp +++ b/core/filterpreset.cpp @@ -9,7 +9,7 @@ static filter_preset_table &global_table() return *divelog.filter_presets; } -extern "C" int filter_presets_count(void) +int filter_presets_count(void) { return (int)global_table().size(); } @@ -19,7 +19,7 @@ extern std::string filter_preset_fulltext_query(int preset) return global_table()[preset].data.fullText.originalQuery.toStdString(); } -extern "C" const char *filter_preset_fulltext_mode(int preset) +const char *filter_preset_fulltext_mode(int preset) { switch (global_table()[preset].data.fulltextStringMode) { default: @@ -32,7 +32,7 @@ extern "C" const char *filter_preset_fulltext_mode(int preset) } } -extern "C" void filter_preset_set_fulltext(struct filter_preset *preset, const char *fulltext, const char *fulltext_string_mode) +void filter_preset_set_fulltext(struct filter_preset *preset, const char *fulltext, const char *fulltext_string_mode) { if (same_string(fulltext_string_mode, "substring")) preset->data.fulltextStringMode = StringFilterMode::SUBSTRING; @@ -43,17 +43,17 @@ extern "C" void filter_preset_set_fulltext(struct filter_preset *preset, const c preset->data.fullText = fulltext; } -extern "C" int filter_preset_constraint_count(int preset) +int filter_preset_constraint_count(int preset) { return (int)global_table()[preset].data.constraints.size(); } -extern "C" const filter_constraint *filter_preset_constraint(int preset, int constraint) +const filter_constraint *filter_preset_constraint(int preset, int constraint) { return &global_table()[preset].data.constraints[constraint]; } -extern "C" void filter_preset_set_name(struct filter_preset *preset, const char *name) +void filter_preset_set_name(struct filter_preset *preset, const char *name) { preset->name = name; } @@ -83,13 +83,13 @@ static std::string get_unique_preset_name(const std::string &orig, const struct return res; } -extern "C" void add_filter_preset_to_table(const struct filter_preset *preset, struct filter_preset_table *table) +void add_filter_preset_to_table(const struct filter_preset *preset, struct filter_preset_table *table) { std::string name = get_unique_preset_name(preset->name, *table); filter_preset_add_to_table(name, preset->data, *table); } -extern "C" void filter_preset_add_constraint(struct filter_preset *preset, const char *type, const char *string_mode, +void filter_preset_add_constraint(struct filter_preset *preset, const char *type, const char *string_mode, const char *range_mode, bool negate, const char *data) { preset->data.constraints.emplace_back(type, string_mode, range_mode, negate, data); diff --git a/core/filterpreset.h b/core/filterpreset.h index 40037a948..807a1c48c 100644 --- a/core/filterpreset.h +++ b/core/filterpreset.h @@ -29,8 +29,6 @@ struct filter_preset_table : public std::vector { }; -extern "C" { - // The C IO code accesses the filter presets via integer indices. extern int filter_presets_count(void); extern const char *filter_preset_fulltext_mode(int preset); // string mode of fulltext query. ownership is *not* passed to caller. @@ -41,9 +39,6 @@ extern void filter_preset_set_fulltext(struct filter_preset *preset, const char extern void add_filter_preset_to_table(const struct filter_preset *preset, struct filter_preset_table *table); extern void filter_preset_add_constraint(struct filter_preset *preset, const char *type, const char *string_mode, const char *range_mode, bool negate, const char *data); // called by the parser, therefore data passed as strings. - -} - int filter_preset_id(const std::string &s); // for now, we assume that names are unique. returns -1 if no preset with that name. void filter_preset_set(int preset, const FilterData &d); // this will override a preset if the name already exists. FilterData filter_preset_get(int preset); diff --git a/core/fulltext.cpp b/core/fulltext.cpp index 64899b647..563d6967c 100644 --- a/core/fulltext.cpp +++ b/core/fulltext.cpp @@ -35,8 +35,6 @@ static FullText self; // C-interface functions -extern "C" { - void fulltext_register(struct dive *d) { self.registerDive(d); @@ -57,8 +55,6 @@ void fulltext_populate() self.populate(); } -} // extern "C" - // C++-only interface functions FullTextResult fulltext_find_dives(const FullTextQuery &q, StringFilterMode mode) { diff --git a/core/fulltext.h b/core/fulltext.h index 688db63d1..52fb77f69 100644 --- a/core/fulltext.h +++ b/core/fulltext.h @@ -14,9 +14,8 @@ #ifndef FULLTEXT_H #define FULLTEXT_H -// 1) The C-accessible interface - -extern "C" { +#include +#include struct full_text_cache; struct dive; @@ -25,13 +24,6 @@ void fulltext_unregister(struct dive *d); // Note: can be called repeatedly void fulltext_unregister_all(); // Unregisters all dives in the dive table void fulltext_populate(); // Registers all dives in the dive table -} - -// 2) The C++-only interface - -#include -#include - enum class StringFilterMode { SUBSTRING = 0, STARTSWITH = 1, diff --git a/core/gas.h b/core/gas.h index 03a73f613..59cbd5307 100644 --- a/core/gas.h +++ b/core/gas.h @@ -5,8 +5,6 @@ #include "divemode.h" #include "units.h" -extern "C" { - enum gas_component { N2, HE, O2 }; // o2 == 0 && he == 0 -> air @@ -71,6 +69,4 @@ extern enum gastype gasmix_to_type(struct gasmix mix); extern const char *gastype_name(enum gastype type); extern fraction_t make_fraction(int f); -} - #endif diff --git a/core/gettext.h b/core/gettext.h index c7fe5a2ae..b0a70c067 100644 --- a/core/gettext.h +++ b/core/gettext.h @@ -2,7 +2,7 @@ #ifndef MYGETTEXT_H #define MYGETTEXT_H -extern "C" const char *trGettext(const char *); +const char *trGettext(const char *); static inline const char *translate(const char *, const char *arg) { return trGettext(arg); diff --git a/core/gettextfromc.cpp b/core/gettextfromc.cpp index c3a592f5b..0dab3db83 100644 --- a/core/gettextfromc.cpp +++ b/core/gettextfromc.cpp @@ -6,7 +6,7 @@ static QHash translationCache; static QMutex lock; -extern "C" const char *trGettext(const char *text) +const char *trGettext(const char *text) { QByteArray key(text); QMutexLocker l(&lock); diff --git a/core/gettextfromc.h b/core/gettextfromc.h index 647ea52a8..23b407f9a 100644 --- a/core/gettextfromc.h +++ b/core/gettextfromc.h @@ -4,7 +4,7 @@ #include -extern "C" const char *trGettext(const char *text); +const char *trGettext(const char *text); class gettextFromC { Q_DECLARE_TR_FUNCTIONS(gettextFromC) diff --git a/core/git-access.cpp b/core/git-access.cpp index ca22659bb..0543a1089 100644 --- a/core/git-access.cpp +++ b/core/git-access.cpp @@ -58,7 +58,7 @@ static bool includes_string_caseinsensitive(const char *haystack, const char *ne return 0; } -extern "C" void set_git_update_cb(int(*cb)(const char *)) +void set_git_update_cb(int(*cb)(const char *)) { update_progress_cb = cb; } @@ -69,7 +69,7 @@ extern "C" void set_git_update_cb(int(*cb)(const char *)) // proportional - some parts are based on compute performance, some on network speed) // they also provide information where in the process we are so we can analyze the log // to understand which parts of the process take how much time. -extern "C" int git_storage_update_progress(const char *text) +int git_storage_update_progress(const char *text) { int ret = 0; if (update_progress_cb) @@ -241,7 +241,7 @@ static bool exceeded_auth_attempts() return false; } -extern "C" int credential_ssh_cb(git_cred **out, +int credential_ssh_cb(git_cred **out, const char *, const char *, unsigned int allowed_types, @@ -273,7 +273,7 @@ extern "C" int credential_ssh_cb(git_cred **out, return GIT_EUSER; } -extern "C" int credential_https_cb(git_cred **out, +int credential_https_cb(git_cred **out, const char *, const char *, unsigned int, @@ -288,7 +288,7 @@ extern "C" int credential_https_cb(git_cred **out, return git_cred_userpass_plaintext_new(out, username, password); } -extern "C" int certificate_check_cb(git_cert *cert, int valid, const char *host, void *) +int certificate_check_cb(git_cert *cert, int valid, const char *host, void *) { if (verbose) report_info("git storage: certificate callback for host %s with validity %d\n", host, valid); @@ -339,7 +339,7 @@ static int update_remote(struct git_info *info, git_remote *origin, git_referenc return 0; } -extern "C" int update_git_checkout(git_repository *repo, git_object *parent, git_tree *tree); +int update_git_checkout(git_repository *repo, git_object *parent, git_tree *tree); static int try_to_git_merge(struct git_info *info, git_reference **local_p, git_reference *, git_oid *base, const git_oid *local_id, const git_oid *remote_id) { diff --git a/core/git-access.h b/core/git-access.h index c3e706509..ed9e4ed5e 100644 --- a/core/git-access.h +++ b/core/git-access.h @@ -11,8 +11,6 @@ struct git_oid; struct git_repository; struct divelog; -extern "C" { - #define CLOUD_HOST_US "ssrf-cloud-us.subsurface-divelog.org" // preferred (faster/bigger) server in the US #define CLOUD_HOST_U2 "ssrf-cloud-u2.subsurface-divelog.org" // secondary (older) server in the US #define CLOUD_HOST_EU "ssrf-cloud-eu.subsurface-divelog.org" // preferred (faster/bigger) server in Germany @@ -30,8 +28,6 @@ void set_git_update_cb(int(*)(const char *)); int git_storage_update_progress(const char *text); int get_authorship(git_repository *repo, git_signature **authorp); -} - struct git_info { std::string url; std::string branch; diff --git a/core/import-cobalt.cpp b/core/import-cobalt.cpp index 093232328..2b199ba9c 100644 --- a/core/import-cobalt.cpp +++ b/core/import-cobalt.cpp @@ -199,7 +199,7 @@ static int cobalt_dive(void *param, int, char **data, char **) return SQLITE_OK; } -extern "C" int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; struct parser_state state; diff --git a/core/import-csv.cpp b/core/import-csv.cpp index 777db16a9..6d3e7ef7a 100644 --- a/core/import-csv.cpp +++ b/core/import-csv.cpp @@ -270,7 +270,7 @@ static int parse_dan_format(const char *filename, struct xml_params *params, str return ret; } -extern "C" int parse_csv_file(const char *filename, struct xml_params *params, const char *csvtemplate, struct divelog *log) +int parse_csv_file(const char *filename, struct xml_params *params, const char *csvtemplate, struct divelog *log) { int ret; std::string mem; diff --git a/core/import-csv.h b/core/import-csv.h index e3ff5f950..7247a516a 100644 --- a/core/import-csv.h +++ b/core/import-csv.h @@ -21,8 +21,6 @@ enum csv_format { #define MAXCOLDIGITS 10 -extern "C" { - int parse_csv_file(const char *filename, struct xml_params *params, const char *csvtemplate, struct divelog *log); int try_to_open_csv(std::string &mem, enum csv_format type, struct divelog *log); int parse_txt_file(const char *filename, const char *csv, struct divelog *log); @@ -30,6 +28,4 @@ int parse_txt_file(const char *filename, const char *csv, struct divelog *log); int parse_seabear_log(const char *filename, struct divelog *log); int parse_manual_file(const char *filename, struct xml_params *params, struct divelog *log); -} - #endif // IMPORTCSV_H diff --git a/core/import-divinglog.cpp b/core/import-divinglog.cpp index 04b0a9a3a..50eba6927 100644 --- a/core/import-divinglog.cpp +++ b/core/import-divinglog.cpp @@ -384,7 +384,7 @@ static int divinglog_dive(void *param, int, char **data, char **) } -extern "C" int parse_divinglog_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_divinglog_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; struct parser_state state; diff --git a/core/import-seac.cpp b/core/import-seac.cpp index 07416e47e..5ee9ac18e 100644 --- a/core/import-seac.cpp +++ b/core/import-seac.cpp @@ -264,7 +264,7 @@ static int seac_dive(void *param, int, char **data, char **) * The callback function performs another SQL query on the other * table, to read in the sample values. */ -extern "C" int parse_seac_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_seac_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; char *err = NULL; diff --git a/core/import-shearwater.cpp b/core/import-shearwater.cpp index f9924e67d..8f559ca6c 100644 --- a/core/import-shearwater.cpp +++ b/core/import-shearwater.cpp @@ -473,7 +473,7 @@ static int shearwater_cloud_dive(void *param, int, char **data, char **) return SQLITE_OK; } -extern "C" int parse_shearwater_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_shearwater_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; struct parser_state state; @@ -496,7 +496,7 @@ extern "C" int parse_shearwater_buffer(sqlite3 *handle, const char *url, const c return 0; } -extern "C" int parse_shearwater_cloud_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_shearwater_cloud_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; struct parser_state state; diff --git a/core/import-suunto.cpp b/core/import-suunto.cpp index 3b65c954f..5859b0bdf 100644 --- a/core/import-suunto.cpp +++ b/core/import-suunto.cpp @@ -277,7 +277,7 @@ static int dm4_dive(void *param, int, char **data, char **) return SQLITE_OK; } -extern "C" int parse_dm4_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_dm4_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; char *err = NULL; @@ -549,7 +549,7 @@ static int dm5_dive(void *param, int, char **data, char **) return SQLITE_OK; } -extern "C" int parse_dm5_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) +int parse_dm5_buffer(sqlite3 *handle, const char *url, const char *, int, struct divelog *log) { int retval; char *err = NULL; diff --git a/core/ios.cpp b/core/ios.cpp index 409ff63ca..15f1c4501 100644 --- a/core/ios.cpp +++ b/core/ios.cpp @@ -32,8 +32,6 @@ static std::string make_default_filename() return system_default_path() + "/subsurface.xml"; } -extern "C" { - const char mac_system_divelist_default_font[] = "Arial"; const char *system_divelist_default_font = mac_system_divelist_default_font; double system_divelist_default_font_size = -1.0; @@ -123,4 +121,3 @@ bool subsurface_user_is_root() { return false; } -} diff --git a/core/libdivecomputer.h b/core/libdivecomputer.h index 84aebdbab..afb8ebc91 100644 --- a/core/libdivecomputer.h +++ b/core/libdivecomputer.h @@ -21,8 +21,6 @@ #define dc_usb_storage_open(stream, context, devname) (DC_STATUS_UNSUPPORTED) #endif -extern "C" { - struct dive; struct divelog; struct devices; @@ -73,6 +71,4 @@ unsigned int get_supported_transports(device_data_t *data); extern std::string logfile_name; extern std::string dumpfile_name; -} - #endif // LIBDIVECOMPUTER_H diff --git a/core/load-git.cpp b/core/load-git.cpp index 1d8ec98f9..5a1ed3b7f 100644 --- a/core/load-git.cpp +++ b/core/load-git.cpp @@ -1850,12 +1850,12 @@ static int load_dives_from_tree(git_repository *repo, git_tree *tree, struct git return 0; } -extern "C" void clear_git_id(void) +void clear_git_id(void) { saved_git_id.clear(); } -extern "C" void set_git_id(const struct git_oid *id) +void set_git_id(const struct git_oid *id) { char git_id_buffer[GIT_OID_HEXSZ + 1]; diff --git a/core/macos.cpp b/core/macos.cpp index 1bec49fda..4c7c1426e 100644 --- a/core/macos.cpp +++ b/core/macos.cpp @@ -48,8 +48,6 @@ static std::string make_default_filename() return system_default_path() + "/" + user + ".xml"; } -extern "C" { - const char mac_system_divelist_default_font[] = "Arial"; const char *system_divelist_default_font = mac_system_divelist_default_font; double system_divelist_default_font_size = -1.0; @@ -199,5 +197,3 @@ bool subsurface_user_is_root() { return geteuid() == 0; } - -} diff --git a/core/membuffer.h b/core/membuffer.h index 450ac4811..3c744bb08 100644 --- a/core/membuffer.h +++ b/core/membuffer.h @@ -52,8 +52,6 @@ struct membufferpp : public membuffer { ~membufferpp(); }; -extern "C" { - #ifdef __GNUC__ #define __printf(x, y) __attribute__((__format__(__printf__, x, y))) #else @@ -113,6 +111,4 @@ extern void put_salinity(struct membuffer *, int, const char *, const char *); extern void put_degrees(struct membuffer *b, degrees_t value, const char *, const char *); extern void put_location(struct membuffer *b, const location_t *, const char *, const char *); -} - #endif diff --git a/core/metadata.cpp b/core/metadata.cpp index dacfc9b1d..9bc9d35a6 100644 --- a/core/metadata.cpp +++ b/core/metadata.cpp @@ -528,7 +528,7 @@ static bool parseASF(QFile &f, metadata *metadata) return false; } -extern "C" mediatype_t get_metadata(const char *filename_in, metadata *data) +mediatype_t get_metadata(const char *filename_in, metadata *data) { data->timestamp = 0; data->duration.seconds = 0; @@ -561,7 +561,7 @@ extern "C" mediatype_t get_metadata(const char *filename_in, metadata *data) return res; } -extern "C" timestamp_t picture_get_timestamp(const char *filename) +timestamp_t picture_get_timestamp(const char *filename) { struct metadata data; get_metadata(filename, &data); diff --git a/core/metadata.h b/core/metadata.h index 537eccc79..a3d854c5f 100644 --- a/core/metadata.h +++ b/core/metadata.h @@ -17,11 +17,7 @@ enum mediatype_t { MEDIATYPE_STILL_LOADING, // Still processing in the background }; -extern "C" { - enum mediatype_t get_metadata(const char *filename, struct metadata *data); timestamp_t picture_get_timestamp(const char *filename); -} - #endif // METADATA_H diff --git a/core/ostctools.cpp b/core/ostctools.cpp index 73201e071..5d4b7631d 100644 --- a/core/ostctools.cpp +++ b/core/ostctools.cpp @@ -42,7 +42,7 @@ static int ostc_prepare_data(int data_model, dc_family_t dc_fam, device_data_t & * each file. So it's not necessary to iterate once and again on a parsing * function. Actually there's only one kind of archive for every DC model. */ -extern "C" void ostctools_import(const char *file, struct divelog *log) +void ostctools_import(const char *file, struct divelog *log) { FILE *archive; device_data_t devdata; diff --git a/core/owning_ptrs.h b/core/owning_ptrs.h index 3ba5dc0a5..0eb2a0367 100644 --- a/core/owning_ptrs.h +++ b/core/owning_ptrs.h @@ -14,8 +14,8 @@ struct dive_trip; struct dive_site; struct event; -extern "C" void free_dive(struct dive *); -extern "C" void free_trip(struct dive_trip *); +void free_dive(struct dive *); +void free_trip(struct dive_trip *); // Classes used to automatically call the appropriate free_*() function for owning pointers that go out of scope. struct DiveDeleter { diff --git a/core/parse-xml.cpp b/core/parse-xml.cpp index 15a15b336..b623e9ddd 100644 --- a/core/parse-xml.cpp +++ b/core/parse-xml.cpp @@ -1186,7 +1186,7 @@ static void gps_long(const char *buffer, struct dive *dive, struct parser_state } /* We allow either spaces or a comma between the decimal degrees */ -extern "C" void parse_location(const char *buffer, location_t *loc) +void parse_location(const char *buffer, location_t *loc) { const char *end; loc->lat = parse_degrees(buffer, &end); @@ -1752,7 +1752,7 @@ static const char *preprocess_divelog_de(const char *buffer) return buffer; } -extern "C" int parse_xml_buffer(const char *url, const char *buffer, int, struct divelog *log, +int parse_xml_buffer(const char *url, const char *buffer, int, struct divelog *log, const struct xml_params *params) { xmlDoc *doc; @@ -1802,7 +1802,7 @@ static timestamp_t parse_dlf_timestamp(unsigned char *buffer) return offset + 946684800; } -extern "C" int parse_dlf_buffer(unsigned char *buffer, size_t size, struct divelog *log) +int parse_dlf_buffer(unsigned char *buffer, size_t size, struct divelog *log) { using namespace std::string_literals; unsigned char *ptr = buffer; @@ -2274,12 +2274,12 @@ extern "C" int parse_dlf_buffer(unsigned char *buffer, size_t size, struct divel } -extern "C" void parse_xml_init(void) +void parse_xml_init(void) { LIBXML_TEST_VERSION } -extern "C" void parse_xml_exit(void) +void parse_xml_exit(void) { xmlCleanupParser(); } diff --git a/core/parse.cpp b/core/parse.cpp index fd283f647..c42519b9f 100644 --- a/core/parse.cpp +++ b/core/parse.cpp @@ -42,19 +42,19 @@ struct divecomputer *get_dc(struct parser_state *state) /* * Add a dive into the dive_table array */ -extern "C" void record_dive_to_table(struct dive *dive, struct dive_table *table) +void record_dive_to_table(struct dive *dive, struct dive_table *table) { add_to_dive_table(table, table->nr, fixup_dive(dive)); } -extern "C" void start_match(const char *type, const char *name, char *buffer) +void start_match(const char *type, const char *name, char *buffer) { if (verbose > 2) printf("Matching %s '%s' (%s)\n", type, name, buffer); } -extern "C" void nonmatch(const char *type, const char *name, char *buffer) +void nonmatch(const char *type, const char *name, char *buffer) { if (verbose > 1) printf("Unable to match %s '%s' (%s)\n", @@ -431,7 +431,7 @@ void userid_stop(struct parser_state *state) * therefore make sure to only pass in to NULL-initialized pointers or pointers * to owned strings */ -extern "C" void utf8_string(const char *buffer, char **res) +void utf8_string(const char *buffer, char **res) { free(*res); while (isspace(*buffer)) @@ -510,7 +510,7 @@ void add_dive_site(const char *ds_name, struct dive *dive, struct parser_state * } } -extern "C" int atoi_n(char *ptr, unsigned int len) +int atoi_n(char *ptr, unsigned int len) { if (len < 10) { char buf[10]; diff --git a/core/parse.h b/core/parse.h index aaef654d3..f9152c8b0 100644 --- a/core/parse.h +++ b/core/parse.h @@ -142,8 +142,6 @@ void utf8_string_std(const char *buffer, std::string *res); void add_dive_site(const char *ds_name, struct dive *dive, struct parser_state *state); -extern "C" { - int trimspace(char *buffer); void start_match(const char *type, const char *name, char *buffer); void nonmatch(const char *type, const char *name, char *buffer); @@ -161,7 +159,6 @@ int parse_shearwater_cloud_buffer(sqlite3 *handle, const char *url, const char * int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct divelog *log); int parse_divinglog_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct divelog *log); int parse_dlf_buffer(unsigned char *buffer, size_t size, struct divelog *log); -} std::string trimspace(const char *buffer); #endif diff --git a/core/picture.h b/core/picture.h index 1f5b80e5e..9999b9291 100644 --- a/core/picture.h +++ b/core/picture.h @@ -6,8 +6,6 @@ #include "units.h" #include // For NULL -extern "C" { - struct dive; struct picture { @@ -46,6 +44,4 @@ extern void sort_picture_table(struct picture_table *); extern struct picture *create_picture(const char *filename, timestamp_t shift_time, bool match_all, struct dive **dive); extern bool picture_check_valid_time(timestamp_t timestamp, timestamp_t shift_time); -} - #endif // PICTURE_H diff --git a/core/planner.cpp b/core/planner.cpp index 3cd0a5d6b..09856269c 100644 --- a/core/planner.cpp +++ b/core/planner.cpp @@ -42,7 +42,7 @@ static int decostoplevels_imperial[] = { 0, 3048, 6096, 9144, 12192, 15240, 1828 325120, 345440, 365760, 386080 }; #if DEBUG_PLAN -extern "C" void dump_plan(struct diveplan *diveplan) +void dump_plan(struct diveplan *diveplan) { struct divedatapoint *dp; struct tm tm; @@ -65,7 +65,7 @@ extern "C" void dump_plan(struct diveplan *diveplan) } #endif -extern "C" bool diveplan_empty(struct diveplan *diveplan) +bool diveplan_empty(struct diveplan *diveplan) { struct divedatapoint *dp; if (!diveplan || !diveplan->dp) @@ -80,7 +80,7 @@ extern "C" bool diveplan_empty(struct diveplan *diveplan) } /* get the cylinder index at a certain time during the dive */ -extern "C" int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time) +int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time) { // we start with the first cylinder unless an event tells us otherwise int cylinder_idx = 0; @@ -323,7 +323,7 @@ static void create_dive_from_plan(struct diveplan *diveplan, struct dive *dive, return; } -extern "C" void free_dps(struct diveplan *diveplan) +void free_dps(struct diveplan *diveplan) { if (!diveplan) return; @@ -367,7 +367,7 @@ static void add_to_end_of_diveplan(struct diveplan *diveplan, struct divedatapoi dp->time += lasttime; } -extern "C" struct divedatapoint *plan_add_segment(struct diveplan *diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode) +struct divedatapoint *plan_add_segment(struct diveplan *diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode) { struct divedatapoint *dp = create_dp(duration, depth, cylinderid, divemode == CCR ? po2 : 0); dp->entered = entered; @@ -501,7 +501,7 @@ static std::vector sort_stops(int dstops[], size_t dnr, std::vectordivelist_font = copy_string(src->divelist_font); @@ -149,7 +149,7 @@ extern "C" void copy_prefs(struct preferences *src, struct preferences *dest) * These are not real leaks but they plug the holes found by eg. * valgrind so you can find the real leaks. */ -extern "C" void free_prefs(void) +void free_prefs(void) { // nop } diff --git a/core/pref.h b/core/pref.h index 456ca038e..214fcd551 100644 --- a/core/pref.h +++ b/core/pref.h @@ -5,8 +5,6 @@ #include "units.h" #include "taxonomy.h" -extern "C" { - typedef struct { bool po2; @@ -224,6 +222,4 @@ extern void copy_prefs(struct preferences *src, struct preferences *dest); extern void set_informational_units(const char *units); -} - #endif // PREF_H diff --git a/core/profile.cpp b/core/profile.cpp index 36cb77645..7a2242939 100644 --- a/core/profile.cpp +++ b/core/profile.cpp @@ -31,7 +31,7 @@ #define MAX_PROFILE_DECO 7200 -extern "C" int ascent_velocity(int depth, int avg_depth, int bottom_time); +int ascent_velocity(int depth, int avg_depth, int bottom_time); #ifdef DEBUG_PI /* debugging tool - not normally used */ diff --git a/core/qt-ble.cpp b/core/qt-ble.cpp index d72864add..2df255576 100644 --- a/core/qt-ble.cpp +++ b/core/qt-ble.cpp @@ -56,8 +56,6 @@ static std::string to_str(const T &v) return v.toString().toStdString(); } -extern "C" { - void BLEObject::serviceStateChanged(QLowEnergyService::ServiceState newState) { if (verbose > 2 || debugCounter < DEBUG_THRESHOLD) @@ -777,5 +775,3 @@ dc_status_t qt_ble_ioctl(void *io, unsigned int request, void *data, size_t size return DC_STATUS_UNSUPPORTED; } } - -} /* extern "C" */ diff --git a/core/qt-ble.h b/core/qt-ble.h index 0416a51a5..d99dbadb5 100644 --- a/core/qt-ble.h +++ b/core/qt-ble.h @@ -67,8 +67,6 @@ private: }; }; - -extern "C" { dc_status_t qt_ble_open(void **io, dc_context_t *context, const char *devaddr, device_data_t *user_device); dc_status_t qt_ble_set_timeout(void *io, int timeout); dc_status_t qt_ble_poll(void *io, int timeout); @@ -76,6 +74,5 @@ dc_status_t qt_ble_read(void *io, void* data, size_t size, size_t *actual); dc_status_t qt_ble_write(void *io, const void* data, size_t size, size_t *actual); dc_status_t qt_ble_ioctl(void *io, unsigned int request, void *data, size_t size); dc_status_t qt_ble_close(void *io); -} #endif diff --git a/core/qthelper.cpp b/core/qthelper.cpp index e09973a17..96b7d2dff 100644 --- a/core/qthelper.cpp +++ b/core/qthelper.cpp @@ -310,7 +310,7 @@ static xmlDocPtr get_stylesheet_doc(const xmlChar *uri, xmlDictPtr, int, void *, return doc; } -extern "C" xsltStylesheetPtr get_stylesheet(const char *name) +xsltStylesheetPtr get_stylesheet(const char *name) { // this needs to be done only once, but doesn't hurt to run every time xsltSetLoaderFunc(get_stylesheet_doc); @@ -363,7 +363,7 @@ std::string get_file_name(const char *fileName) return fileInfo.fileName().toStdString(); } -extern "C" void copy_image_and_overwrite(const char *cfileName, const char *path, const char *cnewName) +void copy_image_and_overwrite(const char *cfileName, const char *path, const char *cnewName) { QString fileName(cfileName); QString newName(path); @@ -999,7 +999,7 @@ QString get_dive_date_string(timestamp_t when) } // Get local seconds since Epoch from ISO formatted UTC date time + offset string -extern "C" time_t get_dive_datetime_from_isostring(char *when) { +time_t get_dive_datetime_from_isostring(char *when) { QDateTime divetime = QDateTime::fromString(when, Qt::ISODate); return (time_t)(divetime.toSecsSinceEpoch()); } @@ -1068,7 +1068,7 @@ QString thumbnailFileName(const QString &filename) return thumbnailDir() + hash.result().toHex(); } -extern "C" char *hashfile_name_string() +char *hashfile_name_string() { return copy_qstring(hashfile_name()); } @@ -1199,7 +1199,7 @@ QStringList videoExtensionFilters() return filters; } -extern "C" const char *local_file_path(struct picture *picture) +const char *local_file_path(struct picture *picture) { return copy_qstring(localFilePath(picture->filename)); } @@ -1386,14 +1386,14 @@ std::optional getCloudURL() return filename; } -extern "C" void subsurface_mkdir(const char *dir) +void subsurface_mkdir(const char *dir) { QDir directory; if (!directory.mkpath(QString(dir))) report_info("failed to create path %s", dir); } -extern "C" enum deco_mode decoMode(bool in_planner) +enum deco_mode decoMode(bool in_planner) { return in_planner ? prefs.planner_deco_mode : prefs.display_deco_mode; } @@ -1553,19 +1553,19 @@ void parse_seabear_header(const char *filename, struct xml_params *params) f.close(); } -extern "C" void print_qt_versions() +void print_qt_versions() { printf("%s\n", qPrintable(QStringLiteral("built with Qt Version %1, runtime from Qt Version %2").arg(QT_VERSION_STR).arg(qVersion()))); } QMutex planLock; -extern "C" void lock_planner() +void lock_planner() { planLock.lock(); } -extern "C" void unlock_planner() +void unlock_planner() { planLock.unlock(); } @@ -1626,7 +1626,7 @@ std::vector get_cylinder_map_for_add(int count, int n) return mapping; } -extern "C" void emit_reset_signal() +void emit_reset_signal() { emit diveListNotifier.dataReset(); } diff --git a/core/qthelper.h b/core/qthelper.h index 09bedabad..93e37d32c 100644 --- a/core/qthelper.h +++ b/core/qthelper.h @@ -2,27 +2,23 @@ #ifndef QTHELPER_H #define QTHELPER_H +#include "core/pref.h" +#include "core/gettextfromc.h" +#include "subsurface-time.h" +#include +#include +#include #include #include -#include "core/pref.h" -#include "subsurface-time.h" struct picture; struct dive_trip; struct xml_params; - -// 1) Types +struct git_info; +class QImage; enum watertypes {FRESHWATER, BRACKISHWATER, EN13319WATER, SALTWATER, DC_WATERTYPE}; -// 2) Functions visible only to C++ parts - -#include -#include -#include -#include "core/gettextfromc.h" -class QImage; - #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) #define SKIP_EMPTY Qt::SkipEmptyParts #else @@ -111,12 +107,6 @@ std::string move_away(const std::string &path); #define TITLE_OR_TEXT(_t, _m) _t, _m #endif -// 3) Functions visible to C and C++ - -extern "C" { - -struct git_info; - bool canReachCloudServer(struct git_info *); void updateWindowTitle(); void subsurface_mkdir(const char *dir); @@ -137,6 +127,4 @@ volume_t string_to_volume(const char *str, pressure_t workp); fraction_t string_to_fraction(const char *str); void emit_reset_signal(); -} - #endif // QTHELPER_H diff --git a/core/qtserialbluetooth.cpp b/core/qtserialbluetooth.cpp index 49d077c2b..9840e1305 100644 --- a/core/qtserialbluetooth.cpp +++ b/core/qtserialbluetooth.cpp @@ -31,7 +31,6 @@ static std::string to_str(const T &v) return v.toString().toStdString(); } -extern "C" { typedef struct qt_serial_t { /* * RFCOMM socket used for Bluetooth Serial communication. @@ -347,5 +346,3 @@ rfcomm_stream_open(dc_iostream_t **iostream, dc_context_t *context, const char* return dc_custom_open (iostream, context, DC_TRANSPORT_BLUETOOTH, &callbacks, io); } - -} diff --git a/core/sample.cpp b/core/sample.cpp index ff2cbfa67..7a0b05d46 100644 --- a/core/sample.cpp +++ b/core/sample.cpp @@ -37,7 +37,7 @@ sample::sample() : * from the previous sample, so the indices are pre-populated (but the * pressures obviously are not) */ -extern "C" void add_sample_pressure(struct sample *sample, int sensor, int mbar) +void add_sample_pressure(struct sample *sample, int sensor, int mbar) { int idx; diff --git a/core/sample.h b/core/sample.h index 44e8c7c17..083700aa0 100644 --- a/core/sample.h +++ b/core/sample.h @@ -4,8 +4,6 @@ #include "units.h" -extern "C" { - #define MAX_SENSORS 2 #define MAX_O2_SENSORS 6 #define NO_SENSOR -1 @@ -36,6 +34,4 @@ struct sample // BASE TYPE BYTES UNITS RANGE extern void add_sample_pressure(struct sample *sample, int sensor, int mbar); -} - #endif diff --git a/core/save-git.cpp b/core/save-git.cpp index c38fc1b03..fa11b18db 100644 --- a/core/save-git.cpp +++ b/core/save-git.cpp @@ -1105,7 +1105,7 @@ static git_tree *get_git_tree(git_repository *repo, git_object *parent) return tree; } -extern "C" int update_git_checkout(git_repository *repo, git_object *parent, git_tree *tree) +int update_git_checkout(git_repository *repo, git_object *parent, git_tree *tree) { git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT; @@ -1116,7 +1116,7 @@ extern "C" int update_git_checkout(git_repository *repo, git_object *parent, git return git_checkout_tree(repo, (git_object *) tree, &opts); } -extern "C" int get_authorship(git_repository *repo, git_signature **authorp) +int get_authorship(git_repository *repo, git_signature **authorp) { if (git_signature_default(authorp, repo) == 0) return 0; diff --git a/core/save-html.h b/core/save-html.h index af1c0ca76..e7821f36e 100644 --- a/core/save-html.h +++ b/core/save-html.h @@ -4,8 +4,6 @@ #include "membuffer.h" -extern "C" { - struct dive; void put_HTML_date(struct membuffer *b, struct dive *dive, const char *pre, const char *post); @@ -21,9 +19,6 @@ void put_HTML_volume_units(struct membuffer *b, unsigned int ml, const char *pre void export_HTML(const char *file_name, const char *photos_dir, const bool selected_only, const bool list_only); void export_list(struct membuffer *b, const char *photos_dir, bool selected_only, const bool list_only); - void export_translation(const char *file_name); -} - #endif diff --git a/core/save-profiledata.h b/core/save-profiledata.h index 9666b544f..a2ebda068 100644 --- a/core/save-profiledata.h +++ b/core/save-profiledata.h @@ -2,10 +2,7 @@ #ifndef SAVE_PROFILE_DATA_H #define SAVE_PROFILE_DATA_H -extern "C" { - int save_profiledata(const char *filename, bool selected_only); void save_subtitles_buffer(struct membuffer *b, struct dive *dive, int offset, int length); -} #endif // SAVE_PROFILE_DATA_H diff --git a/core/save-xml.cpp b/core/save-xml.cpp index 941820be4..6d13d8bc5 100644 --- a/core/save-xml.cpp +++ b/core/save-xml.cpp @@ -497,7 +497,7 @@ static void save_picture(struct membuffer *b, struct picture *pic) put_string(b, "/>\n"); } -extern "C" void save_one_dive_to_mb(struct membuffer *b, struct dive *dive, bool anonymize) +void save_one_dive_to_mb(struct membuffer *b, struct dive *dive, bool anonymize) { struct divecomputer *dc; pressure_t surface_pressure = un_fixup_surface_pressure(dive); @@ -556,7 +556,7 @@ extern "C" void save_one_dive_to_mb(struct membuffer *b, struct dive *dive, bool put_format(b, "\n"); } -extern "C" int save_dive(FILE *f, struct dive *dive, bool anonymize) +int save_dive(FILE *f, struct dive *dive, bool anonymize) { struct membufferpp buf; @@ -627,7 +627,7 @@ static void save_one_fingerprint(struct membuffer *b, int i) fp_get_data(&fingerprint_table, i).c_str()); } -extern "C" int save_dives(const char *filename) +int save_dives(const char *filename) { return save_dives_logic(filename, false, false); } @@ -810,7 +810,7 @@ static void try_to_backup(const char *filename) } } -extern "C" int save_dives_logic(const char *filename, const bool select_only, bool anonymize) +int save_dives_logic(const char *filename, const bool select_only, bool anonymize) { struct membufferpp buf; struct git_info info; @@ -931,7 +931,7 @@ static void save_dive_sites_buffer(struct membuffer *b, const struct dive_site * put_format(b, "\n"); } -extern "C" int save_dive_sites_logic(const char *filename, const struct dive_site *sites[], int nr_sites, bool anonymize) +int save_dive_sites_logic(const char *filename, const struct dive_site *sites[], int nr_sites, bool anonymize) { struct membufferpp buf; FILE *f; diff --git a/core/selection.cpp b/core/selection.cpp index 616ad6f5b..52178cb2e 100644 --- a/core/selection.cpp +++ b/core/selection.cpp @@ -14,7 +14,7 @@ struct dive *current_dive = NULL; int amount_selected; static int amount_trips_selected; -extern "C" struct dive *first_selected_dive() +struct dive *first_selected_dive() { int idx; struct dive *d; @@ -26,7 +26,7 @@ extern "C" struct dive *first_selected_dive() return NULL; } -extern "C" struct dive *last_selected_dive() +struct dive *last_selected_dive() { int idx; struct dive *d, *ret = NULL; @@ -38,7 +38,7 @@ extern "C" struct dive *last_selected_dive() return ret; } -extern "C" bool consecutive_selected() +bool consecutive_selected() { struct dive *d; int i; @@ -63,7 +63,7 @@ extern "C" bool consecutive_selected() } #if DEBUG_SELECTION_TRACKING -extern "C" void dump_selection(void) +void dump_selection(void) { int i; struct dive *dive; @@ -232,7 +232,7 @@ void setTripSelection(dive_trip *trip, dive *currentDive) emit diveListNotifier.tripSelected(trip, currentDive); } -extern "C" void select_single_dive(dive *d) +void select_single_dive(dive *d) { if (d) setSelection(std::vector{ d }, d, -1); @@ -283,7 +283,7 @@ void updateSelection(std::vector &selection, const std::vector & } // Select the first dive that is visible -extern "C" void select_newest_visible_dive() +void select_newest_visible_dive() { for (int i = divelog.dives->nr - 1; i >= 0; --i) { dive *d = divelog.dives->dives[i]; @@ -295,7 +295,7 @@ extern "C" void select_newest_visible_dive() select_single_dive(nullptr); } -extern "C" void select_trip(struct dive_trip *trip) +void select_trip(struct dive_trip *trip) { if (trip && !trip->selected) { trip->selected = true; @@ -303,7 +303,7 @@ extern "C" void select_trip(struct dive_trip *trip) } } -extern "C" void deselect_trip(struct dive_trip *trip) +void deselect_trip(struct dive_trip *trip) { if (trip && trip->selected) { trip->selected = false; @@ -311,7 +311,7 @@ extern "C" void deselect_trip(struct dive_trip *trip) } } -extern "C" struct dive_trip *single_selected_trip() +struct dive_trip *single_selected_trip() { if (amount_trips_selected != 1) return NULL; diff --git a/core/selection.h b/core/selection.h index 7175c9043..d21ff0a98 100644 --- a/core/selection.h +++ b/core/selection.h @@ -4,15 +4,14 @@ #ifndef SELECTION_H #define SELECTION_H +#include +#include + struct dive; extern int amount_selected; extern struct dive *current_dive; -/*** C and C++ functions ***/ - -extern "C" { - extern struct dive *first_selected_dive(void); extern struct dive *last_selected_dive(void); extern bool consecutive_selected(void); @@ -27,13 +26,6 @@ extern void clear_selection(void); extern void dump_selection(void); #endif -} - -/*** C++-only functions ***/ - -#include -#include - // Reset the selection to the dives of the "selection" vector and send the appropriate signals. // Set the current dive to "currentDive" and the current dive computer to "currentDc". // "currentDive" must be an element of "selection" (or null if "seletion" is empty). diff --git a/core/ssrf.h b/core/ssrf.h index 78c4e951e..feed74a52 100644 --- a/core/ssrf.h +++ b/core/ssrf.h @@ -2,15 +2,11 @@ #ifndef SSRF_H #define SSRF_H -extern "C" { - #ifdef __clang__ // Clang has a bug on zero-initialization of C structs. #pragma clang diagnostic ignored "-Wmissing-field-initializers" #endif -} - // Macro to be used for silencing unused parameters #define UNUSED(x) (void)x diff --git a/core/strtod.cpp b/core/strtod.cpp index e76ee47c0..39abfb7a7 100644 --- a/core/strtod.cpp +++ b/core/strtod.cpp @@ -109,12 +109,12 @@ no_conversion: return 0.0; } -extern "C" double permissive_strtod(const char *str, const char **ptr) +double permissive_strtod(const char *str, const char **ptr) { return strtod_flags(str, ptr, false); } -extern "C" double ascii_strtod(const char *str, const char **ptr) +double ascii_strtod(const char *str, const char **ptr) { return strtod_flags(str, ptr, true); } diff --git a/core/subsurface-string.h b/core/subsurface-string.h index 61c70d71a..80a6f7bab 100644 --- a/core/subsurface-string.h +++ b/core/subsurface-string.h @@ -9,8 +9,6 @@ #include #include -extern "C" { - // string handling static inline bool same_string(const char *a, const char *b) @@ -36,8 +34,6 @@ static inline char *copy_string(const char *s) extern double permissive_strtod(const char *str, const char **ptr); extern double ascii_strtod(const char *str, const char **ptr); -} - // Sadly, starts_with only with C++20! inline bool starts_with(std::string_view s, const char *s2) { diff --git a/core/subsurface-time.h b/core/subsurface-time.h index 14a77bf20..06efad307 100644 --- a/core/subsurface-time.h +++ b/core/subsurface-time.h @@ -6,8 +6,6 @@ #include #include -extern "C" { - extern timestamp_t utc_mktime(const struct tm *tm); extern void utc_mkdate(timestamp_t, struct tm *tm); extern int utc_year(timestamp_t timestamp); @@ -15,11 +13,8 @@ extern int utc_weekday(timestamp_t timestamp); /* parse and format date times of the form YYYY-MM-DD hh:mm:ss */ extern timestamp_t parse_datetime(const char *s); /* returns 0 on error */ - extern const char *monthname(int mon); -} - std::string format_datetime(timestamp_t timestamp); /* ownership of string passed to caller */ #endif diff --git a/core/subsurfacestartup.cpp b/core/subsurfacestartup.cpp index e91a340bc..86d600109 100644 --- a/core/subsurfacestartup.cpp +++ b/core/subsurfacestartup.cpp @@ -25,7 +25,7 @@ std::string testqml; */ bool imported = false; -extern "C" void print_version() +void print_version() { static bool version_printed = false; if (version_printed) @@ -43,7 +43,7 @@ extern "C" void print_version() version_printed = true; } -extern "C" void print_files() +void print_files() { struct git_info info; std::optional filename; @@ -89,7 +89,7 @@ static void print_help() printf("\n --cloud-timeout= Set timeout for cloud connection (0 < timeout < 60)\n\n"); } -extern "C" void parse_argument(const char *arg) +void parse_argument(const char *arg) { const char *p = arg + 1; @@ -191,7 +191,7 @@ extern "C" void parse_argument(const char *arg) * I guess Burma and Liberia should trigger this too. I'm too * lazy to look up the territory names, though. */ -extern "C" void setup_system_prefs(void) +void setup_system_prefs(void) { const char *env; diff --git a/core/subsurfacestartup.h b/core/subsurfacestartup.h index 38028c71b..ddb18b53f 100644 --- a/core/subsurfacestartup.h +++ b/core/subsurfacestartup.h @@ -2,8 +2,6 @@ #ifndef SUBSURFACESTARTUP_H #define SUBSURFACESTARTUP_H -extern "C" { - extern bool imported; extern int quit, force_root, ignore_bt; @@ -15,8 +13,6 @@ void print_version(void); extern char *settings_suffix; -} - #ifdef SUBSURFACE_MOBILE_DESKTOP #include extern std::string testqml; diff --git a/core/subsurfacesysinfo.cpp b/core/subsurfacesysinfo.cpp index 7cad562b8..966c528a0 100644 --- a/core/subsurfacesysinfo.cpp +++ b/core/subsurfacesysinfo.cpp @@ -3,7 +3,7 @@ #include #ifdef Q_OS_WIN -extern "C" bool isWin7Or8() +bool isWin7Or8() { return (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based) >= QSysInfo::WV_WINDOWS7; } diff --git a/core/subsurfacesysinfo.h b/core/subsurfacesysinfo.h index 46566a6d5..a5354478a 100644 --- a/core/subsurfacesysinfo.h +++ b/core/subsurfacesysinfo.h @@ -1,11 +1,7 @@ #ifndef SUBSURFACESYSINFO_H #define SUBSURFACESYSINFO_H -#include - #ifdef Q_OS_WIN -extern "C" - bool isWin7Or8(); #endif diff --git a/core/tag.cpp b/core/tag.cpp index 3dca51b2e..50b588f74 100644 --- a/core/tag.cpp +++ b/core/tag.cpp @@ -39,7 +39,7 @@ static bool tag_seen_before(struct tag_entry *start, struct tag_entry *before) } /* remove duplicates and empty nodes */ -extern "C" void taglist_cleanup(struct tag_entry **tag_list) +void taglist_cleanup(struct tag_entry **tag_list) { struct tag_entry **tl = tag_list; while (*tl) { @@ -105,7 +105,7 @@ static const divetag *register_tag(const char *s, const char *source) return it->get(); } -extern "C" void taglist_add_tag(struct tag_entry **tag_list, const char *tag) +void taglist_add_tag(struct tag_entry **tag_list, const char *tag) { bool is_default_tag = std::find_if(std::begin(default_tags), std::end(default_tags), [&tag] (const char *default_tag) { return tag == default_tag; }); @@ -119,12 +119,12 @@ extern "C" void taglist_add_tag(struct tag_entry **tag_list, const char *tag) taglist_add_divetag(tag_list, d_tag); } -extern "C" void taglist_free(struct tag_entry *entry) +void taglist_free(struct tag_entry *entry) { STRUCTURED_LIST_FREE(struct tag_entry, entry, free) } -extern "C" struct tag_entry *taglist_copy(struct tag_entry *s) +struct tag_entry *taglist_copy(struct tag_entry *s) { struct tag_entry *res; STRUCTURED_LIST_COPY(struct tag_entry, s, res, copy_tl); @@ -132,7 +132,7 @@ extern "C" struct tag_entry *taglist_copy(struct tag_entry *s) } /* Merge src1 and src2, write to *dst */ -extern "C" void taglist_merge(struct tag_entry **dst, struct tag_entry *src1, struct tag_entry *src2) +void taglist_merge(struct tag_entry **dst, struct tag_entry *src1, struct tag_entry *src2) { struct tag_entry *entry; @@ -142,7 +142,7 @@ extern "C" void taglist_merge(struct tag_entry **dst, struct tag_entry *src1, st taglist_add_divetag(dst, entry->tag); } -extern "C" void taglist_init_global() +void taglist_init_global() { for (const char *s: default_tags) register_tag(translate("gettextFromC", s), s); diff --git a/core/tag.h b/core/tag.h index dd3bf10d2..a4c8fa689 100644 --- a/core/tag.h +++ b/core/tag.h @@ -6,8 +6,7 @@ #include #include #include - -extern "C" { +#include struct divetag { /* @@ -54,12 +53,6 @@ extern std::vector> g_tag_list; */ extern std::string taglist_get_tagstring(struct tag_entry *tag_list); -} - -// C++ only functions - -#include - /* Comma separated list of tags names or null terminated string */ std::string taglist_get_tagstring(struct tag_entry *tag_list); diff --git a/core/time.cpp b/core/time.cpp index bf42554a6..03b5e3082 100644 --- a/core/time.cpp +++ b/core/time.cpp @@ -33,7 +33,7 @@ * are unnecessary once you're counting minutes (32-bit minutes: * 8000+ years). */ -extern "C" void utc_mkdate(timestamp_t timestamp, struct tm *tm) +void utc_mkdate(timestamp_t timestamp, struct tm *tm) { static const unsigned int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, @@ -100,7 +100,7 @@ extern "C" void utc_mkdate(timestamp_t timestamp, struct tm *tm) tm->tm_mon = m; } -extern "C" timestamp_t utc_mktime(const struct tm *tm) +timestamp_t utc_mktime(const struct tm *tm) { static const int mdays[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 @@ -147,7 +147,7 @@ extern "C" timestamp_t utc_mktime(const struct tm *tm) * out unused calculations. If it turns out to be a bottle neck * we will have to cache a struct tm per dive. */ -extern "C" int utc_year(timestamp_t timestamp) +int utc_year(timestamp_t timestamp) { struct tm tm; utc_mkdate(timestamp, &tm); @@ -162,7 +162,7 @@ extern "C" int utc_year(timestamp_t timestamp) * at throwing out unused calculations, so this is more efficient * than it looks. */ -extern "C" int utc_weekday(timestamp_t timestamp) +int utc_weekday(timestamp_t timestamp) { struct tm tm; utc_mkdate(timestamp, &tm); @@ -174,7 +174,7 @@ extern "C" int utc_weekday(timestamp_t timestamp) * an 64-bit decimal and return 64-bit timestamp. On failure or * if passed an empty string, return 0. */ -extern "C" timestamp_t parse_datetime(const char *s) +timestamp_t parse_datetime(const char *s) { int y, m, d; int hr, min, sec; diff --git a/core/trip.h b/core/trip.h index ec6e743b9..cb4a8da0f 100644 --- a/core/trip.h +++ b/core/trip.h @@ -4,8 +4,6 @@ #include "divelist.h" -extern "C" { - typedef struct dive_trip { char *location; @@ -58,8 +56,6 @@ void clear_trip_table(struct trip_table *table); extern void dump_trip_list(void); #endif -} - /* Make pointers to dive_trip and trip_table "Qt metatypes" so that they can be * passed through QVariants and through QML. See comment in dive.h. */ #include diff --git a/core/units.cpp b/core/units.cpp index 142bfbb47..a589c3ca4 100644 --- a/core/units.cpp +++ b/core/units.cpp @@ -9,7 +9,7 @@ const struct units IMPERIAL_units = { .vertical_speed_time = units::MINUTES, .duration_units = units::MIXED, .show_units_table = false }; -extern "C" int get_pressure_units(int mb, const char **units) +int get_pressure_units(int mb, const char **units) { int pressure; const char *unit; @@ -31,7 +31,7 @@ extern "C" int get_pressure_units(int mb, const char **units) return pressure; } -extern "C" double get_temp_units(unsigned int mk, const char **units) +double get_temp_units(unsigned int mk, const char **units) { double deg; const char *unit; @@ -49,7 +49,7 @@ extern "C" double get_temp_units(unsigned int mk, const char **units) return deg; } -extern "C" double get_volume_units(unsigned int ml, int *frac, const char **units) +double get_volume_units(unsigned int ml, int *frac, const char **units) { int decimals; double vol; @@ -76,7 +76,7 @@ extern "C" double get_volume_units(unsigned int ml, int *frac, const char **unit return vol; } -extern "C" int units_to_sac(double volume) +int units_to_sac(double volume) { if (get_units()->volume == units::CUFT) return lrint(cuft_to_l(volume) * 1000.0); @@ -84,7 +84,7 @@ extern "C" int units_to_sac(double volume) return lrint(volume * 1000); } -extern "C" depth_t units_to_depth(double depth) +depth_t units_to_depth(double depth) { depth_t internaldepth; if (get_units()->length == units::METERS) { @@ -95,7 +95,7 @@ extern "C" depth_t units_to_depth(double depth) return internaldepth; } -extern "C" double get_depth_units(int mm, int *frac, const char **units) +double get_depth_units(int mm, int *frac, const char **units) { int decimals; double d; @@ -122,7 +122,7 @@ extern "C" double get_depth_units(int mm, int *frac, const char **units) return d; } -extern "C" double get_vertical_speed_units(unsigned int mms, int *frac, const char **units) +double get_vertical_speed_units(unsigned int mms, int *frac, const char **units) { double d; const char *unit; @@ -153,7 +153,7 @@ extern "C" double get_vertical_speed_units(unsigned int mms, int *frac, const ch return d; } -extern "C" double get_weight_units(unsigned int grams, int *frac, const char **units) +double get_weight_units(unsigned int grams, int *frac, const char **units) { int decimals; double value; @@ -176,7 +176,7 @@ extern "C" double get_weight_units(unsigned int grams, int *frac, const char **u return value; } -extern "C" const struct units *get_units() +const struct units *get_units() { return &prefs.units; } diff --git a/core/units.h b/core/units.h index 9a4c98f24..c1c68cc59 100644 --- a/core/units.h +++ b/core/units.h @@ -7,8 +7,6 @@ #define M_PI 3.14159265358979323846 #endif -extern "C" { - #define FRACTION_TUPLE(n, x) ((unsigned)(n) / (x)), ((unsigned)(n) % (x)) #define SIGNED_FRAC_TRIPLET(n, x) ((n) >= 0 ? '+': '-'), ((n) >= 0 ? (unsigned)(n) / (x) : (-(n) / (x))), ((unsigned)((n) >= 0 ? (n) : -(n)) % (x)) @@ -338,6 +336,5 @@ extern double get_vertical_speed_units(unsigned int mms, int *frac, const char * extern depth_t units_to_depth(double depth); extern int units_to_sac(double volume); -} #endif diff --git a/core/unix.cpp b/core/unix.cpp index c0b288cc2..dcae486a3 100644 --- a/core/unix.cpp +++ b/core/unix.cpp @@ -35,8 +35,6 @@ static std::string make_default_filename() return system_default_path() + "/" + user + ".xml"; } -extern "C" { - // the DE should provide us with a default font and font size... const char unix_system_divelist_default_font[] = "Sans"; const char *system_divelist_default_font = unix_system_divelist_default_font; @@ -203,5 +201,3 @@ bool subsurface_user_is_root() { return geteuid() == 0; } - -} diff --git a/core/version.cpp b/core/version.cpp index bf1bcefb0..811e763b8 100644 --- a/core/version.cpp +++ b/core/version.cpp @@ -2,12 +2,12 @@ #include "ssrf-version.h" // let's leave the two redundant functions in case we change our minds on git SHAs -extern "C" const char *subsurface_git_version(void) +const char *subsurface_git_version(void) { return CANONICAL_VERSION_STRING_4; } -extern "C" const char *subsurface_canonical_version(void) +const char *subsurface_canonical_version(void) { return CANONICAL_VERSION_STRING; } diff --git a/core/version.h b/core/version.h index a37ec596f..148f2d559 100644 --- a/core/version.h +++ b/core/version.h @@ -1,11 +1,7 @@ #ifndef VERSION_H #define VERSION_H -extern "C" { - const char *subsurface_git_version(void); const char *subsurface_canonical_version(void); -} - #endif diff --git a/core/webservice.h b/core/webservice.h index f31d0d007..4831072dd 100644 --- a/core/webservice.h +++ b/core/webservice.h @@ -2,8 +2,6 @@ #ifndef WEBSERVICE_H #define WEBSERVICE_H -extern "C" { - //extern void webservice_download_dialog(void); //extern bool webservice_request_user_xml(const gchar *, gchar **, unsigned int *, unsigned int *); extern int divelogde_upload(char *fn, char **error); @@ -16,6 +14,4 @@ enum { DD_STATUS_ERROR_PARSE, }; - -} #endif // WEBSERVICE_H diff --git a/core/windows.cpp b/core/windows.cpp index 76a37fe6a..c244cfc5a 100644 --- a/core/windows.cpp +++ b/core/windows.cpp @@ -100,8 +100,6 @@ static std::wstring make_default_filename() return path + L"\\" + filename; } -extern "C" { - const char non_standard_system_divelist_default_font[] = "Calibri"; const char current_system_divelist_default_font[] = "Segoe UI"; const char *system_divelist_default_font = non_standard_system_divelist_default_font; @@ -427,5 +425,3 @@ bool subsurface_user_is_root() /* FIXME: Detect admin rights */ return false; } - -} diff --git a/core/windowtitleupdate.cpp b/core/windowtitleupdate.cpp index a0cc277b3..a6c5f2425 100644 --- a/core/windowtitleupdate.cpp +++ b/core/windowtitleupdate.cpp @@ -3,7 +3,7 @@ WindowTitleUpdate windowTitleUpdate; -extern "C" void updateWindowTitle() +void updateWindowTitle() { emit windowTitleUpdate.updateTitle(); } diff --git a/core/worldmap-save.cpp b/core/worldmap-save.cpp index 8bfa14d66..803c3cb32 100644 --- a/core/worldmap-save.cpp +++ b/core/worldmap-save.cpp @@ -106,7 +106,7 @@ static void export_doit(struct membuffer *b, const bool selected_only) put_string(b, "\t\n\n
\n\n"); } -extern "C" void export_worldmap_HTML(const char *file_name, const bool selected_only) +void export_worldmap_HTML(const char *file_name, const bool selected_only) { FILE *f; diff --git a/core/worldmap-save.h b/core/worldmap-save.h index 46d580f59..5b83b4bb9 100644 --- a/core/worldmap-save.h +++ b/core/worldmap-save.h @@ -2,10 +2,6 @@ #ifndef WORLDMAP_SAVE_H #define WORLDMAP_SAVE_H -extern "C" { - extern void export_worldmap_HTML(const char *file_name, bool selected_only); -} - #endif diff --git a/core/xmlparams.cpp b/core/xmlparams.cpp index a12739a4d..3ab6f1c4c 100644 --- a/core/xmlparams.cpp +++ b/core/xmlparams.cpp @@ -1,42 +1,42 @@ // SPDX-License-Identifier: GPL-2.0 #include "xmlparams.h" -extern "C" struct xml_params *alloc_xml_params() +struct xml_params *alloc_xml_params() { return new xml_params; } -extern "C" void free_xml_params(struct xml_params *params) +void free_xml_params(struct xml_params *params) { delete params; } -extern "C" void xml_params_resize(struct xml_params *params, int count) +void xml_params_resize(struct xml_params *params, int count) { params->items.resize(count); } -extern "C" void xml_params_add(struct xml_params *params, const char *key, const char *value) +void xml_params_add(struct xml_params *params, const char *key, const char *value) { params->items.push_back({ std::string(key), std::string(value) }); } -extern "C" void xml_params_add_int(struct xml_params *params, const char *key, int value) +void xml_params_add_int(struct xml_params *params, const char *key, int value) { params->items.push_back({ std::string(key), std::to_string(value) }); } -extern "C" int xml_params_count(const struct xml_params *params) +int xml_params_count(const struct xml_params *params) { return (int)params->items.size(); } -extern "C" const char *xml_params_get_key(const struct xml_params *params, int idx) +const char *xml_params_get_key(const struct xml_params *params, int idx) { return params->items[idx].first.c_str(); } -extern "C" const char *xml_params_get_value(const struct xml_params *params, int idx) +const char *xml_params_get_value(const struct xml_params *params, int idx) { return params->items[idx].second.c_str(); } @@ -48,7 +48,7 @@ extern void xml_params_set_value(struct xml_params *params, int idx, const char params->items[idx].second = value; } -extern "C" const char **xml_params_get(const struct xml_params *params) +const char **xml_params_get(const struct xml_params *params) { if (!params) return nullptr; diff --git a/core/xmlparams.h b/core/xmlparams.h index 0631d3214..e91a30ce0 100644 --- a/core/xmlparams.h +++ b/core/xmlparams.h @@ -12,8 +12,6 @@ struct xml_params { mutable std::vector data; }; -extern "C" { - // Return values marked as "not stable" may be invalidated when calling // an xml_params_*() function that takes a non-const xml_params parameter. extern struct xml_params *alloc_xml_params(); @@ -27,6 +25,4 @@ extern const char *xml_params_get_value(const struct xml_params *params, int idx extern void xml_params_set_value(struct xml_params *params, int idx, const char *value); extern const char **xml_params_get(const struct xml_params *params); // not stable -} - #endif diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp index 7a5c9a7db..d5587c0f4 100644 --- a/desktop-widgets/mainwindow.cpp +++ b/desktop-widgets/mainwindow.cpp @@ -82,7 +82,7 @@ namespace { int progressCounter = 0; } -extern "C" int updateProgress(const char *text) +int updateProgress(const char *text) { if (verbose) report_info("git storage: %s", text); @@ -107,7 +107,7 @@ extern "C" int updateProgress(const char *text) MainWindow *MainWindow::m_Instance = nullptr; -extern "C" void showErrorFromC(char *buf) +void showErrorFromC(char *buf) { QString error(buf); free(buf); diff --git a/desktop-widgets/profilewidget.h b/desktop-widgets/profilewidget.h index b55e0e6a9..272d1a529 100644 --- a/desktop-widgets/profilewidget.h +++ b/desktop-widgets/profilewidget.h @@ -15,8 +15,6 @@ class ProfileWidget2; class EmptyView; class QStackedWidget; -extern "C" void free_dive(struct dive *); - class ProfileWidget : public QWidget { Q_OBJECT public: diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index 2027a673b..fcdfe7135 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -66,7 +66,7 @@ bool noCloudToCloud = false; #define RED_FONT QLatin1String("") #define END_FONT QLatin1String("") -extern "C" void showErrorFromC(char *buf) +void showErrorFromC(char *buf) { QString error(buf); free(buf); @@ -124,7 +124,7 @@ static void showProgress(QString msg) } // show the git progress in the passive notification area -extern "C" int gitProgressCB(const char *text) +int gitProgressCB(const char *text) { // regular users, during regular operation, likely really don't // care at all about the git progress diff --git a/smtk-import/smartrak.cpp b/smtk-import/smartrak.cpp index 4d48bb46c..d8ff9258b 100644 --- a/smtk-import/smartrak.cpp +++ b/smtk-import/smartrak.cpp @@ -874,7 +874,7 @@ static dc_status_t libdc_buffer_complete(device_data_t *dev_data, unsigned char * a DB clone is necessary as calling mdb_fetch_row() over different tables in * a single DB breaks binded row data, and so would break the top loop. */ -extern "C" void smartrak_import(const char *file, struct divelog *log) +void smartrak_import(const char *file, struct divelog *log) { MdbHandle *mdb, *mdb_clon; MdbColumn *col[MDB_MAX_COLS]; diff --git a/smtk-import/smrtk2ssrfc_window.cpp b/smtk-import/smrtk2ssrfc_window.cpp index 78b9ef1c3..c80853814 100644 --- a/smtk-import/smrtk2ssrfc_window.cpp +++ b/smtk-import/smrtk2ssrfc_window.cpp @@ -15,7 +15,7 @@ QStringList inputFiles; QString outputFile; QString error_buf; -extern "C" void getErrorFromC(char *buf) +void getErrorFromC(char *buf) { QString error(buf); free(buf); diff --git a/smtk-import/smrtk2ssrfc_window.h b/smtk-import/smrtk2ssrfc_window.h index d17f8d098..5998f935a 100644 --- a/smtk-import/smrtk2ssrfc_window.h +++ b/smtk-import/smrtk2ssrfc_window.h @@ -7,7 +7,7 @@ #include struct divelog; -extern "C" void smartrak_import(const char *file, struct divelog *log); +void smartrak_import(const char *file, struct divelog *log); namespace Ui { class Smrtk2ssrfcWindow;