Instead of making the inclusion of the registry code a global conditional, split the registry into two pieces; the bits required by the X-Resource extension (the resource names) and the bits required by the XCSECURITY extension (the protocol names). Build each set of code if the related extension is being built.
Signed-off-by: Keith Packard <[email protected]> --- configure.ac | 6 ------ dix/extension.c | 2 ++ dix/registry.c | 52 +++++++++++++++++++++++++++++++++++++++------------- dix/resource.c | 2 ++ include/registry.h | 31 +++++++------------------------ 5 files changed, 50 insertions(+), 43 deletions(-) diff --git a/configure.ac b/configure.ac index cba7d24..ce76baa 100644 --- a/configure.ac +++ b/configure.ac @@ -587,7 +587,6 @@ AC_ARG_WITH(khronos-spec-dir, AS_HELP_STRING([--with-khronos-spec-dir=PATH], [Pa [KHRONOS_SPEC_DIR=auto]) dnl Extensions. -AC_ARG_ENABLE(registry, AS_HELP_STRING([--disable-registry], [Build string registry module (default: enabled)]), [XREGISTRY=$enableval], [XREGISTRY=yes]) AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes]) AC_ARG_ENABLE(mitshm, AS_HELP_STRING([--disable-mitshm], [Build SHM extension (default: auto)]), [MITSHM=$enableval], [MITSHM=auto]) AC_ARG_ENABLE(xres, AS_HELP_STRING([--disable-xres], [Build XRes extension (default: enabled)]), [RES=$enableval], [RES=yes]) @@ -1038,11 +1037,6 @@ if test "x$XVMC" = xyes; then AC_DEFINE(XvMCExtension, 1, [Build XvMC extension]) fi -AM_CONDITIONAL(XREGISTRY, [test "x$XREGISTRY" = xyes]) -if test "x$XREGISTRY" = xyes; then - AC_DEFINE(XREGISTRY, 1, [Build registry module]) -fi - AM_CONDITIONAL(COMPOSITE, [test "x$COMPOSITE" = xyes]) if test "x$COMPOSITE" = xyes; then AC_DEFINE(COMPOSITE, 1, [Support Composite Extension]) diff --git a/dix/extension.c b/dix/extension.c index ede4bf5..6fbaa0e 100644 --- a/dix/extension.c +++ b/dix/extension.c @@ -139,7 +139,9 @@ AddExtension(const char *name, int NumEvents, int NumErrors, ext->errorLast = 0; } +#ifdef XCSECURITY RegisterExtensionNames(ext); +#endif return ext; } diff --git a/dix/registry.c b/dix/registry.c index 8b76d56..7355990 100644 --- a/dix/registry.c +++ b/dix/registry.c @@ -21,8 +21,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include <dix-config.h> #endif -#ifdef XREGISTRY - #include <stdlib.h> #include <string.h> #include <X11/X.h> @@ -31,6 +29,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "registry.h" #define BASE_SIZE 16 + +#ifdef XCSECURITY #define CORE "X11" #define FILENAME SERVER_MISC_CONFIG_PATH "/protocol.txt" @@ -42,9 +42,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. static FILE *fh; static char ***requests, **events, **errors; +static unsigned nmajor, *nminor, nevent, nerror; +#endif + +#ifdef RES static const char **resources; -static unsigned nmajor, *nminor, nevent, nerror, nresource; +static unsigned nresource; +#endif +#if defined(RES) || defined(XCSECURITY) /* * File parsing routines */ @@ -72,7 +78,9 @@ double_size(void *p, unsigned n, unsigned size) memset(*ptr + s, 0, f - s); return TRUE; } +#endif +#ifdef XCSECURITY static void RegisterRequestName(unsigned major, unsigned minor, char *name) { @@ -196,7 +204,9 @@ RegisterExtensionNames(ExtensionEntry * extEntry) free(lineobj); } } +#endif /* XCSECURITY */ +#ifdef RES /* * Registration functions */ @@ -214,11 +224,14 @@ RegisterResourceName(RESTYPE resource, const char *name) resources[resource] = name; } +#endif /* RES */ /* * Lookup functions */ +#ifdef XCSECURITY + const char * LookupRequestName(int major, int minor) { @@ -269,7 +282,9 @@ LookupErrorName(int error) return errors[error] ? errors[error] : XREGISTRY_UNKNOWN; } +#endif /* XCSECURITY */ +#ifdef RES const char * LookupResourceName(RESTYPE resource) { @@ -279,10 +294,12 @@ LookupResourceName(RESTYPE resource) return resources[resource] ? resources[resource] : XREGISTRY_UNKNOWN; } +#endif /* RES */ void dixFreeRegistry(void) { +#ifdef XCSECURITY /* Free all memory */ while (nmajor--) { while (nminor[nmajor]) @@ -299,25 +316,30 @@ dixFreeRegistry(void) while (nerror--) free(errors[nerror]); free(errors); - - free(resources); - requests = NULL; nminor = NULL; events = NULL; errors = NULL; - resources = NULL; + nmajor = nevent = nerror = 0; +#endif + +#ifdef RES + free(resources); - nmajor = nevent = nerror = nresource = 0; + resources = NULL; + nresource = 0; +#endif } void dixCloseRegistry(void) { +#ifdef XCSECURITY if (fh) { fclose(fh); fh = NULL; } +#endif } /* @@ -326,16 +348,24 @@ dixCloseRegistry(void) void dixResetRegistry(void) { +#ifdef XCSECURITY ExtensionEntry extEntry = { .name = CORE }; +#endif dixFreeRegistry(); +#ifdef XCSECURITY /* Open the protocol file */ fh = fopen(FILENAME, "r"); if (!fh) LogMessage(X_WARNING, "Failed to open protocol names file " FILENAME "\n"); + /* Add the core protocol */ + RegisterExtensionNames(&extEntry); +#endif + +#ifdef RES /* Add built-in resources */ RegisterResourceName(RT_NONE, "NONE"); RegisterResourceName(RT_WINDOW, "WINDOW"); @@ -347,9 +377,5 @@ dixResetRegistry(void) RegisterResourceName(RT_CMAPENTRY, "COLORMAP ENTRY"); RegisterResourceName(RT_OTHERCLIENT, "OTHER CLIENT"); RegisterResourceName(RT_PASSIVEGRAB, "PASSIVE GRAB"); - - /* Add the core protocol */ - RegisterExtensionNames(&extEntry); +#endif } - -#endif /* XREGISTRY */ diff --git a/dix/resource.c b/dix/resource.c index 623d862..f0f5307 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -524,8 +524,10 @@ CreateNewResourceType(DeleteType deleteFunc, const char *name) resourceTypes[next].findSubResFunc = DefaultFindSubRes; resourceTypes[next].errorValue = BadValue; +#if RES /* Called even if name is NULL, to remove any previous entry */ RegisterResourceName(next, name); +#endif return next; } diff --git a/include/registry.h b/include/registry.h index 4e54bf6..244cef5 100644 --- a/include/registry.h +++ b/include/registry.h @@ -17,18 +17,18 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define XREGISTRY_UNKNOWN "<unknown>" -#ifdef XREGISTRY - #include "resource.h" #include "extnsionst.h" /* Internal string registry - for auditing, debugging, security, etc. */ -/* - * Registration functions. The name string is not copied, so it must - * not be a stack variable. - */ +#ifdef RES +/* Functions used by the X-Resource extension */ extern _X_EXPORT void RegisterResourceName(RESTYPE type, const char *name); +extern _X_EXPORT const char *LookupResourceName(RESTYPE rtype); +#endif + +#ifdef XCSECURITY extern _X_EXPORT void RegisterExtensionNames(ExtensionEntry * ext); /* @@ -38,7 +38,7 @@ extern _X_EXPORT const char *LookupMajorName(int major); extern _X_EXPORT const char *LookupRequestName(int major, int minor); extern _X_EXPORT const char *LookupEventName(int event); extern _X_EXPORT const char *LookupErrorName(int error); -extern _X_EXPORT const char *LookupResourceName(RESTYPE rtype); +#endif /* * Setup and teardown @@ -47,21 +47,4 @@ extern _X_EXPORT void dixResetRegistry(void); extern _X_EXPORT void dixFreeRegistry(void); extern _X_EXPORT void dixCloseRegistry(void); -#else /* XREGISTRY */ - -/* Define calls away when the registry is not being built. */ - -#define RegisterResourceName(a, b) { ; } -#define RegisterExtensionNames(a) { ; } - -#define LookupMajorName(a) XREGISTRY_UNKNOWN -#define LookupRequestName(a, b) XREGISTRY_UNKNOWN -#define LookupEventName(a) XREGISTRY_UNKNOWN -#define LookupErrorName(a) XREGISTRY_UNKNOWN -#define LookupResourceName(a) XREGISTRY_UNKNOWN - -#define dixResetRegistry() { ; } -#define dixFreeRegistry() { ; } - -#endif /* XREGISTRY */ #endif /* DIX_REGISTRY_H */ -- 2.0.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
