From 768fbaad54027f8dd027e7e015e8eeb93cb38c52 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 6 Nov 2020 10:42:43 +0100 Subject: [PATCH] backend/session: filter udev events by sysname We're only interested in card devices. The loop over wlr_session.devices would take care of ignoring non-card events, but a future patch will listen to udev "add" events as well. --- backend/session/session.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/backend/session/session.c b/backend/session/session.c index 005e4e7e..b96f4294 100644 --- a/backend/session/session.c +++ b/backend/session/session.c @@ -33,6 +33,19 @@ static const struct session_impl *impls[] = { NULL, }; +static bool is_drm_card(const char *sysname) { + const char prefix[] = "card"; + if (strncmp(sysname, prefix, strlen(prefix)) != 0) { + return false; + } + for (size_t i = strlen(prefix); sysname[i] != '\0'; i++) { + if (sysname[i] < '0' || sysname[i] > '9') { + return false; + } + } + return true; +} + static int udev_event(int fd, uint32_t mask, void *data) { struct wlr_session *session = data; @@ -41,18 +54,16 @@ static int udev_event(int fd, uint32_t mask, void *data) { return 1; } + const char *sysname = udev_device_get_sysname(udev_dev); const char *action = udev_device_get_action(udev_dev); + wlr_log(WLR_DEBUG, "udev event for %s (%s)", sysname, action); - wlr_log(WLR_DEBUG, "udev event for %s (%s)", - udev_device_get_sysname(udev_dev), action); - - if (!action || strcmp(action, "change") != 0) { + if (!is_drm_card(sysname) || !action || strcmp(action, "change") != 0) { goto out; } dev_t devnum = udev_device_get_devnum(udev_dev); struct wlr_device *dev; - wl_list_for_each(dev, &session->devices, link) { if (dev->dev == devnum) { wlr_signal_emit_safe(&dev->events.change, NULL);