const char *gpiochip_is_requested(struct gpio_chip *gc, unsigned int offset);
 char *gpiochip_dup_line_label(struct gpio_chip *gc, unsigned int offset);
 
+
+struct _gpiochip_for_each_data {
+       const char **label;
+       unsigned int *i;
+};
+
+DEFINE_CLASS(_gpiochip_for_each_data,
+            struct _gpiochip_for_each_data,
+            if (*_T.label) kfree(*_T.label),
+            ({
+               struct _gpiochip_for_each_data _data = { label, i };
+               *_data.i = 0;
+               _data;
+            }),
+            const char **label, int *i)
+
 /**
  * for_each_requested_gpio_in_range - iterates over requested GPIOs in a given range
- * @chip:      the chip to query
- * @i:         loop variable
- * @base:      first GPIO in the range
- * @size:      amount of GPIOs to check starting from @base
- * @label:     label of current GPIO
+ * @_chip:     the chip to query
+ * @_i:                loop variable
+ * @_base:     first GPIO in the range
+ * @_size:     amount of GPIOs to check starting from @base
+ * @_label:    label of current GPIO
  */
-#define for_each_requested_gpio_in_range(chip, i, base, size, label)                   \
-       for (i = 0; i < size; i++)                                                      \
-               if ((label = gpiochip_is_requested(chip, base + i)) == NULL) {} else
+#define for_each_requested_gpio_in_range(_chip, _i, _base, _size, _label)              \
+       for (CLASS(_gpiochip_for_each_data, _data)(&_label, &_i);                       \
+            *_data.i < _size;                                                          \
+            (*_data.i)++, kfree(*(_data.label)), *_data.label = NULL)                  \
+               if ((*_data.label =                                                     \
+                       gpiochip_dup_line_label(_chip, _base + *_data.i)) == NULL) {}   \
+               else if (IS_ERR(*_data.label)) {}                                       \
+               else
 
 /* Iterates over all requested GPIO of the given @chip */
 #define for_each_requested_gpio(chip, i, label)                                                \