Message ID | 20201114120000.6533-1-lars@metafoo.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] iio: core: Consolidate iio_format_avail_{list,range}() | expand |
On Sat, 14 Nov 2020 12:59:59 +0100 Lars-Peter Clausen <lars@metafoo.de> 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@metafoo.de> 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,
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,
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@metafoo.de> --- drivers/iio/industrialio-core.c | 57 ++++++++------------------------- 1 file changed, 14 insertions(+), 43 deletions(-)