From 05189cd6ee0cbe5dc78380f7ba3db96bfa00deb3 Mon Sep 17 00:00:00 2001 From: Dave Airlie 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