summaryrefslogtreecommitdiffstats
path: root/datatrak.c
diff options
context:
space:
mode:
Diffstat (limited to 'datatrak.c')
-rw-r--r--datatrak.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/datatrak.c b/datatrak.c
index 37418c9da..2e8dec808 100644
--- a/datatrak.c
+++ b/datatrak.c
@@ -158,7 +158,7 @@ static dtrakheader read_file_header(FILE *archivo)
/*
* Parses the dive extracting its data and filling a subsurface's dive structure
*/
-static struct dive dt_dive_parser(FILE *archivo, struct dive *dt_dive)
+bool dt_dive_parser(FILE *archivo, struct dive *dt_dive)
{
unsigned char n;
int profile_length;
@@ -185,8 +185,7 @@ static struct dive dt_dive_parser(FILE *archivo, struct dive *dt_dive)
fread(&lector_bytes[n+1], 1, 1, archivo);
if (two_bytes_to_int(lector_bytes[0], lector_bytes[1]) != 0xA000) {
printf("Error: byte = %4x\n", two_bytes_to_int(lector_bytes[0], lector_bytes[1]));
- dt_dive = NULL;
- return *dt_dive;
+ return false;
}
/*
@@ -649,7 +648,7 @@ static struct dive dt_dive_parser(FILE *archivo, struct dive *dt_dive)
dt_dive->cylinder[0].end.mbar = dt_dive->cylinder[0].start.mbar -
((dt_dive->cylinder[0].gas_used.mliter / dt_dive->cylinder[0].type.size.mliter) * 1000);
}
- return *dt_dive;
+ return true;
}
void datatrak_import(const char *file, struct dive_table *table)
@@ -670,11 +669,14 @@ void datatrak_import(const char *file, struct dive_table *table)
*fileheader = read_file_header(archivo);
while (i < fileheader->divesNum) {
struct dive *ptdive = alloc_dive();
- *ptdive = dt_dive_parser(archivo, ptdive);
- if (!ptdive)
+
+ if (!dt_dive_parser(archivo, ptdive)) {
report_error(translate("gettextFromC", "Error: no dive"));
+ free(ptdive);
+ } else {
+ record_dive(ptdive);
+ }
i++;
- record_dive(ptdive);
}
taglist_cleanup(&g_tag_list);
fclose(archivo);