*** a/glx/glxdri.c 2011-02-16 14:00:53.000000000 -0600 --- b/glx/glxdri.c 2011-02-16 13:56:09.000000000 -0600 *************** *** 838,843 **** - static const char dri_driver_path[] = DRI_DRIVER_PATH; - static Bool glxDRIEnterVT (int index, int flags) --- 838,841 ---- diff -r -C2 a/glx/glxdriswrast.c b/glx/glxdriswrast.c *** a/glx/glxdriswrast.c 2011-02-16 14:00:53.000000000 -0600 --- b/glx/glxdriswrast.c 2011-02-16 13:56:29.000000000 -0600 *************** *** 448,453 **** } - static const char dri_driver_path[] = DRI_DRIVER_PATH; - static __GLXscreen * __glXDRIscreenProbe(ScreenPtr pScreen) --- 448,451 ---- diff -r -C2 a/glx/glxext.c b/glx/glxext.c *** a/glx/glxext.c 2011-02-16 14:00:54.000000000 -0600 --- b/glx/glxext.c 2011-02-16 13:58:39.000000000 -0600 *************** *** 520,521 **** --- 520,548 ---- return retval; } + + char *dri_driver_path = DRI_DRIVER_PATH; + + int GlxProcessArguments(int argc, char *argv[], int i) + { + if (strncmp(argv[i], "-dridir", 7) == 0) { + if (++i < argc) { + #if !defined(WIN32) && !defined(__CYGWIN__) + if (getuid() != geteuid()) { + LogMessage(X_WARNING, "-dridir is not available for setuid X servers\n"); + return -1; + } else + #endif + { + if (strlen(argv[i]) < PATH_MAX) { + dri_driver_path = argv[i]; + return 2; + } else { + LogMessage(X_ERROR, "-dridir pathname too long\n"); + return -1; + } + } + } + } + + return 0; + } diff -r -C2 a/glx/glxserver.h b/glx/glxserver.h *** a/glx/glxserver.h 2011-02-16 14:00:54.000000000 -0600 --- b/glx/glxserver.h 2011-02-16 14:01:44.000000000 -0600 *************** *** 264,266 **** --- 264,269 ---- GLint alignment); + extern char *dri_driver_path; + extern int GlxProcessArguments(int argc, char *argv[], int i); + #endif /* !__GLX_server_h__ */ Only in b/os: ._utils.c diff -r -C2 a/os/utils.c b/os/utils.c *** a/os/utils.c 2011-02-16 14:01:18.000000000 -0600 --- b/os/utils.c 2011-02-16 14:04:11.000000000 -0600 *************** *** 159,162 **** --- 159,163 ---- _X_EXPORT Bool noGlxExtension = FALSE; _X_EXPORT Bool noGlxVisualInit = FALSE; + extern int GlxProcessArguments(int argc, char *argv[], int i); #endif #ifdef SCREENSAVER *************** *** 854,857 **** --- 855,866 ---- } #endif + #ifdef GLXEXT + else if ((skip = GlxProcessArguments(argc,argv,i)) != 0) { + if (skip > 0) + i += skip - 1; + else + UseMsg(); + } + #endif #ifdef RLIMIT_DATA else if ( strcmp( argv[i], "-ld") == 0)