aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Berger <j.david.berger@gmail.com>2018-04-14 13:06:30 -0600
committerJustin Berger <j.david.berger@gmail.com>2018-04-20 12:31:48 -0600
commit4fd3ee45503b1122d719347e3134c4a5707f2812 (patch)
treea10af63c89990599eda7e4ad1dea6b370c9683f7
parentdb03cd15bc0f8045820626105b305d6ac67f7434 (diff)
downloadlibsurvive-4fd3ee45503b1122d719347e3134c4a5707f2812.tar.gz
libsurvive-4fd3ee45503b1122d719347e3134c4a5707f2812.tar.bz2
Fixed some memory leaks
-rw-r--r--src/survive.c17
-rw-r--r--src/survive_playback.c34
2 files changed, 39 insertions, 12 deletions
diff --git a/src/survive.c b/src/survive.c
index bb1179e..58566c1 100644
--- a/src/survive.c
+++ b/src/survive.c
@@ -226,6 +226,19 @@ SurviveContext *survive_init_internal(int argc, char *const *argv) {
return ctx;
}
+survive_timecode survive_timecode_difference(survive_timecode most_recent, survive_timecode least_recent) {
+ uint32_t diff = 0;
+ if (most_recent > least_recent) {
+ diff = most_recent - least_recent;
+ } else {
+ diff = least_recent - most_recent;
+ }
+
+ if (diff > 0xFFFFFFFF / 2)
+ return 0x7FFFFFFF / 2 - diff;
+ return diff;
+}
+
void *GetDriverByConfig(SurviveContext *ctx, const char *name, const char *configname, const char *configdef,
int verbose) {
const char *Preferred = survive_configs(ctx, configname, SC_SETCONFIG, configdef);
@@ -499,6 +512,8 @@ void survive_close(SurviveContext *ctx) {
destroy_config_group(ctx->lh_config);
for (i = 0; i < ctx->objs_ct; i++) {
+ free(ctx->objs[i]->sensor_locations);
+ free(ctx->objs[i]->sensor_normals);
free(ctx->objs[i]);
}
@@ -510,6 +525,8 @@ void survive_close(SurviveContext *ctx) {
free(ctx->global_config_values);
free(ctx->temporary_config_values);
free(ctx->lh_config);
+ free(ctx->calptr);
+ free(ctx->recptr);
free(ctx);
}
diff --git a/src/survive_playback.c b/src/survive_playback.c
index 0823173..7e22b47 100644
--- a/src/survive_playback.c
+++ b/src/survive_playback.c
@@ -65,6 +65,7 @@ void survive_recording_config_process(SurviveObject *so, char *ct0conf, int len)
buffer[i] = ' ';
write_to_output(recordingData, "%s CONFIG %.*s\n", so->codename, len, buffer);
+ free(buffer);
}
void survive_recording_lighthouse_process(SurviveContext *ctx, uint8_t lighthouse, SurvivePose *lh_pose,
@@ -190,8 +191,7 @@ static int parse_and_run_imu(const char *line, SurvivePlaybackData *driver) {
&accelgyro[5], &id);
if (rr != 10) {
- fprintf(stderr, "Warning: On line %d, only %d values read: '%s'\n",
- driver->lineno, rr, line);
+ fprintf(stderr, "Warning: On line %d, only %d values read: '%s'\n", driver->lineno, rr, line);
return -1;
}
@@ -280,8 +280,9 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) {
if (driver->next_time_us == 0) {
size_t n = 0;
ssize_t r = getdelim(&line, &n, ' ', f);
- if (r <= 0)
+ if (r <= 0) {
return 0;
+ }
if (sscanf(line, "%lf", &driver->next_time_us) != 1) {
free(line);
@@ -297,8 +298,10 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) {
size_t n = 0;
ssize_t r = getline(&line, &n, f);
- if (r <= 0)
+ if (r <= 0) {
+ free(line);
return 0;
+ }
char dev[10];
char op[10];
@@ -308,6 +311,7 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) {
}
if (op[1] != 0) {
+ free(line);
return 0;
}
@@ -384,8 +388,7 @@ int DriverRegPlayback(SurviveContext *ctx) {
sp->playback_file = fopen(playback_file, "r");
if (sp->playback_file == 0) {
- fprintf(stderr, "Could not open playback events file %s",
- playback_file);
+ fprintf(stderr, "Could not open playback events file %s", playback_file);
return -1;
}
@@ -396,7 +399,7 @@ int DriverRegPlayback(SurviveContext *ctx) {
SurviveObject *tr0 = survive_create_tr0(ctx, "Playback", sp);
SurviveObject *ww0 = survive_create_ww0(ctx, "Playback", sp);
- SurviveObject *objs[] = {hmd, wm0, wm1, tr0, ww0, 0};
+ SurviveObject *objs[] = {hmd, wm0, wm1, tr0, ww0};
FLT time;
while (!feof(sp->playback_file) && !ferror(sp->playback_file)) {
@@ -404,13 +407,16 @@ int DriverRegPlayback(SurviveContext *ctx) {
size_t n;
int r = getline(&line, &n, sp->playback_file);
- if (r <= 0)
+ if (r <= 0) {
+ free(line);
continue;
+ }
char dev[10];
char command[10];
if (sscanf(line, "%lf %s %s", &time, dev, command) != 3) {
+ free(line);
break;
}
@@ -424,7 +430,8 @@ int DriverRegPlayback(SurviveContext *ctx) {
}
size_t len = strlen(configStart);
- for (SurviveObject **obj = objs; *obj; obj++) {
+ for (int i = 0; i < sizeof(objs) / sizeof(objs[0]); i++) {
+ SurviveObject **obj = &objs[i];
if (*obj && strcmp(dev, (*obj)->codename) == 0 && ctx->configfunction(*obj, configStart, len) == 0) {
SV_INFO("Found %s in playback file...", dev);
survive_add_object(ctx, *obj);
@@ -432,11 +439,14 @@ int DriverRegPlayback(SurviveContext *ctx) {
}
}
}
+
+ free(line);
}
- for (SurviveObject **obj = objs; *obj; obj++) {
- if (*obj) {
- free(*obj);
+ for (int i = 0; i < sizeof(objs) / sizeof(objs[0]); i++) {
+ SurviveObject *obj = objs[i];
+ if (obj) {
+ free(obj);
}
}
fseek(sp->playback_file, 0, SEEK_SET); // same as rewind(f);