Skip to content

Commit

Permalink
x11/lightdm: Fix ttyv numbering logic
Browse files Browse the repository at this point in the history
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
madpilot78 committed Feb 26, 2024
1 parent 4cc5b38 commit c88dffc
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 7 deletions.
2 changes: 1 addition & 1 deletion x11/lightdm/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PORTNAME= lightdm
PORTVERSION= 1.32.0
PORTREVISION= 4
PORTREVISION= 5
CATEGORIES= x11
MASTER_SITES= https://github.com/canonical/${PORTNAME}/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/

Expand Down
60 changes: 54 additions & 6 deletions x11/lightdm/files/patch-src_x-server.c
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)));

0 comments on commit c88dffc

Please sign in to comment.