return NULL;
}
- s->id = path_get_file_name(s->state_file);
+ s->id = basename(s->state_file);
if (hashmap_put(m->sessions, s->id, s) < 0) {
hashmap_free(s->devices);
fprintf(f, "SERVICE=%s\n", s->service);
if (s->seat && seat_has_vts(s->seat))
- fprintf(f, "VTNR=%i\n", s->vtnr);
+ fprintf(f, "VTNR=%u\n", s->vtnr);
if (s->leader > 0)
fprintf(f, "LEADER=%lu\n", (unsigned long) s->leader);
s->remote = k;
}
+ if (vtnr)
+ safe_atou(vtnr, &s->vtnr);
+
if (seat && !s->seat) {
Seat *o;
o = hashmap_get(s->manager->seats, seat);
if (o)
- seat_attach_session(o, s);
+ r = seat_attach_session(o, s);
+ if (!o || r < 0)
+ log_error("Cannot attach session %s to seat %s", s->id, seat);
}
- if (vtnr && s->seat && seat_has_vts(s->seat)) {
- int v;
-
- k = safe_atoi(vtnr, &v);
- if (k >= 0 && v >= 1)
- s->vtnr = v;
- }
+ if (!s->seat || !seat_has_vts(s->seat))
+ s->vtnr = 0;
if (leader) {
k = parse_pid(leader, &s->leader);
/* on seats with VTs, we let VTs manage session-switching */
if (seat_has_vts(s->seat)) {
- if (s->vtnr <= 0)
+ if (!s->vtnr)
return -ENOTSUP;
return chvt(s->vtnr);
SessionState session_get_state(Session *s) {
assert(s);
- if (s->closing)
- return SESSION_CLOSING;
-
if (s->scope_job)
return SESSION_OPENING;
static int session_open_vt(Session *s) {
char path[128];
- if (s->vtnr <= 0)
+ if (!s->vtnr)
return -1;
if (s->vtfd >= 0)
return s->vtfd;
- sprintf(path, "/dev/tty%d", s->vtnr);
+ sprintf(path, "/dev/tty%u", s->vtnr);
s->vtfd = open(path, O_RDWR | O_CLOEXEC | O_NONBLOCK | O_NOCTTY);
if (s->vtfd < 0) {
log_error("cannot open VT %s of session %s: %m", path, s->id);
return;
error:
- log_error("cannot mute VT %d for session %s (%d/%d)", s->vtnr, s->id, r, errno);
+ log_error("cannot mute VT %u for session %s (%d/%d)", s->vtnr, s->id, r, errno);
session_restore_vt(s);
}