aboutsummaryrefslogtreecommitdiff
path: root/backend/session
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-11-06 10:42:43 +0100
committerSimon Ser <contact@emersion.fr>2020-11-19 22:47:49 +0100
commit768fbaad54027f8dd027e7e015e8eeb93cb38c52 (patch)
tree56ea27acfdf81a0a08bcd20e989b79cfe448853f /backend/session
parent44a4792fd80acfeb15e2cf88304f283855689fd0 (diff)
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.
Diffstat (limited to 'backend/session')
-rw-r--r--backend/session/session.c21
1 files 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);