summaryrefslogtreecommitdiffstats
path: root/save-xml.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2012-09-21 14:06:57 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-09-21 21:01:42 -0700
commitc4c636fb4ffa942f282d57556a579de311b96c43 (patch)
tree23e25ad17c2bcd96117c6e5792c33932507d341f /save-xml.c
parent26f550403db728640db0cb906224c6acb76edfde (diff)
downloadsubsurface-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.c23
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", "'");