diff options
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | parse-xml.c | 4 | ||||
-rw-r--r-- | save-xml.c | 10 |
3 files changed, 15 insertions, 1 deletions
@@ -48,6 +48,8 @@ extern "C" { #include <stdbool.h> #endif +extern int last_xml_version; + enum dive_comp_type {OC, CCR, PSCR, FREEDIVE, NUM_DC_TYPE}; // Flags (Open-circuit and Closed-circuit-rebreather) for setting dive computer type enum cylinderuse {OC_GAS, DILUENT, OXYGEN, NUM_GAS_USE}; // The different uses for cylinders diff --git a/parse-xml.c b/parse-xml.c index c93d25453..6cc2d881a 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -21,6 +21,7 @@ int verbose, quit; int metric = 1; +int last_xml_version = -1; static xmlDoc *test_xslt_transforms(xmlDoc *doc, const char **params); @@ -1644,6 +1645,9 @@ static void userid_stop(void) static void entry(const char *name, char *buf) { + if (!strncmp(name, "version.program", sizeof("version.program") - 1) || + !strncmp(name, "version.divelog", sizeof("version.divelog") - 1)) + last_xml_version = atoi(buf); if (in_userid) { try_to_fill_userid(name, buf); return; diff --git a/save-xml.c b/save-xml.c index dad57dc9b..5a0c6976c 100644 --- a/save-xml.c +++ b/save-xml.c @@ -591,7 +591,15 @@ static void try_to_backup(const char *filename) while (extension[i][0] != '\0') { int elen = strlen(extension[i]); if (strcasecmp(filename + flen - elen, extension[i]) == 0) { - save_backup(filename, extension[i], "bak"); + if (last_xml_version < VERSION) { + int se_len = strlen(extension[i]) + 5; + char *special_ext = malloc(se_len); + snprintf(special_ext, se_len, "%s.v%d", extension[i], last_xml_version); + save_backup(filename, extension[i], special_ext); + free(special_ext); + } else { + save_backup(filename, extension[i], "bak"); + } break; } i++; |