]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Teach the date parser to also parse the international standard date format
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 2 Sep 2011 00:13:39 +0000 (17:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 2 Sep 2011 00:13:39 +0000 (17:13 -0700)
The standard way to write a date is yyyy-mm-dd, which is unambiguous and
sorts correctly.

We parsed that right in the 'datetime' case, but not in the normal date
case.  And we do want to use that in our output format, exactly because
it's standard.

And also parse 'duration' for the dive duration.  It's what we use when
saving, it just so happened that we ended up not parsing it right, but
then picking it up from the samples instead.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
parse-xml.c

index ea568f74084c183ae645b11ab2227c115254d7c3..6c93ad1a534e1f6fc7e5bf4dae944eeb7032fd75 100644 (file)
@@ -106,14 +106,25 @@ static void divedate(char *buffer, void *_when)
 {
        int d,m,y;
        time_t *when = _when;
+       int success = 0;
 
+       success = tm.tm_sec | tm.tm_min | tm.tm_hour;
        if (sscanf(buffer, "%d.%d.%d", &d, &m, &y) == 3) {
                tm.tm_year = y;
                tm.tm_mon = m-1;
                tm.tm_mday = d;
-               if (tm.tm_sec | tm.tm_min | tm.tm_hour)
-                       *when = utc_mktime(&tm);
+       } else if (sscanf(buffer, "%d-%d-%d", &y, &m, &d) == 3) {
+               tm.tm_year = y;
+               tm.tm_mon = m-1;
+               tm.tm_mday = d;
+       } else {
+               fprintf(stderr, "Unable to parse date '%s'\n", buffer);
+               success = 0;
        }
+
+       if (success)
+               *when = utc_mktime(&tm);
+
        free(buffer);
 }
 
@@ -396,6 +407,8 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
                return;
        if (MATCH(".meandepth", depth, &dive->meandepth))
                return;
+       if (MATCH(".duration", duration, &dive->duration))
+               return;
        if (MATCH(".divetime", duration, &dive->duration))
                return;
        if (MATCH(".divetimesec", duration, &dive->duration))