On Sat, 14 Nov 2020 12:59:59 +0100 Lars-Peter Clausen <lars@xxxxxxxxxx> wrote: > 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 <lars@xxxxxxxxxx> Nice little cleanup. Series applied to the togreg branch of iio.git and pushed out as testing for the autobuilders to poke at it. Thanks, Jonathan > --- > drivers/iio/industrialio-core.c | 57 ++++++++------------------------- > 1 file changed, 14 insertions(+), 43 deletions(-) > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index 9955672fc16a..3e71fcab7cbd 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -698,11 +698,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: > @@ -716,7 +718,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; > } > @@ -732,7 +734,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; > } > @@ -741,47 +743,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,