-
Notifications
You must be signed in to change notification settings - Fork 761
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x11/lightdm: Fix ttyv numbering logic
Adapt code from wlroots to correctly generate ttyv device names for numbers beyond 9. Upstream pull request: canonical/lightdm#343 PR: 277114 Obtained from: swaywm/wlroots@fc6c0ca (inspired by) MFH: 2024Q1
- Loading branch information
1 parent
4cc5b38
commit c88dffc
Showing
2 changed files
with
55 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,63 @@ | ||
--- src/x-server.c.orig 2018-08-30 00:28:55 UTC | ||
--- src/x-server.c.orig 2019-08-04 22:29:55 UTC | ||
+++ src/x-server.c | ||
@@ -152,10 +152,10 @@ x_server_connect_session (DisplayServer *display_serve | ||
@@ -152,13 +152,60 @@ x_server_connect_session (DisplayServer *display_serve | ||
g_autofree gchar *tty_text = NULL; | ||
g_autofree gchar *vt_text = NULL; | ||
|
||
- tty_text = g_strdup_printf ("/dev/tty%d", vt); | ||
+ tty_text = g_strdup_printf ("/dev/ttyv%d", vt - 1); | ||
+#ifdef __FreeBSD__ | ||
+ char vty_num32[6]; | ||
+ int num; | ||
+ const int base = 32; | ||
+ size_t offset = 0; | ||
+ | ||
+ num = vt - 1; | ||
+ | ||
+ if (num == 0) { | ||
+ vty_num32[offset++] = '0'; | ||
+ vty_num32[offset] = '\0'; | ||
+ } else { | ||
+ for (int remaning = num; remaning > 0; remaning /= base, offset++) { | ||
+ if (offset + 1 >= 6) { | ||
+ g_error ("tty number buffer too small"); | ||
+ goto error; | ||
+ } | ||
+ | ||
+ const int value = remaning % base; | ||
+ if (value >= 10) { | ||
+ vty_num32[offset] = 'a' + value - 10; | ||
+ } else { | ||
+ vty_num32[offset] = '0' + value; | ||
+ } | ||
+ } | ||
+ | ||
+ for (size_t i = 0; i < offset / 2; i++) { | ||
+ const size_t p1 = i; | ||
+ const size_t p2 = offset - 1 - i; | ||
+ const char tmp = vty_num32[p1]; | ||
+ vty_num32[p1] = vty_num32[p2]; | ||
+ vty_num32[p2] = tmp; | ||
+ } | ||
+ | ||
+ vty_num32[offset] = '\0'; | ||
+ } | ||
+ | ||
+ tty_text = g_strdup_printf ("/dev/ttyv%s", vty_num32); | ||
+#else | ||
tty_text = g_strdup_printf ("/dev/tty%d", vt); | ||
+#endif | ||
session_set_tty (session, tty_text); | ||
|
||
- vt_text = g_strdup_printf ("%d", vt); | ||
+ vt_text = g_strdup_printf ("%d", vt - 1); | ||
+#ifdef __FreeBSD__ | ||
+ vt_text = g_strdup_printf ("%d", num); | ||
+#else | ||
vt_text = g_strdup_printf ("%d", vt); | ||
+#endif | ||
session_set_env (session, "XDG_VTNR", vt_text); | ||
} | ||
else | ||
+#ifdef __FreeBSD__ | ||
+error: | ||
+#endif | ||
l_debug (session, "Not setting XDG_VTNR"); | ||
|
||
session_set_env (session, "DISPLAY", x_server_get_address (X_SERVER (display_server))); |