swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit 20c18561761ad99a9c1ef34005aef1ef1e5fce9f
parent 600a87459ff518879ffb1023ed4a5e385bfadbae
Author: Michael Forney <mforney@mforney.org>
Date:   Sat, 10 Nov 2018 00:34:10 -0800

drm: Use libdrm utility function to get render node device name

Fixes #46.

Diffstat:
Mlibswc/drm.c | 30++++++++----------------------
1 file changed, 8 insertions(+), 22 deletions(-)

diff --git a/libswc/drm.c b/libswc/drm.c @@ -47,7 +47,7 @@ struct swc_drm swc_drm; static struct { - char path[128]; + char *path; uint32_t taken_ids; @@ -252,38 +252,23 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id) bool drm_initialize(void) { - struct stat master, render; + char primary[128]; - if (!find_primary_drm_device(drm.path, sizeof(drm.path))) { + if (!find_primary_drm_device(primary, sizeof(primary))) { ERROR("Could not find DRM device\n"); goto error0; } drm.taken_ids = 0; - swc.drm->fd = launch_open_device(drm.path, O_RDWR | O_CLOEXEC); - + swc.drm->fd = launch_open_device(primary, O_RDWR | O_CLOEXEC); if (swc.drm->fd == -1) { ERROR("Could not open DRM device at %s\n", drm.path); goto error0; } - if (fstat(swc.drm->fd, &master) != 0) { - ERROR("Could not fstat DRM FD: %s\n", strerror(errno)); - goto error1; - } - - if (snprintf(drm.path, sizeof(drm.path), "/dev/dri/renderD%d", minor(master.st_rdev) + 0x80) >= sizeof(drm.path)) { - ERROR("Render node path is too long"); - goto error1; - } - - if (stat(drm.path, &render) != 0) { - ERROR("stat %s failed (does your kernel support render nodes?): %s\n", drm.path, strerror(errno)); - goto error1; - } - - if (master.st_mode != render.st_mode || minor(master.st_rdev) + 0x80 != minor(render.st_rdev)) { - ERROR("Render node does not have expected mode or minor number\n"); + drm.path = drmGetRenderDeviceNameFromFd(swc.drm->fd); + if (!drm.path) { + ERROR("Could not determine render node path\n"); goto error1; } @@ -335,6 +320,7 @@ drm_finalize(void) wl_event_source_remove(drm.event_source); wld_destroy_renderer(swc.drm->renderer); wld_destroy_context(swc.drm->context); + free(drm.path); close(swc.drm->fd); }