Always close the xml tags.

The dive and sample xml tags were not closed properly if an error
occurred during parsing.
This commit is contained in:
Jef Driesen 2016-03-27 11:37:05 +02:00
parent c8b166dadb
commit 8ab3fb0542

View File

@ -154,6 +154,11 @@ dctool_xml_output_write (dctool_output_t *abstract, dc_parser_t *parser, const u
dctool_xml_output_t *output = (dctool_xml_output_t *) abstract; dctool_xml_output_t *output = (dctool_xml_output_t *) abstract;
dc_status_t status = DC_STATUS_SUCCESS; dc_status_t status = DC_STATUS_SUCCESS;
// Initialize the sample data.
sample_data_t sampledata = {0};
sampledata.nsamples = 0;
sampledata.ostream = output->ostream;
fprintf (output->ostream, "<dive>\n<number>%u</number>\n<size>%u</size>\n", abstract->number, size); fprintf (output->ostream, "<dive>\n<number>%u</number>\n<size>%u</size>\n", abstract->number, size);
if (fingerprint) { if (fingerprint) {
@ -331,11 +336,6 @@ dctool_xml_output_write (dctool_output_t *abstract, dc_parser_t *parser, const u
atmospheric); atmospheric);
} }
// Initialize the sample data.
sample_data_t sampledata = {0};
sampledata.nsamples = 0;
sampledata.ostream = output->ostream;
// Parse the sample data. // Parse the sample data.
message ("Parsing the sample data.\n"); message ("Parsing the sample data.\n");
status = dc_parser_samples_foreach (parser, sample_cb, &sampledata); status = dc_parser_samples_foreach (parser, sample_cb, &sampledata);
@ -344,11 +344,12 @@ dctool_xml_output_write (dctool_output_t *abstract, dc_parser_t *parser, const u
goto cleanup; goto cleanup;
} }
cleanup:
if (sampledata.nsamples) if (sampledata.nsamples)
fprintf (output->ostream, "</sample>\n"); fprintf (output->ostream, "</sample>\n");
fprintf (output->ostream, "</dive>\n"); fprintf (output->ostream, "</dive>\n");
cleanup:
return status; return status;
} }