[PATCH 42/42] Remove separate ExtensionToggle list from miinitext [WIP]

Peter Hutterer peter.hutterer at who-t.net
Tue Dec 6 16:20:32 PST 2011


On Fri, Dec 02, 2011 at 11:27:50AM +0000, Daniel Stone wrote:
> miinitext.c had two duplicate extension + disable pointer lists, one of
> which was used for extension init, the other of which was used to toggle
> extensions on and off via the command line or xorg.conf.  Merge these
> into one.
> 
> WIP: This only works for static extensions, those added later (GLX,
>      DGA, VidMode) or added by the DDX can't be enabled/disabled.

any plans to fix this? If so, finishing the WIP to merge it as full patch
would be useful.

> Signed-off-by: Daniel Stone <daniel at fooishbar.org>
> ---
>  mi/miinitext.c |  159 +++++++++++++++-----------------------------------------
>  1 files changed, 43 insertions(+), 116 deletions(-)
> 
> diff --git a/mi/miinitext.c b/mi/miinitext.c
> index 07d47e7..d5cf262 100644
> --- a/mi/miinitext.c
> +++ b/mi/miinitext.c
> @@ -112,122 +112,6 @@ SOFTWARE.
>  #include "micmap.h"
>  #include "globals.h"
>  
> -/* The following is only a small first step towards run-time
> - * configurable extensions.
> - */
> -typedef struct {
> -    const char *name;
> -    Bool *disablePtr;
> -} ExtensionToggle;
> -
> -static ExtensionToggle ExtensionToggleList[] =
> -{
> -    /* sort order is extension name string as shown in xdpyinfo */
> -    { "Generic Events", &noGEExtension },
> -#ifdef COMPOSITE
> -    { "Composite", &noCompositeExtension },
> -#endif
> -#ifdef DAMAGE
> -    { "DAMAGE", &noDamageExtension },
> -#endif
> -#ifdef DBE
> -    { "DOUBLE-BUFFER", &noDbeExtension },
> -#endif
> -#ifdef DPMSExtension
> -    { "DPMS", &noDPMSExtension },
> -#endif
> -#ifdef GLXEXT
> -    { "GLX", &noGlxExtension },
> -#endif
> -#ifdef SCREENSAVER
> -    { "MIT-SCREEN-SAVER", &noScreenSaverExtension },
> -#endif
> -#ifdef MITSHM
> -    { SHMNAME, &noMITShmExtension },
> -#endif
> -#ifdef RANDR
> -    { "RANDR", &noRRExtension },
> -#endif
> -    { "RENDER", &noRenderExtension },
> -#ifdef XCSECURITY
> -    { "SECURITY", &noSecurityExtension },
> -#endif
> -#ifdef RES
> -    { "X-Resource", &noResExtension },
> -#endif
> -#ifdef XF86BIGFONT
> -    { "XFree86-Bigfont", &noXFree86BigfontExtension },
> -#endif
> -#ifdef XFreeXDGA
> -    { "XFree86-DGA", &noXFree86DGAExtension },
> -#endif
> -#ifdef XF86DRI
> -    { "XFree86-DRI", &noXFree86DRIExtension },
> -#endif
> -#ifdef XF86VIDMODE
> -    { "XFree86-VidModeExtension", &noXFree86VidModeExtension },
> -#endif
> -#ifdef XFIXES
> -    { "XFIXES", &noXFixesExtension },
> -#endif
> -#ifdef PANORAMIX
> -    { "XINERAMA", &noPanoramiXExtension },
> -#endif
> -    { "XInputExtension", NULL },
> -    { "XKEYBOARD", NULL },
> -#ifdef XSELINUX
> -    { "SELinux", &noSELinuxExtension },
> -#endif
> -    { "XTEST", &noTestExtensions },
> -#ifdef XV
> -    { "XVideo", &noXvExtension },
> -#endif
> -    { NULL, NULL }
> -};
> -
> -Bool EnableDisableExtension(const char *name, Bool enable)
> -{
> -    ExtensionToggle *ext = &ExtensionToggleList[0];
> -
> -    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
> -	if (strcmp(name, ext->name) == 0) {
> -	    if (ext->disablePtr != NULL) {
> -		*ext->disablePtr = !enable;
> -		return TRUE;
> -	    } else {
> -		/* Extension is always on, impossible to disable */
> -		return enable; /* okay if they wanted to enable,
> -				  fail if they tried to disable */
> -	    }
> -	}
> -    }
> -
> -    return FALSE;
> -}
> -
> -void EnableDisableExtensionError(const char *name, Bool enable)
> -{
> -    ExtensionToggle *ext = &ExtensionToggleList[0];
> -    Bool found = FALSE;
> -
> -    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
> -	if ((strcmp(name, ext->name) == 0) && (ext->disablePtr == NULL)) {
> -	    ErrorF("[mi] Extension \"%s\" can not be disabled\n", name);
> -	    found = TRUE;
> -	    break;
> -	}
> -    }
> -    if (found == FALSE)
> -	ErrorF("[mi] Extension \"%s\" is not recognized\n", name);
> -    ErrorF("[mi] Only the following extensions can be run-time %s:\n",
> -	   enable ? "enabled" : "disabled");
> -    for (ext = &ExtensionToggleList[0]; ext->name != NULL; ext++) {
> -	if (ext->disablePtr != NULL) {
> -	    ErrorF("[mi]    %s\n", ext->name);
> -	}
> -    }
> -}
> -
>  /* List of built-in (statically linked) extensions */
>  static ExtensionModule staticExtensions[] = {
>      { GEExtensionInit, "Generic Event Extension", &noGEExtension },
> @@ -291,6 +175,49 @@ static ExtensionModule staticExtensions[] = {
>      { NULL, NULL, NULL }
>  };
>  
> +Bool EnableDisableExtension(const char *name, Bool enable)
> +{
> +    ExtensionModule *ext;
> +
> +    for (ext = &staticExtensions[0]; ext->name != NULL; ext++) {
> +	if (strcmp(name, ext->name) == 0) {
> +	    if (ext->disablePtr != NULL) {
> +		*ext->disablePtr = !enable;
> +		return TRUE;
> +	    } else {
> +		/* Extension is always on, impossible to disable */
> +		return enable; /* okay if they wanted to enable,
> +				  fail if they tried to disable */
> +	    }
> +	}
> +    }
> +
> +    return FALSE;
> +}
> +
> +void EnableDisableExtensionError(const char *name, Bool enable)
> +{
> +    ExtensionModule *ext;
> +    Bool found = FALSE;
> +
> +    for (ext = &staticExtensions[0]; ext->name != NULL; ext++) {
> +	if ((strcmp(name, ext->name) == 0) && (ext->disablePtr == NULL)) {
> +	    ErrorF("[mi] Extension \"%s\" can not be disabled\n", name);
> +	    found = TRUE;
> +	    break;
> +	}
> +    }
> +    if (found == FALSE)
> +	ErrorF("[mi] Extension \"%s\" is not recognized\n", name);
> +    ErrorF("[mi] Only the following extensions can be run-time %s:\n",
> +	   enable ? "enabled" : "disabled");
> +    for (ext = &staticExtensions[0]; ext->name != NULL; ext++) {
> +	if (ext->disablePtr != NULL) {
> +	    ErrorF("[mi]    %s\n", ext->name);
> +	}
> +    }
> +}
> +
>  static ExtensionModule *ExtensionModuleList = NULL;
>  static int numExtensionModules = 0;

I don't know the code-flow here but shouldn't the list of extension only be
printed when we fail to disable one?

Cheers,
  Peter


More information about the xorg-devel mailing list