chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
login: set_controller should fail if prepare_vt fails
[elogind.git]
/
src
/
login
/
logind-seat.c
diff --git
a/src/login/logind-seat.c
b/src/login/logind-seat.c
index 3f5efdc8ea706f8195b463163f838a5d4d34fd75..99921951511cc3c9293c06d0be12fb3669cda899 100644
(file)
--- a/
src/login/logind-seat.c
+++ b/
src/login/logind-seat.c
@@
-120,9
+120,9
@@
int seat_save(Seat *s) {
fprintf(f,
"ACTIVE=%s\n"
fprintf(f,
"ACTIVE=%s\n"
- "ACTIVE_UID=
%lu
\n",
+ "ACTIVE_UID=
"UID_FMT"
\n",
s->active->id,
s->active->id,
-
(unsigned long)
s->active->user->uid);
+ s->active->user->uid);
}
if (s->sessions) {
}
if (s->sessions) {
@@
-275,8
+275,13
@@
int seat_switch_to(Seat *s, unsigned int num) {
if (!num)
return -EINVAL;
if (!num)
return -EINVAL;
- if (num >= s->position_count || !s->positions[num])
+ if (num >= s->position_count || !s->positions[num]) {
+ /* allow switching to unused VTs to trigger auto-activate */
+ if (seat_has_vts(s) && num < 64)
+ return chvt(num);
+
return -EINVAL;
return -EINVAL;
+ }
return session_activate(s->positions[num]);
}
return session_activate(s->positions[num]);
}
@@
-485,7
+490,7
@@
void seat_claim_position(Seat *s, Session *session, unsigned int pos) {
if (seat_has_vts(s))
pos = session->vtnr;
if (seat_has_vts(s))
pos = session->vtnr;
- if (!GREEDY_REALLOC0
_T
(s->positions, s->position_count, pos + 1))
+ if (!GREEDY_REALLOC0(s->positions, s->position_count, pos + 1))
return;
seat_evict_position(s, session);
return;
seat_evict_position(s, session);