diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-09-21 14:06:57 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2012-09-21 21:01:42 -0700 |
commit | c4c636fb4ffa942f282d57556a579de311b96c43 (patch) | |
tree | 23e25ad17c2bcd96117c6e5792c33932507d341f /save-xml.c | |
parent | 26f550403db728640db0cb906224c6acb76edfde (diff) | |
download | subsurface-c4c636fb4ffa942f282d57556a579de311b96c43.tar.gz |
Fix missing save of (almost empty) cylinder information
If we have no explicit cylinder info at all (it's normal air, no size or
working pressure information, and no beginning/end pressure information),
we don't save the cylinders in question because that would be redundant.
Such non-saved cylinders may still show up in the equipment list because
there may be implicit mention of them elsewhere, notably due to sample
data, so not saving them is the right thing to do - there is nothing to
save.
However, we missed one case: if there were other cylinders that *did* have
explicit information in it following such an uninteresting cylinder, we do
need to save the cylinder information for the useless case - if only in
order to be able to save the non-useless information for subsequent
cylinders.
This patch does that. Now, if you had an air-filled cylinder with no
information as your first cylinder, and a 51% nitrox as your second one,
it will save that information as
<cylinder />
<cylinder o2='51.0%' />
rather than dropping the cylinder information entirely.
This bug has been there for a long time, and was hidden by the fact that
normally you'd fill in cylinder descriptions etc after importing new
dives. It also used to be that we saved the cylinder beginning/end
pressure even if that was generated from the sample data, so if you
imported from a air-integrated computer and had samples for that cylinder,
we used to save it even though it was technically redundant.
We stopped saving redundant air sample information in commit 0089dd8819b7
("Don't save cylinder start/end pressures unless set by hand").
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Removed start and end in save_cylinder_info(). These two variables are no
longer used.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'save-xml.c')
-rw-r--r-- | save-xml.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/save-xml.c b/save-xml.c index cd5ccf94c..63e5a9ae3 100644 --- a/save-xml.c +++ b/save-xml.c @@ -193,22 +193,31 @@ static void save_overview(FILE *f, struct dive *dive) show_utf8(f, dive->suit, " <suit>","</suit>\n", 0); } +static int nr_cylinders(struct dive *dive) +{ + int nr; + + for (nr = MAX_CYLINDERS; nr; --nr) { + cylinder_t *cylinder = dive->cylinder+nr-1; + if (!cylinder_nodata(cylinder)) + break; + } + return nr; +} + static void save_cylinder_info(FILE *f, struct dive *dive) { - int i; + int i, nr; - for (i = 0; i < MAX_CYLINDERS; i++) { + nr = nr_cylinders(dive); + + for (i = 0; i < nr; i++) { cylinder_t *cylinder = dive->cylinder+i; int volume = cylinder->type.size.mliter; const char *description = cylinder->type.description; int o2 = cylinder->gasmix.o2.permille; int he = cylinder->gasmix.he.permille; - int start = cylinder->start.mbar; - int end = cylinder->end.mbar; - /* No cylinder information at all? */ - if (!o2 && !volume && !start && !end) - return; fprintf(f, " <cylinder"); if (volume) show_milli(f, " size='", volume, " l", "'"); |