From 3f49d45a45c6c585098590174c3245d2d9bdde0a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 26 May 2011 02:21:16 +0200 Subject: logind: implement D-Bus properties --- src/logind-seat.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src/logind-seat.c') diff --git a/src/logind-seat.c b/src/logind-seat.c index ae89ec9d83..2ba3060be3 100644 --- a/src/logind-seat.c +++ b/src/logind-seat.c @@ -182,7 +182,8 @@ static int vt_allocate(int vtnr) { } static int seat_preallocate_vts(Seat *s) { - int i, r = 0; + int r = 0; + unsigned i; assert(s); assert(s->manager); @@ -295,6 +296,11 @@ int seat_read_active_vt(Seat *s) { int seat_start(Seat *s) { assert(s); + if (s->started) + return 0; + + log_info("New seat %s.", s->id); + /* Initialize VT magic stuff */ seat_preallocate_vts(s); @@ -304,6 +310,8 @@ int seat_start(Seat *s) { /* Save seat data */ seat_save(s); + s->started = true; + return 0; } @@ -313,6 +321,11 @@ int seat_stop(Seat *s) { assert(s); + if (!s->started) + return 0; + + log_info("Removed seat %s.", s->id); + LIST_FOREACH(sessions_by_seat, session, s->sessions) { k = session_stop(session); if (k < 0) @@ -322,6 +335,8 @@ int seat_stop(Seat *s) { unlink(s->state_file); seat_add_to_gc_queue(s); + s->started = false; + return r; } @@ -343,3 +358,30 @@ void seat_add_to_gc_queue(Seat *s) { LIST_PREPEND(Seat, gc_queue, s->manager->seat_gc_queue, s); s->in_gc_queue = true; } + +static bool seat_name_valid_char(char c) { + return + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '-' || + c == '_'; +} + +bool seat_name_is_valid(const char *name) { + const char *p; + + assert(name); + + if (!startswith(name, "seat")) + return false; + + if (!name[4]) + return false; + + for (p = name; *p; p++) + if (!seat_name_valid_char(*p)) + return false; + + return true; +} -- cgit v1.2.3-54-g00ecf