From a71bfb4a6aabfe5e6f145883020153103c7fdfba Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:41 +0200 Subject: tools:iio:generic_buffer: fix order of freeing data data gets allocated before buffer_access, so it should be freed in reverse order. Otherwise, if allocating buffer_access fails, an attempt to free it would be taken, which should not happen. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index f805493be3eb..15f2a40c9bf7 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -345,10 +345,10 @@ int main(int argc, char **argv) error_close_buffer_access: close(fp); -error_free_data: - free(data); error_free_buffer_access: free(buffer_access); +error_free_data: + free(data); error_free_buf_dir_name: free(buf_dir_name); error_free_triggername: -- cgit v1.2.3-70-g09d2 From d3ccfc41f971105404694e8478b5e60625e46967 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:42 +0200 Subject: tools:iio:generic_buffer: free dev_dir_name on exit Make sure to free dev_dir_name in case of an error or regular exit. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 15f2a40c9bf7..7859ee9a46b2 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -220,7 +220,7 @@ int main(int argc, char **argv) "%s-dev%d", device_name, dev_num); if (ret < 0) { ret = -ENOMEM; - goto error_ret; + goto error_free_dev_dir_name; } } @@ -354,6 +354,8 @@ error_free_buf_dir_name: error_free_triggername: if (datardytrigger) free(trigger_name); +error_free_dev_dir_name: + free(dev_dir_name); error_ret: return ret; } -- cgit v1.2.3-70-g09d2 From 63f05c855f3825b89b92cd21df0415e6e32af3dd Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:44 +0200 Subject: 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 Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 8 +++++++- tools/iio/iio_utils.c | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'tools/iio/generic_buffer.c') 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) "%siio:device%d/buffer", iio_dir, dev_num); if (ret < 0) { ret = -ENOMEM; - goto error_free_triggername; + goto error_free_channels; } if (!notrigger) { @@ -351,6 +351,12 @@ error_free_data: free(data); error_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: if (datardytrigger) 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, return 0; 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].generic_name); + } free(*ci_array); error_close_dir: closedir(dp); -- cgit v1.2.3-70-g09d2 From 2b6a6e67af6f8f644a48f75efc1f44544c0d74f6 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:48 +0200 Subject: tools:iio: save errno first The man-page of errno states, that errno should be saved before doing any library call, as that call may have changed the value of errno. So, when encountering any error, save errno first. This patch affects generic_buffer.c, iio_event_monitor.c and iio_utils.c. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 2 +- tools/iio/iio_event_monitor.c | 6 +++--- tools/iio/iio_utils.c | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 0410948e23c2..7635aeb93dc8 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -296,8 +296,8 @@ int main(int argc, char **argv) /* Attempt to open non blocking the access dev */ fp = open(buffer_access, O_RDONLY | O_NONBLOCK); if (fp == -1) { /* If it isn't there make the node */ - printf("Failed to open %s\n", buffer_access); ret = -errno; + printf("Failed to open %s\n", buffer_access); goto error_free_buffer_access; } diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c index 427c271ac0d6..f6fdab48d340 100644 --- a/tools/iio/iio_event_monitor.c +++ b/tools/iio/iio_event_monitor.c @@ -269,8 +269,8 @@ int main(int argc, char **argv) fd = open(chrdev_name, 0); if (fd == -1) { - fprintf(stdout, "Failed to open %s\n", chrdev_name); ret = -errno; + fprintf(stdout, "Failed to open %s\n", chrdev_name); goto error_free_chrdev_name; } @@ -279,8 +279,8 @@ int main(int argc, char **argv) close(fd); if (ret == -1 || event_fd == -1) { - fprintf(stdout, "Failed to retrieve event fd\n"); ret = -errno; + fprintf(stdout, "Failed to retrieve event fd\n"); goto error_free_chrdev_name; } @@ -291,8 +291,8 @@ int main(int argc, char **argv) printf("nothing available\n"); continue; } else { - perror("Failed to read event from device"); ret = -errno; + perror("Failed to read event from device"); break; } } diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c index 1c0ca2f89e18..f12bc2e81c80 100644 --- a/tools/iio/iio_utils.c +++ b/tools/iio/iio_utils.c @@ -129,8 +129,8 @@ int iioutils_get_type(unsigned *is_signed, } sysfsfp = fopen(filename, "r"); if (sysfsfp == NULL) { - printf("failed to open %s\n", filename); ret = -errno; + printf("failed to open %s\n", filename); goto error_free_filename; } @@ -141,8 +141,8 @@ int iioutils_get_type(unsigned *is_signed, bits_used, &padint, shift); if (ret < 0) { - printf("failed to pass scan type description\n"); ret = -errno; + printf("failed to pass scan type description\n"); goto error_close_sysfsfp; } *be = (endianchar == 'b'); @@ -332,8 +332,8 @@ int build_channel_array(const char *device_dir, } sysfsfp = fopen(filename, "r"); if (sysfsfp == NULL) { - free(filename); ret = -errno; + free(filename); count--; goto error_cleanup_array; } @@ -505,8 +505,8 @@ int _write_sysfs_int(char *filename, char *basedir, int val, int verify) sprintf(temp, "%s/%s", basedir, filename); sysfsfp = fopen(temp, "w"); if (sysfsfp == NULL) { - printf("failed to open %s\n", temp); ret = -errno; + printf("failed to open %s\n", temp); goto error_free; } fprintf(sysfsfp, "%d", val); @@ -514,8 +514,8 @@ int _write_sysfs_int(char *filename, char *basedir, int val, int verify) if (verify) { sysfsfp = fopen(temp, "r"); if (sysfsfp == NULL) { - printf("failed to open %s\n", temp); ret = -errno; + printf("failed to open %s\n", temp); goto error_free; } fscanf(sysfsfp, "%d", &test); @@ -556,8 +556,8 @@ int _write_sysfs_string(char *filename, char *basedir, char *val, int verify) sprintf(temp, "%s/%s", basedir, filename); sysfsfp = fopen(temp, "w"); if (sysfsfp == NULL) { - printf("Could not open %s\n", temp); ret = -errno; + printf("Could not open %s\n", temp); goto error_free; } fprintf(sysfsfp, "%s", val); @@ -565,8 +565,8 @@ int _write_sysfs_string(char *filename, char *basedir, char *val, int verify) if (verify) { sysfsfp = fopen(temp, "r"); if (sysfsfp == NULL) { - printf("could not open file to verify\n"); ret = -errno; + printf("could not open file to verify\n"); goto error_free; } fscanf(sysfsfp, "%s", temp); -- cgit v1.2.3-70-g09d2 From 8749948a1bc0aff24e493f89de40e2ff95a83baf Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:56 +0200 Subject: tools:iio:generic_buffer: fix check of errno Since errno contains the value of any of the defined error names, a negation will not lead to the desired match. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 7635aeb93dc8..e01c80ec5a88 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -321,7 +321,7 @@ int main(int argc, char **argv) data, toread*scan_size); if (read_size < 0) { - if (errno == -EAGAIN) { + if (errno == EAGAIN) { printf("nothing available\n"); continue; } else -- cgit v1.2.3-70-g09d2 From e83a47cf6a5bdbd3d5677db13ae4df22f5e24b08 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:57 +0200 Subject: tools:iio:generic_buffer: pass up right error code find_type_by_name() returns a valid error code in case of an error. Pass this code up instead of an artificial one. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index e01c80ec5a88..419e22736c3a 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -202,7 +202,7 @@ int main(int argc, char **argv) dev_num = find_type_by_name(device_name, "iio:device"); if (dev_num < 0) { printf("Failed to find the %s\n", device_name); - ret = -ENODEV; + ret = dev_num; goto error_ret; } printf("iio device number being used is %d\n", dev_num); @@ -228,7 +228,7 @@ int main(int argc, char **argv) trig_num = find_type_by_name(trigger_name, "trigger"); if (trig_num < 0) { printf("Failed to find the trigger %s\n", trigger_name); - ret = -ENODEV; + ret = trig_num; goto error_free_triggername; } printf("iio trigger number being used is %d\n", trig_num); -- cgit v1.2.3-70-g09d2 From 8e926134ef15267f65ddfc7389c8078234610295 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:39:58 +0200 Subject: tools:iio:generic_buffer: sign-extend and shift data Refactor process_scan() to handle signed and unsigned data, respect shifts and the data mask for 2, 4 and 8 byte sized scan elements. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 97 +++++++++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 35 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 419e22736c3a..4cd246426b57 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -59,33 +59,80 @@ int size_from_channelarray(struct iio_channel_info *channels, int num_channels) return bytes; } -void print2byte(int input, struct iio_channel_info *info) +void print2byte(uint16_t input, struct iio_channel_info *info) { /* First swap if incorrect endian */ if (info->be) - input = be16toh((uint16_t)input); + input = be16toh(input); else - input = le16toh((uint16_t)input); + input = le16toh(input); /* * Shift before conversion to avoid sign extension * of left aligned data */ input >>= info->shift; + input &= info->mask; if (info->is_signed) { - int16_t val = input; + int16_t val = (int16_t)(input << (16 - info->bits_used)) >> + (16 - info->bits_used); + printf("%05f ", ((float)val + info->offset) * info->scale); + } else { + printf("%05f ", ((float)input + info->offset) * info->scale); + } +} - val &= (1 << info->bits_used) - 1; - val = (int16_t)(val << (16 - info->bits_used)) >> - (16 - info->bits_used); - printf("%05f ", ((float)val + info->offset)*info->scale); +void print4byte(uint32_t input, struct iio_channel_info *info) +{ + /* First swap if incorrect endian */ + if (info->be) + input = be32toh(input); + else + input = le32toh(input); + + /* + * Shift before conversion to avoid sign extension + * of left aligned data + */ + input >>= info->shift; + input &= info->mask; + if (info->is_signed) { + int32_t val = (int32_t)(input << (32 - info->bits_used)) >> + (32 - info->bits_used); + printf("%05f ", ((float)val + info->offset) * info->scale); } else { - uint16_t val = input; + printf("%05f ", ((float)input + info->offset) * info->scale); + } +} - val &= (1 << info->bits_used) - 1; - printf("%05f ", ((float)val + info->offset)*info->scale); +void print8byte(uint64_t input, struct iio_channel_info *info) +{ + /* First swap if incorrect endian */ + if (info->be) + input = be64toh(input); + else + input = le64toh(input); + + /* + * Shift before conversion to avoid sign extension + * of left aligned data + */ + input >>= info->shift; + input &= info->mask; + if (info->is_signed) { + int64_t val = (int64_t)(input << (64 - info->bits_used)) >> + (64 - info->bits_used); + /* special case for timestamp */ + if (info->scale == 1.0f && info->offset == 0.0f) + printf("%" PRId64 " ", val); + else + printf("%05f ", + ((float)val + info->offset) * info->scale); + } else { + printf("%05f ", ((float)input + info->offset) * info->scale); } } + /** * process_scan() - print out the values in SI units * @data: pointer to the start of the scan @@ -108,32 +155,12 @@ void process_scan(char *data, &channels[k]); break; case 4: - if (!channels[k].is_signed) { - uint32_t val = *(uint32_t *) - (data + channels[k].location); - printf("%05f ", ((float)val + - channels[k].offset)* - channels[k].scale); - - } + print4byte(*(uint32_t *)(data + channels[k].location), + &channels[k]); break; case 8: - if (channels[k].is_signed) { - int64_t val = *(int64_t *) - (data + - channels[k].location); - if ((val >> channels[k].bits_used) & 1) - val = (val & channels[k].mask) | - ~channels[k].mask; - /* special case for timestamp */ - if (channels[k].scale == 1.0f && - channels[k].offset == 0.0f) - printf("%" PRId64 " ", val); - else - printf("%05f ", ((float)val + - channels[k].offset)* - channels[k].scale); - } + print8byte(*(uint64_t *)(data + channels[k].location), + &channels[k]); break; default: break; -- cgit v1.2.3-70-g09d2 From e9e45b43b8f06273d9b78f187042dff0bf5be0a5 Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:40:02 +0200 Subject: tools:iio: catch errors in string allocation This patch catches errors in string allocation in generic_buffer.c, iio_event_monitor.c, iio_utils.c and lsiio.c. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 4 +++- tools/iio/iio_event_monitor.c | 2 ++ tools/iio/iio_utils.c | 9 ++++++--- tools/iio/lsiio.c | 15 +++++++++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 4cd246426b57..eb89bc2ca5d0 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -234,7 +234,9 @@ int main(int argc, char **argv) } printf("iio device number being used is %d\n", dev_num); - asprintf(&dev_dir_name, "%siio:device%d", iio_dir, dev_num); + ret = asprintf(&dev_dir_name, "%siio:device%d", iio_dir, dev_num); + if (ret < 0) + return -ENOMEM; if (!notrigger) { if (trigger_name == NULL) { diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c index 578390db1bec..1374374208ee 100644 --- a/tools/iio/iio_event_monitor.c +++ b/tools/iio/iio_event_monitor.c @@ -265,6 +265,8 @@ int main(int argc, char **argv) /* If we can't find a IIO device by name assume device_name is a IIO chrdev */ chrdev_name = strdup(device_name); + if (!chrdev_name) + return -ENOMEM; } fd = open(chrdev_name, 0); diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c index 812153ff18c3..f0896f46847f 100644 --- a/tools/iio/iio_utils.c +++ b/tools/iio/iio_utils.c @@ -36,7 +36,7 @@ int iioutils_break_up_name(const char *full_name, char *current; char *w, *r; char *working, *prefix = ""; - int i; + int i, ret; for (i = 0; i < sizeof(iio_direction) / sizeof(iio_direction[0]); i++) if (!strncmp(full_name, iio_direction[i], @@ -46,6 +46,9 @@ int iioutils_break_up_name(const char *full_name, } current = strdup(full_name + strlen(prefix) + 1); + if (!current) + return -ENOMEM; + working = strtok(current, "_\0"); w = working; @@ -59,10 +62,10 @@ int iioutils_break_up_name(const char *full_name, r++; } *w = '\0'; - asprintf(generic_name, "%s_%s", prefix, working); + ret = asprintf(generic_name, "%s_%s", prefix, working); free(current); - return 0; + return (ret == -1) ? -ENOMEM : 0; } /** diff --git a/tools/iio/lsiio.c b/tools/iio/lsiio.c index 65a2385e2a78..daa6c5312d66 100644 --- a/tools/iio/lsiio.c +++ b/tools/iio/lsiio.c @@ -107,7 +107,12 @@ static void dump_devices(void) if (check_prefix(ent->d_name, type_device)) { char *dev_dir_name; - asprintf(&dev_dir_name, "%s%s", iio_dir, ent->d_name); + if (asprintf(&dev_dir_name, "%s%s", iio_dir, + ent->d_name) < 0) { + printf("Memory allocation failed\n"); + goto error_close_dir; + } + dump_one_device(dev_dir_name); free(dev_dir_name); if (verblevel >= VERBLEVEL_SENSORS) @@ -119,11 +124,17 @@ static void dump_devices(void) if (check_prefix(ent->d_name, type_trigger)) { char *dev_dir_name; - asprintf(&dev_dir_name, "%s%s", iio_dir, ent->d_name); + if (asprintf(&dev_dir_name, "%s%s", iio_dir, + ent->d_name) < 0) { + printf("Memory allocation failed\n"); + goto error_close_dir; + } + dump_one_trigger(dev_dir_name); free(dev_dir_name); } } +error_close_dir: closedir(dp); } -- cgit v1.2.3-70-g09d2 From c8ce9903cba202936999c2c9463fbb370ee145ba Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:40:03 +0200 Subject: tools:iio:generic_buffer: catch errors for arguments conversion Add handler to catch errors on conversion of numerical arguments. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index eb89bc2ca5d0..93ac93f74549 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -206,13 +206,22 @@ int main(int argc, char **argv) noevents = 1; break; case 'c': + errno = 0; num_loops = strtoul(optarg, &dummy, 10); + if (errno) + return -errno; break; case 'w': + errno = 0; timedelay = strtoul(optarg, &dummy, 10); + if (errno) + return -errno; break; case 'l': + errno = 0; buf_len = strtoul(optarg, &dummy, 10); + if (errno) + return -errno; break; case 'g': notrigger = 1; -- cgit v1.2.3-70-g09d2 From 6bb7cac8551e2d60edbd25a6d046cc45932c4c3e Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:40:04 +0200 Subject: tools:iio:generic_buffer: add error handling Add error handling to calls which can indicate a major problem by returning an error code. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 93ac93f74549..cf9a4120204f 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -347,7 +347,14 @@ int main(int argc, char **argv) .events = POLLIN, }; - poll(&pfd, 1, -1); + ret = poll(&pfd, 1, -1); + if (ret < 0) { + ret = -errno; + goto error_close_buffer_access; + } else if (ret == 0) { + continue; + } + toread = buf_len; } else { @@ -378,11 +385,14 @@ int main(int argc, char **argv) if (!notrigger) /* Disconnect the trigger - just write a dummy name. */ - write_sysfs_string("trigger/current_trigger", - dev_dir_name, "NULL"); + ret = write_sysfs_string("trigger/current_trigger", + dev_dir_name, "NULL"); + if (ret < 0) + printf("Failed to write to %s\n", dev_dir_name); error_close_buffer_access: - close(fp); + if (close(fp) == -1) + perror("Failed to close buffer"); error_free_buffer_access: free(buffer_access); error_free_data: -- cgit v1.2.3-70-g09d2 From 0e799878175aa7d08f5882b6a391de4724c52e9e Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:40:17 +0200 Subject: tools:iio: return values directly Return directly, if no common cleanup is required. Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 5 ++--- tools/iio/iio_event_monitor.c | 5 ++--- tools/iio/iio_utils.c | 27 ++++++++++++--------------- 3 files changed, 16 insertions(+), 21 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index cf9a4120204f..62ec398922a0 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -238,8 +238,7 @@ int main(int argc, char **argv) dev_num = find_type_by_name(device_name, "iio:device"); if (dev_num < 0) { printf("Failed to find the %s\n", device_name); - ret = dev_num; - goto error_ret; + return dev_num; } printf("iio device number being used is %d\n", dev_num); @@ -410,6 +409,6 @@ error_free_triggername: free(trigger_name); error_free_dev_dir_name: free(dev_dir_name); -error_ret: + return ret; } diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c index 1316527f3c3c..7f56238b1d66 100644 --- a/tools/iio/iio_event_monitor.c +++ b/tools/iio/iio_event_monitor.c @@ -258,8 +258,7 @@ int main(int argc, char **argv) device_name, dev_num); ret = asprintf(&chrdev_name, "/dev/iio:device%d", dev_num); if (ret < 0) { - ret = -ENOMEM; - goto error_ret; + return -ENOMEM; } } else { /* If we can't find a IIO device by name assume device_name is a @@ -312,6 +311,6 @@ int main(int argc, char **argv) error_free_chrdev_name: free(chrdev_name); -error_ret: + return ret; } diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c index 5d5831d7dfd0..0524725279bb 100644 --- a/tools/iio/iio_utils.c +++ b/tools/iio/iio_utils.c @@ -107,10 +107,9 @@ int iioutils_get_type(unsigned *is_signed, const struct dirent *ent; ret = asprintf(&scan_el_dir, FORMAT_SCAN_ELEMENTS_DIR, device_dir); - if (ret < 0) { - ret = -ENOMEM; - goto error_ret; - } + if (ret < 0) + return -ENOMEM; + ret = asprintf(&builtname, FORMAT_TYPE_FILE, name); if (ret < 0) { ret = -ENOMEM; @@ -202,7 +201,7 @@ error_free_builtname: free(builtname); error_free_scan_el_dir: free(scan_el_dir); -error_ret: + return ret; } @@ -230,10 +229,9 @@ int iioutils_get_param_float(float *output, const struct dirent *ent; ret = asprintf(&builtname, "%s_%s", name, param_name); - if (ret < 0) { - ret = -ENOMEM; - goto error_ret; - } + if (ret < 0) + return -ENOMEM; + ret = asprintf(&builtname_generic, "%s_%s", generic_name, param_name); if (ret < 0) { @@ -277,7 +275,7 @@ error_free_builtname_generic: free(builtname_generic); error_free_builtname: free(builtname); -error_ret: + return ret; } @@ -326,10 +324,9 @@ int build_channel_array(const char *device_dir, *counter = 0; ret = asprintf(&scan_el_dir, FORMAT_SCAN_ELEMENTS_DIR, device_dir); - if (ret < 0) { - ret = -ENOMEM; - goto error_ret; - } + if (ret < 0) + return -ENOMEM; + dp = opendir(scan_el_dir); if (dp == NULL) { ret = -errno; @@ -526,7 +523,7 @@ error_close_dir: error_free_name: free(scan_el_dir); -error_ret: + return ret; } -- cgit v1.2.3-70-g09d2 From e06e3d7112f2ec5494d2d934a8641a53885003ee Mon Sep 17 00:00:00 2001 From: Hartmut Knaack Date: Sun, 31 May 2015 14:40:22 +0200 Subject: tools:iio: rework program parameters In generic_buffer.c: sort program parameters alphabetically and provide usage information In lsiio.c: drop unused parameters Signed-off-by: Hartmut Knaack Signed-off-by: Jonathan Cameron --- tools/iio/generic_buffer.c | 55 ++++++++++++++++++++++++++++++---------------- tools/iio/lsiio.c | 6 ++--- 2 files changed, 38 insertions(+), 23 deletions(-) (limited to 'tools/iio/generic_buffer.c') diff --git a/tools/iio/generic_buffer.c b/tools/iio/generic_buffer.c index 62ec398922a0..4eebb6616e5c 100644 --- a/tools/iio/generic_buffer.c +++ b/tools/iio/generic_buffer.c @@ -168,6 +168,19 @@ void process_scan(char *data, printf("\n"); } +void print_usage(void) +{ + printf("Usage: generic_buffer [options]...\n" + "Capture, convert and output data from IIO device buffer\n" + " -c Do n conversions\n" + " -e Disable wait for event (new data)\n" + " -g Use trigger-less mode\n" + " -l Set buffer length to n samples\n" + " -n Set device name (mandatory)\n" + " -t Set trigger name\n" + " -w Set delay between reads in us (event-less mode)\n"); +} + int main(int argc, char **argv) { unsigned long num_loops = 2; @@ -193,29 +206,19 @@ int main(int argc, char **argv) struct iio_channel_info *channels; - while ((c = getopt(argc, argv, "l:w:c:et:n:g")) != -1) { + while ((c = getopt(argc, argv, "c:egl:n:t:w:")) != -1) { switch (c) { - case 'n': - device_name = optarg; - break; - case 't': - trigger_name = optarg; - datardytrigger = 0; - break; - case 'e': - noevents = 1; - break; case 'c': errno = 0; num_loops = strtoul(optarg, &dummy, 10); if (errno) return -errno; break; - case 'w': - errno = 0; - timedelay = strtoul(optarg, &dummy, 10); - if (errno) - return -errno; + case 'e': + noevents = 1; + break; + case 'g': + notrigger = 1; break; case 'l': errno = 0; @@ -223,16 +226,30 @@ int main(int argc, char **argv) if (errno) return -errno; break; - case 'g': - notrigger = 1; + case 'n': + device_name = optarg; + break; + case 't': + trigger_name = optarg; + datardytrigger = 0; + break; + case 'w': + errno = 0; + timedelay = strtoul(optarg, &dummy, 10); + if (errno) + return -errno; break; case '?': + print_usage(); return -1; } } - if (device_name == NULL) + if (device_name == NULL) { + printf("Device name not set\n"); + print_usage(); return -1; + } /* Find the device requested */ dev_num = find_type_by_name(device_name, "iio:device"); diff --git a/tools/iio/lsiio.c b/tools/iio/lsiio.c index b1089adb7d3a..b59ee1733924 100644 --- a/tools/iio/lsiio.c +++ b/tools/iio/lsiio.c @@ -164,7 +164,7 @@ int main(int argc, char **argv) { int c, err = 0; - while ((c = getopt(argc, argv, "d:D:v")) != EOF) { + while ((c = getopt(argc, argv, "v")) != EOF) { switch (c) { case 'v': verblevel++; @@ -179,9 +179,7 @@ int main(int argc, char **argv) if (err || argc > optind) { fprintf(stderr, "Usage: lsiio [options]...\n" "List industrial I/O devices\n" - " -v, --verbose\n" - " Increase verbosity (may be given multiple times)\n" - ); + " -v Increase verbosity (may be given multiple times)\n"); exit(1); } -- cgit v1.2.3-70-g09d2