diff options
author | Ulrich Sibiller <uli42@gmx.de> | 2018-01-23 00:47:38 +0100 |
---|---|---|
committer | Mihai Moldovan <ionic@ionic.de> | 2018-02-26 05:07:49 +0100 |
commit | 485d626769c53c7d72ffad2f4e8623d6ce897662 (patch) | |
tree | ece8a3df05c586f6782d871fe5a5c9c4617d70f1 /nx-X11/programs/Xserver/dix/extension.c | |
parent | 2853ab292345ef5d1c690289f9d55a0ccdf32450 (diff) | |
download | nx-libs-485d626769c53c7d72ffad2f4e8623d6ce897662.tar.gz nx-libs-485d626769c53c7d72ffad2f4e8623d6ce897662.tar.bz2 nx-libs-485d626769c53c7d72ffad2f4e8623d6ce897662.zip |
Lift dix to xorg-xserver-1.3.0.0 state
Diffstat (limited to 'nx-X11/programs/Xserver/dix/extension.c')
-rw-r--r-- | nx-X11/programs/Xserver/dix/extension.c | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/nx-X11/programs/Xserver/dix/extension.c b/nx-X11/programs/Xserver/dix/extension.c index a1701281d..763f57337 100644 --- a/nx-X11/programs/Xserver/dix/extension.c +++ b/nx-X11/programs/Xserver/dix/extension.c @@ -75,6 +75,39 @@ int lastEvent = EXTENSION_EVENT_BASE; static int lastError = FirstExtensionError; static unsigned int NumExtensions = 0; +extern int extensionPrivateLen; +extern unsigned *extensionPrivateSizes; +extern unsigned totalExtensionSize; + +static void +InitExtensionPrivates(ExtensionEntry *ext) +{ + register char *ptr; + DevUnion *ppriv; + register unsigned *sizes; + register unsigned size; + register int i; + + if (totalExtensionSize == sizeof(ExtensionEntry)) + ppriv = (DevUnion *)NULL; + else + ppriv = (DevUnion *)(ext + 1); + + ext->devPrivates = ppriv; + sizes = extensionPrivateSizes; + ptr = (char *)(ppriv + extensionPrivateLen); + for (i = extensionPrivateLen; --i >= 0; ppriv++, sizes++) + { + if ( (size = *sizes) ) + { + ppriv->ptr = (void *)ptr; + ptr += size; + } + else + ppriv->ptr = (void *)NULL; + } +} + ExtensionEntry * AddExtension(char *name, int NumEvents, int NumErrors, int (*MainProc)(ClientPtr c1), @@ -91,9 +124,11 @@ AddExtension(char *name, int NumEvents, int NumErrors, (unsigned)(lastError + NumErrors > LAST_ERROR)) return((ExtensionEntry *) NULL); - ext = (ExtensionEntry *) malloc(sizeof(ExtensionEntry)); + ext = (ExtensionEntry *) malloc(totalExtensionSize); if (!ext) return((ExtensionEntry *) NULL); + bzero(ext, totalExtensionSize); + InitExtensionPrivates(ext); ext->name = (char *)malloc(strlen(name) + 1); ext->num_aliases = 0; ext->aliases = (char **)NULL; @@ -206,6 +241,20 @@ CheckExtension(const char *extname) return NULL; } +/* + * Added as part of Xace. + */ +ExtensionEntry * +GetExtensionEntry(int major) +{ + if (major < EXTENSION_BASE) + return NULL; + major -= EXTENSION_BASE; + if (major >= NumExtensions) + return NULL; + return extensions[major]; +} + void DeclareExtensionSecurity(char *extname, Bool secure) { |