Add drmGetDeviceNameFromFd function
[glsdk/libdrm.git] / xf86drm.c
index 26dd81291ba7f178dd1ee18ad0a599c1277c9c11..364fe17df73fd30f5eddaba3098402c7e506e054 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2510,3 +2510,29 @@ int drmDropMaster(int fd)
        ret = ioctl(fd, DRM_IOCTL_DROP_MASTER, 0);
        return ret;
 }
+
+char *drmGetDeviceNameFromFd(int fd)
+{
+       char name[128];
+       struct stat sbuf;
+       dev_t d;
+       int i;
+
+       /* The whole drmOpen thing is a fiasco and we need to find a way
+        * back to just using open(2).  For now, however, lets just make
+        * things worse with even more ad hoc directory walking code to
+        * discover the device file name. */
+
+       fstat(fd, &sbuf);
+       d = sbuf.st_rdev;
+
+       for (i = 0; i < DRM_MAX_MINOR; i++) {
+               snprintf(name, sizeof name, DRM_DEV_NAME, DRM_DIR_NAME, i);
+               if (stat(name, &sbuf) == 0 && sbuf.st_rdev == d)
+                       break;
+       }
+       if (i == DRM_MAX_MINOR)
+               return NULL;
+
+       return drmStrdup(name);
+}