mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 14:25:27 +00:00
Correctly deal with empty XML files
Previously we could end up with a bogus dive with all zero data in it. Adding dives/test24.xml to be able to test that we handle this case correctly. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
0d637c2fa9
commit
421366d0fb
2 changed files with 18 additions and 2 deletions
4
dives/test24.xml
Normal file
4
dives/test24.xml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<dives>
|
||||||
|
<program name='subsurface' version='1'></program>
|
||||||
|
</dives>
|
||||||
|
<!-- intentionally empty dive file - should register as no dives -->
|
16
parse-xml.c
16
parse-xml.c
|
@ -1173,11 +1173,23 @@ static void try_to_fill_trip(struct dive **divep, const char *name, char *buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File boundaries are dive boundaries. But sometimes there are
|
* While in some formats file boundaries are dive boundaries, in many
|
||||||
|
* others (as for example in our native format) there are
|
||||||
* multiple dives per file, so there can be other events too that
|
* multiple dives per file, so there can be other events too that
|
||||||
* trigger a "new dive" marker and you may get some nesting due
|
* trigger a "new dive" marker and you may get some nesting due
|
||||||
* to that. Just ignore nesting levels.
|
* to that. Just ignore nesting levels.
|
||||||
|
* On the flipside it is possible that we start an XML file that ends
|
||||||
|
* up having no dives in it at all - don't create a bogus empty dive
|
||||||
|
* for those. It's not entirely clear what is the minimum set of data
|
||||||
|
* to make a dive valid, but if it has no location, no date and no
|
||||||
|
* samples I'm pretty sure it's useless.
|
||||||
*/
|
*/
|
||||||
|
static gboolean is_dive(void)
|
||||||
|
{
|
||||||
|
return (cur_dive &&
|
||||||
|
(cur_dive->location || cur_dive->when || cur_dive->samples));
|
||||||
|
}
|
||||||
|
|
||||||
static void dive_start(void)
|
static void dive_start(void)
|
||||||
{
|
{
|
||||||
if (cur_dive)
|
if (cur_dive)
|
||||||
|
@ -1188,7 +1200,7 @@ static void dive_start(void)
|
||||||
|
|
||||||
static void dive_end(void)
|
static void dive_end(void)
|
||||||
{
|
{
|
||||||
if (!cur_dive)
|
if (!is_dive())
|
||||||
return;
|
return;
|
||||||
record_dive(cur_dive);
|
record_dive(cur_dive);
|
||||||
cur_dive = NULL;
|
cur_dive = NULL;
|
||||||
|
|
Loading…
Add table
Reference in a new issue