From 24074a81d0a10261a99c2cc9167809cc27253573 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Mon, 16 Sep 2013 17:21:34 +0200 Subject: [PATCH] mutter-launch: fix for more systemd API changes Modern systemd changed the semantics of sd_session_get_tty() to return the full path, rather than just the tty name. Reviewed by Ray Strode in IRC. --- src/wayland/weston-launch.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/wayland/weston-launch.c b/src/wayland/weston-launch.c index 52019d40f..3cb422687 100644 --- a/src/wayland/weston-launch.c +++ b/src/wayland/weston-launch.c @@ -566,7 +566,18 @@ setup_tty(struct weston_launch *wl) ok = sd_session_get_tty(session, &tty); if (ok == 0) { - snprintf(path, PATH_MAX, "/dev/%s", tty); + /* Old systemd only has the tty name in the TTY + field, new one has the full char device path. + + Check what we have and fix it properly. + */ + if (strncmp(tty, "/dev", strlen("/dev")) == 0) { + strncpy(path, tty, PATH_MAX); + path[PATH_MAX-1] = 0; + } else { + snprintf(path, PATH_MAX, "/dev/%s", tty); + } + wl->tty = open(path, O_RDWR | O_NOCTTY | O_CLOEXEC); free(tty); #ifdef HAVE_SD_SESSION_GET_VT