Commit eda20ba1 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron

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: default avatarLars-Peter Clausen <lars@metafoo.de>
Link: https://lore.kernel.org/r/20201114120000.6533-1-lars@metafoo.deSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 6d90c9a9
...@@ -711,11 +711,13 @@ static ssize_t iio_read_channel_info(struct device *dev, ...@@ -711,11 +711,13 @@ static ssize_t iio_read_channel_info(struct device *dev,
return iio_format_value(buf, ret, val_len, vals); return iio_format_value(buf, ret, val_len, vals);
} }
static ssize_t iio_format_avail_list(char *buf, const int *vals, static ssize_t iio_format_list(char *buf, const int *vals, int type, int length,
int type, int length) const char *prefix, const char *suffix)
{ {
ssize_t len;
int i; int i;
ssize_t len = 0;
len = scnprintf(buf, PAGE_SIZE, prefix);
switch (type) { switch (type) {
case IIO_VAL_INT: case IIO_VAL_INT:
...@@ -729,7 +731,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals, ...@@ -729,7 +731,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals,
" "); " ");
else else
len += scnprintf(buf + len, PAGE_SIZE - len, len += scnprintf(buf + len, PAGE_SIZE - len,
"\n"); "%s\n", suffix);
if (len >= PAGE_SIZE) if (len >= PAGE_SIZE)
return -EFBIG; return -EFBIG;
} }
...@@ -745,7 +747,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals, ...@@ -745,7 +747,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals,
" "); " ");
else else
len += scnprintf(buf + len, PAGE_SIZE - len, len += scnprintf(buf + len, PAGE_SIZE - len,
"\n"); "%s\n", suffix);
if (len >= PAGE_SIZE) if (len >= PAGE_SIZE)
return -EFBIG; return -EFBIG;
} }
...@@ -754,47 +756,16 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals, ...@@ -754,47 +756,16 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals,
return len; 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, "["); return iio_format_list(buf, vals, type, length, "", "");
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 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, static ssize_t iio_read_channel_info_avail(struct device *dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment