From 05189cd6ee0cbe5dc78380f7ba3db96bfa00deb3 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Thu, 18 Mar 2010 10:07:47 +1000
Subject: [PATCH] libdrm: add support for an env variable to override the drm node

This allows an environment variable to pick the device node
(may not be safe - demo hack).
---
 xf86drm.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/xf86drm.c b/xf86drm.c
index 3f2dd6a..18fd9dd 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -317,8 +317,13 @@ static int drmOpenDevice(long dev, int minor, int type)
     int             isroot  = !geteuid();
     uid_t           user    = DRM_DEV_UID;
     gid_t           group   = DRM_DEV_GID, serv_group;
-    
-    sprintf(buf, type ? DRM_DEV_NAME : DRM_CONTROL_DEV_NAME, DRM_DIR_NAME, minor);
+    char *myenv;
+
+    myenv = getenv("DRM_DEVICE_PATH");
+    if (myenv != NULL)
+      strncpy(buf, myenv, 64);
+    else
+      sprintf(buf, type ? DRM_DEV_NAME : DRM_CONTROL_DEV_NAME, DRM_DIR_NAME, minor);
     drmMsg("drmOpenDevice: node name is %s\n", buf);
 
     if (drm_server_info) {
@@ -2514,6 +2519,9 @@ char *drmGetDeviceNameFromFd(int fd)
 
 	fstat(fd, &sbuf);
 	d = sbuf.st_rdev;
+   	snprintf(name, sizeof name, "%s", getenv("DRM_DEVICE_PATH"));
+	if (stat(name, &sbuf) == 0 && sbuf.st_rdev == d)
+		goto out;
 
 	for (i = 0; i < DRM_MAX_MINOR; i++) {
 		snprintf(name, sizeof name, DRM_DEV_NAME, DRM_DIR_NAME, i);
@@ -2523,6 +2531,7 @@ char *drmGetDeviceNameFromFd(int fd)
 	if (i == DRM_MAX_MINOR)
 		return NULL;
 
+out:
 	return drmStrdup(name);
 }
 
-- 
1.6.5.2

