chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use assert_return in more of the public API
[elogind.git]
/
src
/
login
/
logind-seat.c
diff --git
a/src/login/logind-seat.c
b/src/login/logind-seat.c
index 4a4d40adca770c076525f6db31dc58d223eaa812..b1a5ec30efed713e21b7534e12623ce720c8ec9b 100644
(file)
--- a/
src/login/logind-seat.c
+++ b/
src/login/logind-seat.c
@@
-27,8
+27,8
@@
#include <linux/vt.h>
#include <string.h>
#include <linux/vt.h>
#include <string.h>
-#include "s
ystemd/s
d-id128.h"
-#include "s
ystemd/s
d-messages.h"
+#include "sd-id128.h"
+#include "sd-messages.h"
#include "logind-seat.h"
#include "logind-acl.h"
#include "util.h"
#include "logind-seat.h"
#include "logind-acl.h"
#include "util.h"
@@
-67,7
+67,7
@@
void seat_free(Seat *s) {
assert(s);
if (s->in_gc_queue)
assert(s);
if (s->in_gc_queue)
- LIST_REMOVE(
Seat,
gc_queue, s->manager->seat_gc_queue, s);
+ LIST_REMOVE(gc_queue, s->manager->seat_gc_queue, s);
while (s->sessions)
session_free(s->sessions);
while (s->sessions)
session_free(s->sessions);
@@
-84,9
+84,9
@@
void seat_free(Seat *s) {
}
int seat_save(Seat *s) {
}
int seat_save(Seat *s) {
+ _cleanup_free_ char *temp_path = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
int r;
int r;
- FILE *f;
- char *temp_path;
assert(s);
assert(s);
@@
-151,9
+151,6
@@
int seat_save(Seat *s) {
unlink(temp_path);
}
unlink(temp_path);
}
- fclose(f);
- free(temp_path);
-
finish:
if (r < 0)
log_error("Failed to save seat data for %s: %s", s->id, strerror(-r));
finish:
if (r < 0)
log_error("Failed to save seat data for %s: %s", s->id, strerror(-r));
@@
-169,24
+166,20
@@
int seat_load(Seat *s) {
return 0;
}
return 0;
}
-static int vt_allocate(int vtnr) {
-
int fd, r
;
-
char *p
;
+static int vt_allocate(
unsigned
int vtnr) {
+
_cleanup_free_ char *p = NULL
;
+
_cleanup_close_ int fd = -1
;
assert(vtnr >= 1);
assert(vtnr >= 1);
- if (asprintf(&p, "/dev/tty%
i
", vtnr) < 0)
+ if (asprintf(&p, "/dev/tty%
u
", vtnr) < 0)
return -ENOMEM;
fd = open_terminal(p, O_RDWR|O_NOCTTY|O_CLOEXEC);
return -ENOMEM;
fd = open_terminal(p, O_RDWR|O_NOCTTY|O_CLOEXEC);
- free(p);
-
- r = fd < 0 ? -errno : 0;
+ if (fd < 0)
+ return -errno;
- if (fd >= 0)
- close_nointr_nofail(fd);
-
- return r;
+ return 0;
}
int seat_preallocate_vts(Seat *s) {
}
int seat_preallocate_vts(Seat *s) {
@@
-246,18
+239,20
@@
int seat_set_active(Seat *s, Session *session) {
old_active = s->active;
s->active = session;
old_active = s->active;
s->active = session;
- if (old_active)
+ if (old_active)
{
session_device_pause_all(old_active);
session_device_pause_all(old_active);
+ session_send_changed(old_active, "Active", NULL);
+ }
seat_apply_acls(s, old_active);
if (session && session->started) {
seat_apply_acls(s, old_active);
if (session && session->started) {
- session_send_changed(session, "Active
\0"
);
+ session_send_changed(session, "Active
", NULL
);
session_device_resume_all(session);
}
if (!session || session->started)
session_device_resume_all(session);
}
if (!session || session->started)
- seat_send_changed(s, "ActiveSession
\0"
);
+ seat_send_changed(s, "ActiveSession
", NULL
);
seat_save(s);
seat_save(s);
@@
-275,7
+270,7
@@
int seat_set_active(Seat *s, Session *session) {
return 0;
}
return 0;
}
-int seat_active_vt_changed(Seat *s, int vtnr) {
+int seat_active_vt_changed(Seat *s,
unsigned
int vtnr) {
Session *i, *new_active = NULL;
int r;
Session *i, *new_active = NULL;
int r;
@@
-285,7
+280,7
@@
int seat_active_vt_changed(Seat *s, int vtnr) {
if (!seat_has_vts(s))
return -EINVAL;
if (!seat_has_vts(s))
return -EINVAL;
- log_debug("VT changed to %
i
", vtnr);
+ log_debug("VT changed to %
u
", vtnr);
LIST_FOREACH(sessions_by_seat, i, s->sessions)
if (i->vtnr == vtnr) {
LIST_FOREACH(sessions_by_seat, i, s->sessions)
if (i->vtnr == vtnr) {
@@
-302,7
+297,8
@@
int seat_active_vt_changed(Seat *s, int vtnr) {
int seat_read_active_vt(Seat *s) {
char t[64];
ssize_t k;
int seat_read_active_vt(Seat *s) {
char t[64];
ssize_t k;
- int r, vtnr;
+ unsigned int vtnr;
+ int r;
assert(s);
assert(s);
@@
-325,13
+321,13
@@
int seat_read_active_vt(Seat *s) {
return -EIO;
}
return -EIO;
}
- r = safe_ato
i
(t+3, &vtnr);
+ r = safe_ato
u
(t+3, &vtnr);
if (r < 0) {
log_error("Failed to parse VT number %s", t+3);
return r;
}
if (r < 0) {
log_error("Failed to parse VT number %s", t+3);
return r;
}
- if (
vtnr <= 0
) {
+ if (
!vtnr
) {
log_error("VT number invalid: %s", t+3);
return -EIO;
}
log_error("VT number invalid: %s", t+3);
return -EIO;
}
@@
-412,14
+408,17
@@
int seat_attach_session(Seat *s, Session *session) {
assert(session);
assert(!session->seat);
assert(session);
assert(!session->seat);
+ if (!seat_has_vts(s) != !session->vtnr)
+ return -EINVAL;
+
session->seat = s;
session->seat = s;
- LIST_PREPEND(
Session,
sessions_by_seat, s->sessions, session);
+ LIST_PREPEND(sessions_by_seat, s->sessions, session);
- seat_send_changed(s, "Sessions
\0"
);
+ seat_send_changed(s, "Sessions
", NULL
);
/* On seats with VTs, the VT logic defines which session is active. On
/* On seats with VTs, the VT logic defines which session is active. On
- * seats without VTs, we automatically activate
the first session
. */
- if (!seat_has_vts(s)
&& !s->active
)
+ * seats without VTs, we automatically activate
new sessions
. */
+ if (!seat_has_vts(s))
seat_set_active(s, session);
return 0;
seat_set_active(s, session);
return 0;
@@
-513,14
+512,14
@@
int seat_get_idle_hint(Seat *s, dual_timestamp *t) {
return idle_hint;
}
return idle_hint;
}
-
int
seat_check_gc(Seat *s, bool drop_not_started) {
+
bool
seat_check_gc(Seat *s, bool drop_not_started) {
assert(s);
if (drop_not_started && !s->started)
assert(s);
if (drop_not_started && !s->started)
- return
0
;
+ return
false
;
if (seat_is_seat0(s))
if (seat_is_seat0(s))
- return
1
;
+ return
true
;
return seat_has_master_device(s);
}
return seat_has_master_device(s);
}
@@
-531,7
+530,7
@@
void seat_add_to_gc_queue(Seat *s) {
if (s->in_gc_queue)
return;
if (s->in_gc_queue)
return;
- LIST_PREPEND(
Seat,
gc_queue, s->manager->seat_gc_queue, s);
+ LIST_PREPEND(gc_queue, s->manager->seat_gc_queue, s);
s->in_gc_queue = true;
}
s->in_gc_queue = true;
}