summaryrefslogtreecommitdiffstats
path: root/save-xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'save-xml.c')
-rw-r--r--save-xml.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/save-xml.c b/save-xml.c
index 88ae4e1e9..45caefe4c 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -443,6 +443,38 @@ static void save_dive(FILE *f, struct dive *dive)
fprintf(f, "</dive>\n");
}
+static char *add_dc_to_string(char *dc_xml, struct divecomputer *dc)
+{
+ char *pattern, *tmp;
+ const char *nickname;
+ int len;
+
+ /* we have no dc or no model or no deviceid information... nothing to do here */
+ if (!dc || !dc->model || !*dc->model || !dc->deviceid)
+ return dc_xml;
+
+ nickname = get_dc_nickname(dc->model, dc->deviceid);
+ /* We have no nickname, or it is the same as the model ID - nothing interesting */
+ if (!nickname || !*nickname || !strcmp(dc->model, nickname))
+ return dc_xml;
+
+ len = sizeof(" model='' deviceid=''") + strlen(dc->model) + 8;
+ pattern = malloc(len);
+ snprintf(pattern, len, " model='%s' deviceid='%08x'", dc->model, dc->deviceid);
+ if (dc_xml && strstr(dc_xml, pattern)) {
+ /* already have that one */
+ free(pattern);
+ return dc_xml;
+ }
+
+ len += strlen(dc_xml) + strlen(nickname) + sizeof("<divecomputerid nickname=''/>\n");
+ tmp = malloc(len);
+ snprintf(tmp, len, "%s<divecomputerid%s nickname='%s'/>\n", dc_xml, pattern, nickname);
+ free(pattern);
+ free(dc_xml);
+ return tmp;
+}
+
#define VERSION 2
void save_dives(const char *filename)
@@ -464,7 +496,7 @@ void save_dives(const char *filename)
for_each_dive(i, dive) {
struct divecomputer *dc = &dive->dc;
while (dc) {
- add_dc_to_string(&dc_xml, dc);
+ dc_xml = add_dc_to_string(dc_xml, dc);
dc = dc->next;
}
}