Only allocate the array of line pointers is they're actually needed.
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
return NULL;
}
- chip->lines = calloc(chip->cinfo.lines, sizeof(struct gpiod_line *));
- if (!chip->lines) {
- close(chip->fd);
- free(chip);
- return NULL;
- }
-
return chip;
}
struct gpiod_line *line;
unsigned int i;
- for (i = 0; i < chip->cinfo.lines; i++) {
- line = chip->lines[i];
+ if (chip->lines) {
+ for (i = 0; i < chip->cinfo.lines; i++) {
+ line = chip->lines[i];
- if (line) {
- gpiod_line_release(line);
- line_free(line);
+ if (line) {
+ gpiod_line_release(line);
+ line_free(line);
+ }
}
+
+ free(chip->lines);
}
if (chip->chip_ctx)
line_chip_ctx_free(chip->chip_ctx);
close(chip->fd);
- free(chip->lines);
free(chip);
}
return NULL;
}
+ if (!chip->lines) {
+ chip->lines = calloc(chip->cinfo.lines,
+ sizeof(struct gpiod_line *));
+ if (!chip->lines)
+ return NULL;
+ }
+
if (!chip->chip_ctx) {
chip->chip_ctx = line_chip_ctx_new(chip, chip->fd);
if (!chip->chip_ctx)