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/privates.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/privates.c')
-rw-r--r-- | nx-X11/programs/Xserver/dix/privates.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/nx-X11/programs/Xserver/dix/privates.c b/nx-X11/programs/Xserver/dix/privates.c index a7009054c..6c793ef97 100644 --- a/nx-X11/programs/Xserver/dix/privates.c +++ b/nx-X11/programs/Xserver/dix/privates.c @@ -42,6 +42,7 @@ from The Open Group. #include "servermd.h" #include "site.h" #include "inputstr.h" +#include "extnsionst.h" /* * See the Wrappers and devPrivates section in "Definition of the @@ -50,6 +51,63 @@ from The Open Group. */ /* + * extension private machinery + */ + +static int extensionPrivateCount; +int extensionPrivateLen; +unsigned *extensionPrivateSizes; +unsigned totalExtensionSize; + +void +ResetExtensionPrivates() +{ + extensionPrivateCount = 0; + extensionPrivateLen = 0; + free(extensionPrivateSizes); + extensionPrivateSizes = (unsigned *)NULL; + totalExtensionSize = + ((sizeof(ExtensionEntry) + sizeof(long) - 1) / sizeof(long)) * sizeof(long); +} + +int +AllocateExtensionPrivateIndex() +{ + return extensionPrivateCount++; +} + +Bool +AllocateExtensionPrivate(int index2, unsigned amount) +{ + unsigned oldamount; + + /* Round up sizes for proper alignment */ + amount = ((amount + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long); + + if (index2 >= extensionPrivateLen) + { + unsigned *nsizes; + nsizes = (unsigned *)realloc(extensionPrivateSizes, + (index2 + 1) * sizeof(unsigned)); + if (!nsizes) + return FALSE; + while (extensionPrivateLen <= index2) + { + nsizes[extensionPrivateLen++] = 0; + totalExtensionSize += sizeof(DevUnion); + } + extensionPrivateSizes = nsizes; + } + oldamount = extensionPrivateSizes[index2]; + if (amount > oldamount) + { + extensionPrivateSizes[index2] = amount; + totalExtensionSize += (amount - oldamount); + } + return TRUE; +} + +/* * client private machinery */ |