]> git.tdb.fi Git - ext/subsurface.git/blobdiff - parse-xml.c
Fix crash when editing weight system info
[ext/subsurface.git] / parse-xml.c
index 552786b7aa58e3f780e08ce45bd87e80f1cfbbcf..173314dd42161ff28af7c7374bdf80e23ee6a706 100644 (file)
@@ -39,6 +39,40 @@ void record_dive(struct dive *dive)
        dive_table.nr = nr+1;
 }
 
+static void delete_dive_renumber(struct dive **dives, int i, int nr)
+{
+       struct dive *dive = dives[i];
+       int number = dive->number, j;
+
+       if (!number)
+               return;
+
+       /*
+        * Check that all numbered dives after the deleted
+        * ones are consecutive, return without renumbering
+        * if that is not the case.
+        */
+       for (j = i+1; j < nr; j++) {
+               struct dive *next = dives[j];
+               if (!next->number)
+                       break;
+               number++;
+               if (next->number != number)
+                       return;
+       }
+
+       /*
+        * Ok, we hit the end of the dives or a unnumbered
+        * dive - renumber.
+        */
+       for (j = i+1 ; j < nr; j++) {
+               struct dive *next = dives[j];
+               if (!next->number)
+                       break;
+               next->number--;
+       }
+}
+
 /*
  * Remove a dive from the dive_table array
  */
@@ -55,6 +89,8 @@ void delete_dive(struct dive *dive)
                struct dive *d = dives[i];
                if (d != dive)
                        continue;
+               /* should we re-number? */
+               delete_dive_renumber(dives, i, nr);
                memmove(dives+i, dives+i+1, sizeof(struct dive *)*(nr-i-1));
                dives[nr] = NULL;
                dive_table.nr = nr-1;
@@ -611,6 +647,7 @@ static int uddf_fill_sample(struct sample *sample, const char *name, int len, ch
        return  MATCH(".divetime", sampletime, &sample->time) ||
                MATCH(".depth", depth, &sample->depth) ||
                MATCH(".temperature", temperature, &sample->temperature) ||
+               MATCH(".tankpressure", pressure, &sample->cylinderpressure) ||
                0;
 }
 
@@ -1063,6 +1100,10 @@ static void try_to_fill_dive(struct dive **divep, const char *name, char *buf)
                return;
        if (MATCH(".location", utf8_string, &dive->location))
                return;
+       if (MATCH(".suit", utf8_string, &dive->suit))
+               return;
+       if (MATCH(".divesuit", utf8_string, &dive->suit))
+               return;
        if (MATCH(".notes", utf8_string, &dive->notes))
                return;
        if (MATCH(".divemaster", utf8_string, &dive->divemaster))
@@ -1426,7 +1467,11 @@ static xsltStylesheetPtr try_get_stylesheet(const char *path, int len, const cha
 
 static xsltStylesheetPtr get_stylesheet(const char *name)
 {
-       const char *path = xslt_path, *next;
+       const char *path, *next;
+
+       path = getenv("SUBSURFACE_XSLT_PATH");
+       if (!path)
+               path = xslt_path;
 
        do {
                int len;