chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
util: rework strappenda(), and rename it strjoina()
[elogind.git]
/
src
/
libsystemd-terminal
/
modeset.c
diff --git
a/src/libsystemd-terminal/modeset.c
b/src/libsystemd-terminal/modeset.c
index c1119c9e0fde6f366df7b569a563bbff2fbe787b..6e13432d688fb7709a86d48590f6e512ce0157b6 100644
(file)
--- a/
src/libsystemd-terminal/modeset.c
+++ b/
src/libsystemd-terminal/modeset.c
@@
-146,16
+146,12
@@
static int modeset_new(Modeset **out) {
return log_oom();
r = sd_pid_get_session(getpid(), &m->session);
return log_oom();
r = sd_pid_get_session(getpid(), &m->session);
- if (r < 0) {
- log_error("Cannot retrieve logind session: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Cannot retrieve logind session: %m");
r = sd_session_get_seat(m->session, &m->seat);
r = sd_session_get_seat(m->session, &m->seat);
- if (r < 0) {
- log_error("Cannot retrieve seat of logind session: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Cannot retrieve seat of logind session: %m");
m->my_tty = is_my_tty(m->session);
m->managed = m->my_tty && geteuid() > 0;
m->my_tty = is_my_tty(m->session);
m->managed = m->my_tty && geteuid() > 0;
@@
-234,18
+230,18
@@
static void modeset_draw(Modeset *m, const grdev_display_target *t) {
uint32_t j, k, *b;
uint8_t *l;
uint32_t j, k, *b;
uint8_t *l;
- assert(t->
fb->format == DRM_FORMAT_XRGB8888 || t->fb
->format == DRM_FORMAT_ARGB8888);
+ assert(t->
back->format == DRM_FORMAT_XRGB8888 || t->back
->format == DRM_FORMAT_ARGB8888);
assert(!t->rotate);
assert(!t->flip);
assert(!t->rotate);
assert(!t->flip);
- l = t->
fb
->maps[0];
+ l = t->
back
->maps[0];
for (j = 0; j < t->height; ++j) {
for (k = 0; k < t->width; ++k) {
b = (uint32_t*)l;
b[k] = (0xff << 24) | (m->r << 16) | (m->g << 8) | m->b;
}
for (j = 0; j < t->height; ++j) {
for (k = 0; k < t->width; ++k) {
b = (uint32_t*)l;
b[k] = (0xff << 24) | (m->r << 16) | (m->g << 8) | m->b;
}
- l += t->
fb
->strides[0];
+ l += t->
back
->strides[0];
}
}
}
}
@@
-256,9
+252,9
@@
static void modeset_render(Modeset *m, grdev_display *d) {
m->g = next_color(&m->g_up, m->g, 3);
m->b = next_color(&m->b_up, m->b, 2);
m->g = next_color(&m->g_up, m->g, 3);
m->b = next_color(&m->b_up, m->b, 2);
- GRDEV_DISPLAY_FOREACH_TARGET(d, t
, 0
) {
+ GRDEV_DISPLAY_FOREACH_TARGET(d, t) {
modeset_draw(m, t);
modeset_draw(m, t);
- grdev_display_flip_target(d, t
, 1
);
+ grdev_display_flip_target(d, t);
}
grdev_session_commit(m->grdev_session);
}
grdev_session_commit(m->grdev_session);
@@
-270,12
+266,10
@@
static void modeset_grdev_fn(grdev_session *session, void *userdata, grdev_event
switch (ev->type) {
case GRDEV_EVENT_DISPLAY_ADD:
grdev_display_enable(ev->display_add.display);
switch (ev->type) {
case GRDEV_EVENT_DISPLAY_ADD:
grdev_display_enable(ev->display_add.display);
- modeset_render(m, ev->display_add.display);
break;
case GRDEV_EVENT_DISPLAY_REMOVE:
break;
case GRDEV_EVENT_DISPLAY_CHANGE:
break;
case GRDEV_EVENT_DISPLAY_REMOVE:
break;
case GRDEV_EVENT_DISPLAY_CHANGE:
- modeset_render(m, ev->display_change.display);
break;
case GRDEV_EVENT_DISPLAY_FRAME:
modeset_render(m, ev->display_frame.display);
break;
case GRDEV_EVENT_DISPLAY_FRAME:
modeset_render(m, ev->display_frame.display);
@@
-311,17
+305,13
@@
static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
name,
modeset_grdev_fn,
m);
name,
modeset_grdev_fn,
m);
- if (r < 0) {
- log_error("Cannot create grdev session: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Cannot create grdev session: %m");
if (m->managed) {
r = sysview_session_take_control(ev->session_add.session);
if (m->managed) {
r = sysview_session_take_control(ev->session_add.session);
- if (r < 0) {
- log_error("Cannot request session control: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Cannot request session control: %m");
}
grdev_session_enable(m->grdev_session);
}
grdev_session_enable(m->grdev_session);
@@
-334,7
+324,8
@@
static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
grdev_session_restore(m->grdev_session);
grdev_session_disable(m->grdev_session);
m->grdev_session = grdev_session_free(m->grdev_session);
grdev_session_restore(m->grdev_session);
grdev_session_disable(m->grdev_session);
m->grdev_session = grdev_session_free(m->grdev_session);
- sd_event_exit(m->event, 0);
+ if (sd_event_get_exit_code(m->event, &r) == -ENODATA)
+ sd_event_exit(m->event, 0);
break;
case SYSVIEW_EVENT_SESSION_ATTACH:
d = ev->session_attach.device;
break;
case SYSVIEW_EVENT_SESSION_ATTACH:
d = ev->session_attach.device;
@@
-349,19
+340,22
@@
static int modeset_sysview_fn(sysview_context *c, void *userdata, sysview_event
if (type == SYSVIEW_DEVICE_DRM)
grdev_session_remove_drm(m->grdev_session, sysview_device_get_ud(d));
if (type == SYSVIEW_DEVICE_DRM)
grdev_session_remove_drm(m->grdev_session, sysview_device_get_ud(d));
+ break;
+ case SYSVIEW_EVENT_SESSION_REFRESH:
+ d = ev->session_refresh.device;
+ type = sysview_device_get_type(d);
+ if (type == SYSVIEW_DEVICE_DRM)
+ grdev_session_hotplug_drm(m->grdev_session, ev->session_refresh.ud);
+
break;
case SYSVIEW_EVENT_SESSION_CONTROL:
r = ev->session_control.error;
break;
case SYSVIEW_EVENT_SESSION_CONTROL:
r = ev->session_control.error;
- if (r < 0) {
- log_error("Cannot acquire session control: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Cannot acquire session control: %m");
r = ioctl(1, KDSKBMODE, K_UNICODE);
r = ioctl(1, KDSKBMODE, K_UNICODE);
- if (r < 0) {
- log_error("Cannot set K_UNICODE on stdout: %m");
- return -errno;
- }
+ if (r < 0)
+ return log_error_errno(errno, "Cannot set K_UNICODE on stdout: %m");
break;
}
break;
}
@@
-474,7
+468,7
@@
int main(int argc, char *argv[]) {
log_parse_environment();
log_open();
log_parse_environment();
log_open();
-
srand(time(NULL)
);
+
initialize_srand(
);
r = parse_argv(argc, argv);
if (r <= 0)
r = parse_argv(argc, argv);
if (r <= 0)