summaryrefslogtreecommitdiffstats
path: root/uemis.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2011-10-02 10:30:02 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2011-10-02 10:38:28 -0700
commitfe0eff8f1ef6f5bd73a0b89d3ac5fc334650c184 (patch)
tree67aca7d132074ddf27e7ad98c64c46626c75df06 /uemis.c
parent9d8bdee350b4193a555be0f3f7fb94a9670a4a7e (diff)
downloadsubsurface-fe0eff8f1ef6f5bd73a0b89d3ac5fc334650c184.tar.gz
prepare_sample reallocs the dive - don't keep pointers around
Thanks Valgrind This diff looks pointless at first until you see that I reference dive again earlier in the loop and then after the end of the loop. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'uemis.c')
-rw-r--r--uemis.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/uemis.c b/uemis.c
index 8dfc5a373..25d1b8ab7 100644
--- a/uemis.c
+++ b/uemis.c
@@ -220,12 +220,13 @@ static void parse_divelog_binary(char *base64, struct dive **divep) {
if (*(uint16_t *)(data+i) > dive->duration.seconds + 180)
break;
sample = prepare_sample(divep);
+ dive = *divep; /* prepare_sample might realloc the dive */
sample->time.seconds = *(uint16_t *)(data+i);
sample->depth.mm = pressure_to_depth(*(uint16_t *)(data+i+2));
sample->temperature.mkelvin = (*(uint16_t *)(data+i+4) * 100) + 273150;
sample->cylinderpressure.mbar= *(uint16_t *)(data+i+23) * 10;
sample->cylinderindex = *(uint8_t *)(data+i+22);
- finish_sample(*divep, sample);
+ finish_sample(dive, sample);
i += 0x25;
}
dive->duration.seconds = sample->time.seconds - 1;