Commit 63f05c85 authored by Hartmut Knaack's avatar Hartmut Knaack Committed by Jonathan Cameron

tools:iio: free channel-array completely

In iio_utils.c build_channel_array() dynamically allocates the string
generic_name in the current iio_channel_info, which doesn't got freed in
case of an error.
This dynamically allocated channel-array is used by generic_buffer, and
needs to be freed on the error/exit path.
Signed-off-by: default avatarHartmut Knaack <knaack.h@gmx.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 66dd08fd
...@@ -255,7 +255,7 @@ int main(int argc, char **argv) ...@@ -255,7 +255,7 @@ int main(int argc, char **argv)
"%siio:device%d/buffer", iio_dir, dev_num); "%siio:device%d/buffer", iio_dir, dev_num);
if (ret < 0) { if (ret < 0) {
ret = -ENOMEM; ret = -ENOMEM;
goto error_free_triggername; goto error_free_channels;
} }
if (!notrigger) { if (!notrigger) {
...@@ -351,6 +351,12 @@ int main(int argc, char **argv) ...@@ -351,6 +351,12 @@ int main(int argc, char **argv)
free(data); free(data);
error_free_buf_dir_name: error_free_buf_dir_name:
free(buf_dir_name); free(buf_dir_name);
error_free_channels:
for (i = num_channels - 1; i >= 0; i--) {
free(channels[i].name);
free(channels[i].generic_name);
}
free(channels);
error_free_triggername: error_free_triggername:
if (datardytrigger) if (datardytrigger)
free(trigger_name); free(trigger_name);
......
...@@ -410,8 +410,10 @@ int build_channel_array(const char *device_dir, ...@@ -410,8 +410,10 @@ int build_channel_array(const char *device_dir,
return 0; return 0;
error_cleanup_array: error_cleanup_array:
for (i = count - 1; i >= 0; i--) for (i = count - 1; i >= 0; i--) {
free((*ci_array)[i].name); free((*ci_array)[i].name);
free((*ci_array)[i].generic_name);
}
free(*ci_array); free(*ci_array);
error_close_dir: error_close_dir:
closedir(dp); closedir(dp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment