OSDN Git Service

libdrm: drmGetDeviceNameFromFd: Always return /dev/dri/ node for FreeBSD
authorEmmanuel Vadot <manu@FreeBSD.org>
Tue, 28 Apr 2020 14:33:05 +0000 (16:33 +0200)
committerEmmanuel Vadot <manu@FreeBSD.org>
Mon, 4 May 2020 19:19:58 +0000 (21:19 +0200)
Since we now always returns the /dev/dri/ node for
drmGet<nodetype>DeviceNameFromFd, be consistant with the names returned
in drmGetDeviceNameFromFd.

Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Emmanuel Vadot <manu@FreeBSD.org>
xf86drm.c

index 6fe0296..b49d42f 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -122,6 +122,7 @@ struct drm_pciinfo {
 static drmServerInfoPtr drm_server_info;
 
 static bool drmNodeIsDRM(int maj, int min);
+static char *drmGetMinorNameForFD(int fd, int type);
 
 drm_public void drmSetServerInfo(drmServerInfoPtr info)
 {
@@ -2776,24 +2777,16 @@ drm_public char *drmGetDeviceNameFromFd(int fd)
 {
 #ifdef __FreeBSD__
     struct stat sbuf;
-    char dname[SPECNAMELEN];
-    char name[SPECNAMELEN];
     int maj, min;
+    int nodetype;
 
     if (fstat(fd, &sbuf))
         return NULL;
 
     maj = major(sbuf.st_rdev);
     min = minor(sbuf.st_rdev);
-
-    if (!drmNodeIsDRM(maj, min) || !S_ISCHR(sbuf.st_mode))
-        return NULL;
-
-    if (!devname_r(sbuf.st_rdev, S_IFCHR, dname, sizeof(dname)))
-        return NULL;
-
-    snprintf(name, sizeof(name), "/dev/%s", dname);
-    return strdup(name);
+    nodetype = drmGetMinorType(maj, min);
+    return drmGetMinorNameForFD(fd, nodetype);
 #else
     char name[128];
     struct stat sbuf;