int gpiod_line_event_get_fd(struct gpiod_line *line)
{
- return line_get_state(line) == LINE_REQUESTED_EVENTS ? line->fd : -1;
+ if (line_get_state(line) != LINE_REQUESTED_EVENTS) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ return line->fd;
}
int gpiod_line_event_read_fd(int fd, struct gpiod_line_event *event)
#include "gpiod-test.h"
+#include <errno.h>
+
static void event_rising_edge_good(void)
{
TEST_CLEANUP(test_close_chip) struct gpiod_chip *chip = NULL;
TEST_DEFINE(event_wait_multiple,
"events - wait for events on multiple lines",
0, { 8 });
+
+static void event_get_fd_when_values_requested(void)
+{
+ TEST_CLEANUP(test_close_chip) struct gpiod_chip *chip = NULL;
+ struct gpiod_line *line;
+ int rv, fd;
+
+ chip = gpiod_chip_open(test_chip_path(0));
+ TEST_ASSERT_NOT_NULL(chip);
+
+ line = gpiod_chip_get_line(chip, 3);
+ TEST_ASSERT_NOT_NULL(line);
+
+ rv = gpiod_line_request_input(line, TEST_CONSUMER);
+ TEST_ASSERT_RET_OK(rv);
+
+ fd = gpiod_line_event_get_fd(line);
+ TEST_ASSERT_EQ(fd, -1);
+ TEST_ASSERT_ERRNO_IS(EINVAL);
+}
+TEST_DEFINE(event_get_fd_when_values_requested,
+ "events - gpiod_line_event_get_fd(): line requested for values",
+ 0, { 8 });