We should return an invalid line_bulk object if we failed to look up at
least one line from the provided list of names.
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
line_bulk chip::find_lines(const ::std::vector<::std::string>& names) const
{
line_bulk lines;
+ line line;
- for (auto& it: names)
- lines.append(this->find_line(it));
+ for (auto& it: names) {
+ line = this->find_line(it);
+ if (!line) {
+ lines.clear();
+ return ::std::move(lines);
+ }
+
+ lines.append(line);
+ }
return ::std::move(lines);
}
}
TEST_CASE(chip_line_ops);
+void chip_find_lines_nonexistent(void)
+{
+ ::gpiod::chip chip("gpiochip0");
+
+ auto lines = chip.find_lines({ "gpio-mockup-A-1", "nonexistent", "gpio-mockup-A-4" });
+ if (lines)
+ throw ::std::logic_error("line_bulk object should be invalid");
+
+ ::std::cerr << "line_bulk invalid as expected" << ::std::endl;
+}
+TEST_CASE(chip_find_lines_nonexistent);
+
void line_info(void)
{
::gpiod::chip chip("gpiochip0");