]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Work around more Diving Log bugs..
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 11 Sep 2011 20:16:23 +0000 (13:16 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 11 Sep 2011 22:49:50 +0000 (15:49 -0700)
The Diving Log temperature reading is in Fahrenheit for the samples (for
the per-dive water/air temperature it's in Celsius).  But it seems to
have a bug where a lack of a sample has been turned into 32 Fahrenheit
(which is 0 celsius).  This is despite the dive itself having a water
temperature of 8 degF.

Just throw away those bogus freezing temperatures.  Sure, they can
happen, and ice divers are crazy - but in this case I know it's just an
error in the log, and it looks very much like a Diving Log bug.

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

index 8e64b1e21f35463aa19eb3393588bcc138b28478..e14d9db2b74ed0e7ac94ba9f2e6f30807d7d22ac 100644 (file)
@@ -488,6 +488,16 @@ static int uemis_fill_sample(struct sample *sample, const char *name, int len, c
  * Divinglog is crazy. The temperatures are in celsius. EXCEPT
  * for the sample temperatures, that are in Fahrenheit.
  * WTF?
+ *
+ * Oh, and I think Diving Log *internally* probably kept them
+ * in celsius, because I'm seeing entries like
+ *
+ *     <Temp>32.0</Temp>
+ *
+ * in there. Which is freezing, aka 0 degC. I bet the "0" is
+ * what Diving Log uses for "no temperature".
+ *
+ * So throw away crap like that.
  */
 static void fahrenheit(char *buffer, void *_temperature)
 {
@@ -496,6 +506,9 @@ static void fahrenheit(char *buffer, void *_temperature)
 
        switch (integer_or_float(buffer, &val)) {
        case FLOAT:
+               /* Floating point equality is evil, but works for small integers */
+               if (val.fp == 32.0)
+                       break;
                temperature->mkelvin = (val.fp + 459.67) * 5000/9;
                break;
        default: