aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/dix/extension.c
diff options
context:
space:
mode:
authorMihai Moldovan <ionic@ionic.de>2018-02-26 05:12:20 +0100
committerMihai Moldovan <ionic@ionic.de>2018-02-26 05:12:20 +0100
commita9787fc2e79065e8f56fdace41f4e565667c22bb (patch)
tree19559f26bed90d12689ee47145b27fcd7619820a /nx-X11/programs/Xserver/dix/extension.c
parentb40dec982d17b010cedc183ebdc4c75ca7de785f (diff)
parent6dcfcbabe6b87467a6f811d0dc03efba7bfce8e4 (diff)
downloadnx-libs-a9787fc2e79065e8f56fdace41f4e565667c22bb.tar.gz
nx-libs-a9787fc2e79065e8f56fdace41f4e565667c22bb.tar.bz2
nx-libs-a9787fc2e79065e8f56fdace41f4e565667c22bb.zip
Merge branch 'uli42-pr/update_dix' into 3.6.x
Attributes GH PR #646: https://github.com/ArcticaProject/nx-libs/pull/646
Diffstat (limited to 'nx-X11/programs/Xserver/dix/extension.c')
-rw-r--r--nx-X11/programs/Xserver/dix/extension.c51
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)
{