From eda20ba1e25e6d8e7fa0c62d1bd685aa5de8e8ff Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sat, 14 Nov 2020 12:59:59 +0100 Subject: iio: core: Consolidate iio_format_avail_{list,range}() The iio_format_avail_list() and iio_format_avail_range() functions are almost identical. The only differences are that iio_format_avail_range() expects a fixed amount of items and adds brackets "[ ]" around the output. Refactor them into a common helper function. This improves the maintainability of the code as it makes it easier to modify the implementation of these functions. Signed-off-by: Lars-Peter Clausen Link: https://lore.kernel.org/r/20201114120000.6533-1-lars@metafoo.de Signed-off-by: Jonathan Cameron --- drivers/iio/industrialio-core.c | 57 ++++++++++------------------------------- 1 file changed, 14 insertions(+), 43 deletions(-) (limited to 'drivers/iio') diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index 7cae46f9bc0d..9346f1c788b8 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -711,11 +711,13 @@ static ssize_t iio_read_channel_info(struct device *dev, return iio_format_value(buf, ret, val_len, vals); } -static ssize_t iio_format_avail_list(char *buf, const int *vals, - int type, int length) +static ssize_t iio_format_list(char *buf, const int *vals, int type, int length, + const char *prefix, const char *suffix) { + ssize_t len; int i; - ssize_t len = 0; + + len = scnprintf(buf, PAGE_SIZE, prefix); switch (type) { case IIO_VAL_INT: @@ -729,7 +731,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals, " "); else len += scnprintf(buf + len, PAGE_SIZE - len, - "\n"); + "%s\n", suffix); if (len >= PAGE_SIZE) return -EFBIG; } @@ -745,7 +747,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals, " "); else len += scnprintf(buf + len, PAGE_SIZE - len, - "\n"); + "%s\n", suffix); if (len >= PAGE_SIZE) return -EFBIG; } @@ -754,47 +756,16 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals, return len; } -static ssize_t iio_format_avail_range(char *buf, const int *vals, int type) +static ssize_t iio_format_avail_list(char *buf, const int *vals, + int type, int length) { - int i; - ssize_t len; - len = snprintf(buf, PAGE_SIZE, "["); - switch (type) { - case IIO_VAL_INT: - for (i = 0; i < 3; i++) { - len += __iio_format_value(buf + len, PAGE_SIZE - len, - type, 1, &vals[i]); - if (len >= PAGE_SIZE) - return -EFBIG; - if (i < 2) - len += scnprintf(buf + len, PAGE_SIZE - len, - " "); - else - len += scnprintf(buf + len, PAGE_SIZE - len, - "]\n"); - if (len >= PAGE_SIZE) - return -EFBIG; - } - break; - default: - for (i = 0; i < 3; i++) { - len += __iio_format_value(buf + len, PAGE_SIZE - len, - type, 2, &vals[i * 2]); - if (len >= PAGE_SIZE) - return -EFBIG; - if (i < 2) - len += scnprintf(buf + len, PAGE_SIZE - len, - " "); - else - len += scnprintf(buf + len, PAGE_SIZE - len, - "]\n"); - if (len >= PAGE_SIZE) - return -EFBIG; - } - } + return iio_format_list(buf, vals, type, length, "", ""); +} - return len; +static ssize_t iio_format_avail_range(char *buf, const int *vals, int type) +{ + return iio_format_list(buf, vals, type, 3, "[", "]"); } static ssize_t iio_read_channel_info_avail(struct device *dev, -- cgit v1.2.3