aboutsummaryrefslogtreecommitdiffstats
path: root/tools/iio
diff options
context:
space:
mode:
authorHartmut Knaack <knaack.h@gmx.de>2015-05-31 08:39:44 -0400
committerJonathan Cameron <jic23@kernel.org>2015-05-31 12:20:16 -0400
commit63f05c855f3825b89b92cd21df0415e6e32af3dd (patch)
treed798e25a74fd44dad2c3311b88ffd42cd55d1bf8 /tools/iio
parent66dd08fde06e5ad6f0f86c7a780d60973e9d9cf0 (diff)
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: Hartmut Knaack <knaack.h@gmx.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'tools/iio')
-rw-r--r--tools/iio/generic_buffer.c8
-rw-r--r--tools/iio/iio_utils.c4
2 files changed, 10 insertions, 2 deletions
diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c
index 7859ee9a46b2..0410948e23c2 100644
--- a/tools/iio/generic_buffer.c
+++ b/tools/iio/generic_buffer.c
@@ -255,7 +255,7 @@ int main(int argc, char **argv)
255 "%siio:device%d/buffer", iio_dir, dev_num); 255 "%siio:device%d/buffer", iio_dir, dev_num);
256 if (ret < 0) { 256 if (ret < 0) {
257 ret = -ENOMEM; 257 ret = -ENOMEM;
258 goto error_free_triggername; 258 goto error_free_channels;
259 } 259 }
260 260
261 if (!notrigger) { 261 if (!notrigger) {
@@ -351,6 +351,12 @@ error_free_data:
351 free(data); 351 free(data);
352error_free_buf_dir_name: 352error_free_buf_dir_name:
353 free(buf_dir_name); 353 free(buf_dir_name);
354error_free_channels:
355 for (i = num_channels - 1; i >= 0; i--) {
356 free(channels[i].name);
357 free(channels[i].generic_name);
358 }
359 free(channels);
354error_free_triggername: 360error_free_triggername:
355 if (datardytrigger) 361 if (datardytrigger)
356 free(trigger_name); 362 free(trigger_name);
diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c
index f879ad7b88bc..6daf98fdde1a 100644
--- a/tools/iio/iio_utils.c
+++ b/tools/iio/iio_utils.c
@@ -410,8 +410,10 @@ int build_channel_array(const char *device_dir,
410 return 0; 410 return 0;
411 411
412error_cleanup_array: 412error_cleanup_array:
413 for (i = count - 1; i >= 0; i--) 413 for (i = count - 1; i >= 0; i--) {
414 free((*ci_array)[i].name); 414 free((*ci_array)[i].name);
415 free((*ci_array)[i].generic_name);
416 }
415 free(*ci_array); 417 free(*ci_array);
416error_close_dir: 418error_close_dir:
417 closedir(dp); 419 closedir(dp);