diff --git a/backend/session/direct-freebsd.c b/backend/session/direct-freebsd.c index cecfb0c1..bce1c871 100644 --- a/backend/session/direct-freebsd.c +++ b/backend/session/direct-freebsd.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -32,8 +33,14 @@ struct direct_session { struct wl_event_source *vt_source; }; +static struct direct_session *direct_session_from_session( + struct wlr_session *base) { + assert(base->impl == &session_direct); + return (struct direct_session *)base; +} + static int direct_session_open(struct wlr_session *base, const char *path) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); int fd = direct_ipc_open(session->sock, path); if (fd < 0) { @@ -46,7 +53,7 @@ static int direct_session_open(struct wlr_session *base, const char *path) { } static void direct_session_close(struct wlr_session *base, int fd) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); int ev; struct drm_version dv = {0}; @@ -60,12 +67,12 @@ static void direct_session_close(struct wlr_session *base, int fd) { } static bool direct_change_vt(struct wlr_session *base, unsigned vt) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); return ioctl(session->tty_fd, VT_ACTIVATE, (int)vt) == 0; } static void direct_session_destroy(struct wlr_session *base) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); struct vt_mode mode = { .mode = VT_AUTO, }; @@ -157,7 +164,8 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display } if (ioctl(fd, KDSKBMODE, K_CODE)) { - wlr_log_errno(WLR_ERROR, "Failed to set keyboard mode K_CODE on tty %d", tty); + wlr_log_errno(WLR_ERROR, + "Failed to set keyboard mode K_CODE on tty %d", tty); goto error; } diff --git a/backend/session/direct.c b/backend/session/direct.c index ed7a0c65..0912cd58 100644 --- a/backend/session/direct.c +++ b/backend/session/direct.c @@ -1,4 +1,5 @@ #define _POSIX_C_SOURCE 200809L +#include #include #include #include @@ -33,8 +34,14 @@ struct direct_session { struct wl_event_source *vt_source; }; +static struct direct_session *direct_session_from_session( + struct wlr_session *base) { + assert(base->impl == &session_direct); + return (struct direct_session *)base; +} + static int direct_session_open(struct wlr_session *base, const char *path) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); int fd = direct_ipc_open(session->sock, path); if (fd < 0) { @@ -57,7 +64,7 @@ static int direct_session_open(struct wlr_session *base, const char *path) { } static void direct_session_close(struct wlr_session *base, int fd) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); struct stat st; if (fstat(fd, &st) < 0) { @@ -76,7 +83,7 @@ static void direct_session_close(struct wlr_session *base, int fd) { } static bool direct_change_vt(struct wlr_session *base, unsigned vt) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); // Only seat0 has VTs associated with it if (strcmp(session->base.seat, "seat0") != 0) { @@ -87,7 +94,7 @@ static bool direct_change_vt(struct wlr_session *base, unsigned vt) { } static void direct_session_destroy(struct wlr_session *base) { - struct direct_session *session = wl_container_of(base, session, base); + struct direct_session *session = direct_session_from_session(base); if (strcmp(session->base.seat, "seat0") == 0) { struct vt_mode mode = { diff --git a/backend/session/logind.c b/backend/session/logind.c index 2f816b95..39143a2f 100644 --- a/backend/session/logind.c +++ b/backend/session/logind.c @@ -37,8 +37,14 @@ struct logind_session { char *path; }; +static struct logind_session *logind_session_from_session( + struct wlr_session *base) { + assert(base->impl == &session_logind); + return (struct logind_session *)base; +} + static int logind_take_device(struct wlr_session *base, const char *path) { - struct logind_session *session = wl_container_of(base, session, base); + struct logind_session *session = logind_session_from_session(base); int ret; int fd = -1; @@ -83,7 +89,7 @@ error: } static void logind_release_device(struct wlr_session *base, int fd) { - struct logind_session *session = wl_container_of(base, session, base); + struct logind_session *session = logind_session_from_session(base); int ret; sd_bus_message *msg = NULL; @@ -108,7 +114,7 @@ static void logind_release_device(struct wlr_session *base, int fd) { } static bool logind_change_vt(struct wlr_session *base, unsigned vt) { - struct logind_session *session = wl_container_of(base, session, base); + struct logind_session *session = logind_session_from_session(base); // Only seat0 has VTs associated with it if (strcmp(session->base.seat, "seat0") != 0) { @@ -212,7 +218,7 @@ static void release_control(struct logind_session *session) { } static void logind_session_destroy(struct wlr_session *base) { - struct logind_session *session = wl_container_of(base, session, base); + struct logind_session *session = logind_session_from_session(base); release_control(session);