]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: core: Consolidate iio_format_avail_{list,range}()
authorLars-Peter Clausen <lars@metafoo.de>
Sat, 14 Nov 2020 11:59:59 +0000 (12:59 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 3 Dec 2020 19:32:43 +0000 (19:32 +0000)
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>
Link: https://lore.kernel.org/r/20201114120000.6533-1-lars@metafoo.de
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/industrialio-core.c

index 7cae46f9bc0d7ef0aa165923880339050dd6b4be..9346f1c788b80f7243f2e769042fa547024c835b 100644 (file)
@@ -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,