Fix a few memory leaks
The file list isn't freed when an error occurs, and the strings returned from the lookup_enum function are dynamically allocated and thus should be freed as well.
This commit is contained in:
parent
96bac1de13
commit
01ccb7ce4b
@ -504,10 +504,12 @@ static int get_file_list(suunto_eonsteel_device_t *eon, struct directory_entry *
|
|||||||
sizeof(result), result);
|
sizeof(result), result);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
ERROR(eon->base.context, "readdir failed");
|
ERROR(eon->base.context, "readdir failed");
|
||||||
|
file_list_free(de);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (rc < 8) {
|
if (rc < 8) {
|
||||||
ERROR(eon->base.context, "short readdir result");
|
ERROR(eon->base.context, "short readdir result");
|
||||||
|
file_list_free(de);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
nr = array_uint32_le(result);
|
nr = array_uint32_le(result);
|
||||||
|
|||||||
@ -674,6 +674,7 @@ static char *lookup_enum(const struct type_desc *desc, unsigned char value)
|
|||||||
*/
|
*/
|
||||||
static void sample_event_state_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
static void sample_event_state_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
||||||
{
|
{
|
||||||
|
free(info->state_type);
|
||||||
info->state_type = lookup_enum(desc, type);
|
info->state_type = lookup_enum(desc, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -705,6 +706,7 @@ static void sample_event_state_value(const struct type_desc *desc, struct sample
|
|||||||
|
|
||||||
static void sample_event_notify_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
static void sample_event_notify_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
||||||
{
|
{
|
||||||
|
free(info->notify_type);
|
||||||
info->notify_type = lookup_enum(desc, type);
|
info->notify_type = lookup_enum(desc, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -747,6 +749,7 @@ static void sample_event_notify_value(const struct type_desc *desc, struct sampl
|
|||||||
|
|
||||||
static void sample_event_warning_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
static void sample_event_warning_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
||||||
{
|
{
|
||||||
|
free(info->warning_type);
|
||||||
info->warning_type = lookup_enum(desc, type);
|
info->warning_type = lookup_enum(desc, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -785,6 +788,7 @@ static void sample_event_warning_value(const struct type_desc *desc, struct samp
|
|||||||
|
|
||||||
static void sample_event_alarm_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
static void sample_event_alarm_type(const struct type_desc *desc, struct sample_data *info, unsigned char type)
|
||||||
{
|
{
|
||||||
|
free(info->alarm_type);
|
||||||
info->alarm_type = lookup_enum(desc, type);
|
info->alarm_type = lookup_enum(desc, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1013,6 +1017,12 @@ suunto_eonsteel_parser_samples_foreach(dc_parser_t *abstract, dc_sample_callback
|
|||||||
struct sample_data data = { eon, callback, userdata, 0 };
|
struct sample_data data = { eon, callback, userdata, 0 };
|
||||||
|
|
||||||
traverse_data(eon, traverse_samples, &data);
|
traverse_data(eon, traverse_samples, &data);
|
||||||
|
|
||||||
|
free(data.state_type);
|
||||||
|
free(data.notify_type);
|
||||||
|
free(data.warning_type);
|
||||||
|
free(data.alarm_type);
|
||||||
|
|
||||||
return DC_STATUS_SUCCESS;
|
return DC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user