Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement logic to get FreeBSD ttyv device names. #343

Merged
merged 1 commit into from
Mar 19, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions src/x-server.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,13 +181,60 @@ x_server_connect_session (DisplayServer *display_server, Session *session)
g_autofree gchar *tty_text = NULL;
g_autofree gchar *vt_text = NULL;

#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);

#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)));
Expand Down
Loading