static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR,
                   iio_buffer_show_enable, iio_buffer_store_enable);
 
+static struct attribute *iio_buffer_attrs[] = {
+       &dev_attr_length.attr,
+       &dev_attr_enable.attr,
+};
+
 int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
 {
        struct iio_dev_attr *p;
                        attrcount++;
        }
 
-       buffer->buffer_group.name = "buffer";
-       buffer->buffer_group.attrs = kcalloc(attrcount + 3,
-                       sizeof(*buffer->buffer_group.attrs), GFP_KERNEL);
-       if (!buffer->buffer_group.attrs)
+       attr = kcalloc(attrcount + ARRAY_SIZE(iio_buffer_attrs) + 1,
+                      sizeof(struct attribute *), GFP_KERNEL);
+       if (!attr)
                return -ENOMEM;
 
-       if (buffer->access->set_length)
-               buffer->buffer_group.attrs[0] = &dev_attr_length.attr;
-       else
-               buffer->buffer_group.attrs[0] = &dev_attr_length_ro.attr;
-       buffer->buffer_group.attrs[1] = &dev_attr_enable.attr;
+       memcpy(attr, iio_buffer_attrs, sizeof(iio_buffer_attrs));
+       if (!buffer->access->set_length)
+               attr[0] = &dev_attr_length_ro.attr;
+
        if (buffer->attrs)
-               memcpy(&buffer->buffer_group.attrs[2], buffer->attrs,
-                       sizeof(*&buffer->buffer_group.attrs) * attrcount);
-       buffer->buffer_group.attrs[attrcount+2] = NULL;
+               memcpy(&attr[ARRAY_SIZE(iio_buffer_attrs)], buffer->attrs,
+                      sizeof(struct attribute *) * attrcount);
+
+       attr[attrcount + ARRAY_SIZE(iio_buffer_attrs)] = NULL;
+
+       buffer->buffer_group.name = "buffer";
+       buffer->buffer_group.attrs = attr;
 
        indio_dev->groups[indio_dev->groupcounter++] = &buffer->buffer_group;