iio: core: Simplify iio_format_list()
authorLars-Peter Clausen <lars@metafoo.de>
Sat, 14 Nov 2020 12:00:00 +0000 (13:00 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 3 Dec 2020 19:32:44 +0000 (19:32 +0000)
iio_format_list() has two branches in a switch statement that are almost
identical. They only differ in the stride that is used to iterate through
the item list.

Consolidate this into a common code path to simplify the code.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Link: https://lore.kernel.org/r/20201114120000.6533-2-lars@metafoo.de
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/industrialio-core.c

index 9346f1c..c2e4c26 100644 (file)
@@ -715,44 +715,35 @@ 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 stride;
        int i;
 
-       len = scnprintf(buf, PAGE_SIZE, prefix);
-
        switch (type) {
        case IIO_VAL_INT:
-               for (i = 0; i < length; i++) {
-                       len += __iio_format_value(buf + len, PAGE_SIZE - len,
-                                                 type, 1, &vals[i]);
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-                       if (i < length - 1)
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               " ");
-                       else
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               "%s\n", suffix);
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-               }
+               stride = 1;
                break;
        default:
-               for (i = 0; i < length / 2; i++) {
-                       len += __iio_format_value(buf + len, PAGE_SIZE - len,
-                                                 type, 2, &vals[i * 2]);
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-                       if (i < length / 2 - 1)
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               " ");
-                       else
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               "%s\n", suffix);
+               stride = 2;
+               break;
+       }
+
+       len = scnprintf(buf, PAGE_SIZE, prefix);
+
+       for (i = 0; i <= length - stride; i += stride) {
+               if (i != 0) {
+                       len += scnprintf(buf + len, PAGE_SIZE - len, " ");
                        if (len >= PAGE_SIZE)
                                return -EFBIG;
                }
+
+               len += __iio_format_value(buf + len, PAGE_SIZE - len, type,
+                                         stride, &vals[i]);
+               if (len >= PAGE_SIZE)
+                       return -EFBIG;
        }
 
+       len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n", suffix);
+
        return len;
 }