summaryrefslogtreecommitdiffstats
path: root/core/dive.c
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-04-27 21:12:24 +0200
committerGravatar Robert C. Helling <helling@atdotde.de>2020-05-01 12:36:28 +0200
commitffc3e598faa5d986d78e9a275c48193a3a835cfe (patch)
tree33430b39d93cf0f96cdb6eca09c7d12ab182e648 /core/dive.c
parentb949bad026c8bab7611998fb0fcf9f6008dbd7e9 (diff)
downloadsubsurface-ffc3e598faa5d986d78e9a275c48193a3a835cfe.tar.gz
core: create fake cylinder at end of cylinder table (hack!)
When we had fixed-sized cylinder arrays, the planner used the last empty cylinder for "surface air". This was not recognized by the UI as a separate cylinder, because "empty cylinder" was the sentinel for the end of the table. The conversion to dynamically sized cylinder tables broke this code: everytime the surface segment is changed, a new dummy cylinder is added, which is visible in the UI. As a very temporary stop-gap fix, emulate the old code by creating a cylinder and then setting the end-of-table to before that cylinder. This means that we have to loosen the out-of-bound checks. That's all very scary and should be removed as soon as possible. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/dive.c')
-rw-r--r--core/dive.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/core/dive.c b/core/dive.c
index 89e090165..b4fa22d24 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -227,7 +227,10 @@ struct event *add_event(struct divecomputer *dc, unsigned int time, int type, in
void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int seconds, int idx)
{
/* sanity check so we don't crash */
- if (idx < 0 || idx >= dive->cylinders.nr) {
+ /* 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. */
+ //if (idx < 0 || idx >= dive->cylinders.nr) {
+ if (idx < 0 || idx >= dive->cylinders.nr + 1 || idx >= dive->cylinders.allocated) {
report_error("Unknown cylinder index: %d", idx);
return;
}