185 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright (c) 1997 Matthieu Herrb
 | |
|  *
 | |
|  * Permission to use, copy, modify, distribute, and sell this software and its
 | |
|  * documentation for any purpose is hereby granted without fee, provided that
 | |
|  * the above copyright notice appear in all copies and that both that
 | |
|  * copyright notice and this permission notice appear in supporting
 | |
|  * documentation, and that the name of Matthieu Herrb not be used in
 | |
|  * advertising or publicity pertaining to distribution of the software without
 | |
|  * specific, written prior permission.  Matthieu Herrb makes no
 | |
|  * representations about the suitability of this software for any purpose.
 | |
|  *  It is provided "as is" without express or implied warranty.
 | |
|  *
 | |
|  * MATTHIEU HERRB DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | |
|  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 | |
|  * EVENT SHALL MATTHIEU HERRB BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 | |
|  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 | |
|  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 | |
|  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | |
|  * PERFORMANCE OF THIS SOFTWARE.
 | |
|  */
 | |
| 
 | |
| #ifdef HAVE_XORG_CONFIG_H
 | |
| #include <xorg-config.h>
 | |
| #endif
 | |
| 
 | |
| #include "xf86Module.h"
 | |
| #include "xf86Opt.h"
 | |
| 
 | |
| #include <X11/Xproto.h>
 | |
| 
 | |
| #include "modinit.h"
 | |
| #include "globals.h"
 | |
| 
 | |
| static MODULESETUPPROTO(extmodSetup);
 | |
| 
 | |
| /*
 | |
|  * Array describing extensions to be initialized
 | |
|  */
 | |
| static ExtensionModule extensionModules[] = {
 | |
| #ifdef XSELINUX
 | |
|     {
 | |
| 	SELinuxExtensionInit,
 | |
| 	SELINUX_EXTENSION_NAME,
 | |
| 	&noSELinuxExtension,
 | |
| 	NULL,
 | |
| 	NULL
 | |
|     },
 | |
| #endif
 | |
| #ifdef SCREENSAVER
 | |
|     {
 | |
| 	ScreenSaverExtensionInit,
 | |
| 	ScreenSaverName,
 | |
| 	&noScreenSaverExtension,
 | |
| 	NULL,
 | |
| 	NULL
 | |
|     },
 | |
| #endif
 | |
| #ifdef XF86VIDMODE
 | |
|     {
 | |
| 	XFree86VidModeExtensionInit,
 | |
| 	XF86VIDMODENAME,
 | |
| 	&noXFree86VidModeExtension,
 | |
| 	NULL,
 | |
| 	NULL
 | |
|     },
 | |
| #endif
 | |
| #ifdef XFreeXDGA
 | |
|     {
 | |
| 	XFree86DGAExtensionInit,
 | |
| 	XF86DGANAME,
 | |
| 	&noXFree86DGAExtension,
 | |
| 	XFree86DGARegister,
 | |
| 	NULL
 | |
|     },
 | |
| #endif
 | |
| #ifdef DPMSExtension
 | |
|     {
 | |
| 	DPMSExtensionInit,
 | |
| 	DPMSExtensionName,
 | |
| 	&noDPMSExtension,
 | |
| 	NULL,
 | |
| 	NULL
 | |
|     },
 | |
| #endif
 | |
| #ifdef XV
 | |
|     {
 | |
| 	XvExtensionInit,
 | |
| 	XvName,
 | |
| 	&noXvExtension,
 | |
| 	XvRegister,
 | |
| 	NULL
 | |
|     },
 | |
|     {
 | |
|         XvMCExtensionInit,
 | |
|         XvMCName,
 | |
|         &noXvExtension,
 | |
|         NULL,
 | |
|         NULL
 | |
|     },
 | |
| #endif
 | |
| #ifdef RES
 | |
|     {
 | |
|         ResExtensionInit,
 | |
|         XRES_NAME, 
 | |
|         &noResExtension,
 | |
|         NULL,
 | |
|         NULL
 | |
|     },
 | |
| #endif
 | |
|     {				/* DON'T delete this entry ! */
 | |
| 	NULL,
 | |
| 	NULL,
 | |
| 	NULL,
 | |
| 	NULL,
 | |
| 	NULL
 | |
|     }
 | |
| };
 | |
| 
 | |
| static XF86ModuleVersionInfo VersRec =
 | |
| {
 | |
| 	"extmod",
 | |
| 	MODULEVENDORSTRING,
 | |
| 	MODINFOSTRING1,
 | |
| 	MODINFOSTRING2,
 | |
| 	XORG_VERSION_CURRENT,
 | |
| 	1, 0, 0,
 | |
| 	ABI_CLASS_EXTENSION,
 | |
| 	ABI_EXTENSION_VERSION,
 | |
| 	MOD_CLASS_EXTENSION,
 | |
| 	{0,0,0,0}
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * Data for the loader
 | |
|  */
 | |
| _X_EXPORT XF86ModuleData extmodModuleData = { &VersRec, extmodSetup, NULL };
 | |
| 
 | |
| static pointer
 | |
| extmodSetup(pointer module, pointer opts, int *errmaj, int *errmin)
 | |
| {
 | |
|     int i;
 | |
| 
 | |
|     /* XXX the option stuff here is largely a sample/test case */
 | |
| 
 | |
|     for (i = 0; extensionModules[i].name != NULL; i++) {
 | |
| 	if (opts) {
 | |
| 	    char *s;
 | |
| 	    if (asprintf(&s, "omit%s", extensionModules[i].name) != -1) {
 | |
| 		pointer o;
 | |
| 		o = xf86FindOption(opts, s);
 | |
| 		free(s);
 | |
| 		if (o) {
 | |
| 		    xf86MarkOptionUsed(o);
 | |
| 		    continue;
 | |
| 		}
 | |
| 	    }
 | |
| 	}
 | |
| 
 | |
| #ifdef XSELINUX
 | |
| 	if (! strcmp(SELINUX_EXTENSION_NAME, extensionModules[i].name)) {
 | |
| 	    pointer o;
 | |
| 	    selinuxEnforcingState = SELINUX_MODE_DEFAULT;
 | |
| 
 | |
| 	    if ((o = xf86FindOption(opts, "SELinux mode disabled"))) {
 | |
| 		xf86MarkOptionUsed(o);
 | |
| 		selinuxEnforcingState = SELINUX_MODE_DISABLED;
 | |
| 	    }
 | |
| 	    if ((o = xf86FindOption(opts, "SELinux mode permissive"))) {
 | |
| 		xf86MarkOptionUsed(o);
 | |
| 		selinuxEnforcingState = SELINUX_MODE_PERMISSIVE;
 | |
| 	    }
 | |
| 	    if ((o = xf86FindOption(opts, "SELinux mode enforcing"))) {
 | |
| 		xf86MarkOptionUsed(o);
 | |
| 		selinuxEnforcingState = SELINUX_MODE_ENFORCING;
 | |
| 	    }
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	LoadExtension(&extensionModules[i], FALSE);
 | |
|     }
 | |
|     /* Need a non-NULL return */
 | |
|     return (pointer)1;
 | |
| }
 |