From 17bcd1bc6085013877888792754f52ce6b375aea Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Fri, 18 Jul 2014 18:37:28 -0700 Subject: get_gas_at_time needs to always give us a valid gas Before this function was changed it was really supposed to just change a gas that was passed in in case there was an event that changed the mix - but with the new name the caller will assume that they get a valid gasmix. And promptly we had one caller that didn't initialize gas to be based on the first cylinder before calling get_gas_at_time(). Instead of adding yet one more spot that knows about the oddity of the old API I simply changed get_gas_at_time() to do what it name appears to imply and fixed the other callers not to bother to initialize the gasmix. Fixes #647 Signed-off-by: Dirk Hohndel --- divelist.c | 2 +- planner.c | 11 ++++++----- qt-ui/diveplanner.cpp | 3 +-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/divelist.c b/divelist.c index 2abeac9ca..1e279efca 100644 --- a/divelist.c +++ b/divelist.c @@ -153,7 +153,7 @@ int total_weight(struct dive *dive) static int active_o2(struct dive *dive, struct divecomputer *dc, duration_t time) { - struct gasmix gas = dive->cylinder[0].gasmix; + struct gasmix gas; get_gas_at_time(dive, dc, time, &gas); return get_o2(&gas); } diff --git a/planner.c b/planner.c index dc80729ec..3cad8d132 100644 --- a/planner.c +++ b/planner.c @@ -94,11 +94,13 @@ void set_display_transitions(bool display) plan_display_transitions = display; } +/* get the gas at a certain time during the dive */ void get_gas_at_time(struct dive *dive, struct divecomputer *dc, duration_t time, struct gasmix *gas) { - // we don't modify the values passed in if nothing is found - // so don't call with uninitialized gasmix ! + // we always start with the first gas, so that's our gas + // unless an event tells us otherwise struct event *event = dc->events; + *gas = dive->cylinder[0].gasmix; while (event && event->time.seconds <= time.seconds) { if (!strcmp(event->name, "gaschange")) { int cylinder_idx = get_cylinder_index(dive, event); @@ -153,8 +155,7 @@ double tissue_at_end(struct dive *dive, char **cached_datap) if (!dc->samples) return tissue_tolerance; psample = sample = dc->sample; - /* we always start with gas 0 (unless an event tells us otherwise) */ - gas = dive->cylinder[0].gasmix; + for (i = 0; i < dc->samples; i++, sample++) { t1 = sample->time; get_gas_at_time(dive, dc, t0, &gas); @@ -551,7 +552,7 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool translate("gettextFromC", "gas")); } do { - struct gasmix gasmix, newgasmix; + struct gasmix gasmix, newgasmix = {}; const char *depth_unit; double depthvalue; int decimals; diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 8bd32f457..285347237 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -106,8 +106,7 @@ void DivePlannerPointsModel::loadFromDive(dive *d) { CylindersModel::instance()->updateDive(); duration_t lasttime = {}; - // we start with the first gas and see if it was changed - struct gasmix gas = d->cylinder[0].gasmix; + struct gasmix gas; for (int i = 0; i < d->dc.samples - 1; i++) { const sample &s = d->dc.sample[i]; if (s.time.seconds == 0) -- cgit v1.2.3-70-g09d2