... and use drmGetNodeTypeFromFd where possible. Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com> --- src/nouveau_dri2.c | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c index ce6f53e..d3cce4e 100644 --- a/src/nouveau_dri2.c +++ b/src/nouveau_dri2.c @@ -1020,24 +1020,12 @@ nouveau_dri2_fini(ScreenPtr pScreen) } #ifdef DRI3 -static int is_render_node(int fd, struct stat *st) -{ - if (fstat(fd, st)) - return 0; - - if (!S_ISCHR(st->st_mode)) - return 0; - - return st->st_rdev & 0x80; - } - static int nouveau_dri3_open(ScreenPtr screen, RRProviderPtr provider, int *out) { ScrnInfoPtr pScrn = xf86ScreenToScrn(screen); NVPtr pNv = NVPTR(pScrn); int fd = -1; - struct stat buff; #ifdef O_CLOEXEC fd = open(pNv->render_node, O_RDWR | O_CLOEXEC); @@ -1047,11 +1035,7 @@ nouveau_dri3_open(ScreenPtr screen, RRProviderPtr provider, int *out) if (fd < 0) return -BadAlloc; - if (fstat(fd, &buff)) { - close(fd); - return -BadMatch; - } - if (!is_render_node(fd, &buff)) { + if (drmGetNodeTypeFromFd(fd) != DRM_NODE_RENDER) { drm_magic_t magic; if (drmGetMagic(fd, &magic) || drmAuthMagic(pNv->dev->fd, magic)) { @@ -1124,15 +1108,13 @@ nouveau_dri3_screen_init(ScreenPtr screen) #ifdef DRI3 ScrnInfoPtr pScrn = xf86ScreenToScrn(screen); NVPtr pNv = NVPTR(pScrn); - struct stat master, render; char *buf; - if (is_render_node(pNv->dev->fd, &master)) + if (drmGetNodeTypeFromFd(pNv->dev->fd) == DRM_NODE_RENDER) return TRUE; buf = drmGetRenderDeviceNameFromFd(pNv->dev->fd); - if (buf && stat(buf, &render) == 0 && - master.st_mode == render.st_mode) { + if (buf) { pNv->render_node = buf; return dri3_screen_init(screen, &nouveau_dri3_screen_info); } else -- 2.4.4