123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- /*
- Copyright 1993, 1998 The Open Group
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation.
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- Except as contained in this notice, the name of The Open Group shall
- not be used in advertising or otherwise to promote the sale, use or
- other dealings in this Software without prior written authorization
- from The Open Group.
- */
- #ifdef HAVE_DIX_CONFIG_H
- #include <dix-config.h>
- #endif
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "misc.h"
- #include "os.h"
- #include "windowstr.h"
- #include "resource.h"
- #include "dixstruct.h"
- #include "gcstruct.h"
- #include "colormapst.h"
- #include "servermd.h"
- #include "site.h"
- #include "inputstr.h"
- #include "extnsionst.h"
- /*
- * See the Wrappers and devPrivates section in "Definition of the
- * Porting Layer for the X v11 Sample Server" (doc/Server/ddx.tbl.ms)
- * for information on how to use devPrivates.
- */
- /*
- * 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);
- }
- /*
- * client private machinery
- */
- static int clientPrivateCount;
- int clientPrivateLen;
- unsigned *clientPrivateSizes;
- unsigned totalClientSize;
- void
- ResetClientPrivates()
- {
- clientPrivateCount = 0;
- clientPrivateLen = 0;
- free(clientPrivateSizes);
- clientPrivateSizes = (unsigned *) NULL;
- totalClientSize =
- ((sizeof(ClientRec) + sizeof(long) - 1) / sizeof(long)) * sizeof(long);
- }
- _X_EXPORT int
- AllocateClientPrivateIndex()
- {
- return clientPrivateCount++;
- }
- _X_EXPORT Bool
- AllocateClientPrivate(int index2, unsigned amount)
- {
- unsigned oldamount;
- /* Round up sizes for proper alignment */
- amount = ((amount + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long);
- if (index2 >= clientPrivateLen) {
- unsigned *nsizes;
- nsizes = (unsigned *) realloc(clientPrivateSizes,
- (index2 + 1) * sizeof(unsigned));
- if (!nsizes)
- return FALSE;
- while (clientPrivateLen <= index2) {
- nsizes[clientPrivateLen++] = 0;
- totalClientSize += sizeof(DevUnion);
- }
- clientPrivateSizes = nsizes;
- }
- oldamount = clientPrivateSizes[index2];
- if (amount > oldamount) {
- clientPrivateSizes[index2] = amount;
- totalClientSize += (amount - oldamount);
- }
- return TRUE;
- }
- /*
- * screen private machinery
- */
- int screenPrivateCount;
- void
- ResetScreenPrivates()
- {
- screenPrivateCount = 0;
- }
- /* this can be called after some screens have been created,
- * so we have to worry about resizing existing devPrivates
- */
- _X_EXPORT int
- AllocateScreenPrivateIndex()
- {
- int idx;
- int i;
- ScreenPtr pScreen;
- DevUnion *nprivs;
- idx = screenPrivateCount++;
- for (i = 0; i < screenInfo.numScreens; i++) {
- pScreen = screenInfo.screens[i];
- nprivs = (DevUnion *) realloc(pScreen->devPrivates,
- screenPrivateCount * sizeof(DevUnion));
- if (!nprivs) {
- screenPrivateCount--;
- return -1;
- }
- /* Zero the new private */
- bzero(&nprivs[idx], sizeof(DevUnion));
- pScreen->devPrivates = nprivs;
- }
- return idx;
- }
- /*
- * window private machinery
- */
- static int windowPrivateCount;
- void
- ResetWindowPrivates()
- {
- windowPrivateCount = 0;
- }
- _X_EXPORT int
- AllocateWindowPrivateIndex()
- {
- return windowPrivateCount++;
- }
- _X_EXPORT Bool
- AllocateWindowPrivate(register ScreenPtr pScreen, int index2, unsigned amount)
- {
- unsigned oldamount;
- /* Round up sizes for proper alignment */
- amount = ((amount + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long);
- if (index2 >= pScreen->WindowPrivateLen) {
- unsigned *nsizes;
- nsizes = (unsigned *) realloc(pScreen->WindowPrivateSizes,
- (index2 + 1) * sizeof(unsigned));
- if (!nsizes)
- return FALSE;
- while (pScreen->WindowPrivateLen <= index2) {
- nsizes[pScreen->WindowPrivateLen++] = 0;
- pScreen->totalWindowSize += sizeof(DevUnion);
- }
- pScreen->WindowPrivateSizes = nsizes;
- }
- oldamount = pScreen->WindowPrivateSizes[index2];
- if (amount > oldamount) {
- pScreen->WindowPrivateSizes[index2] = amount;
- pScreen->totalWindowSize += (amount - oldamount);
- }
- return TRUE;
- }
- /*
- * gc private machinery
- */
- static int gcPrivateCount;
- void
- ResetGCPrivates()
- {
- gcPrivateCount = 0;
- }
- _X_EXPORT int
- AllocateGCPrivateIndex()
- {
- return gcPrivateCount++;
- }
- _X_EXPORT Bool
- AllocateGCPrivate(register ScreenPtr pScreen, int index2, unsigned amount)
- {
- unsigned oldamount;
- /* Round up sizes for proper alignment */
- amount = ((amount + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long);
- if (index2 >= pScreen->GCPrivateLen) {
- unsigned *nsizes;
- nsizes = (unsigned *) realloc(pScreen->GCPrivateSizes,
- (index2 + 1) * sizeof(unsigned));
- if (!nsizes)
- return FALSE;
- while (pScreen->GCPrivateLen <= index2) {
- nsizes[pScreen->GCPrivateLen++] = 0;
- pScreen->totalGCSize += sizeof(DevUnion);
- }
- pScreen->GCPrivateSizes = nsizes;
- }
- oldamount = pScreen->GCPrivateSizes[index2];
- if (amount > oldamount) {
- pScreen->GCPrivateSizes[index2] = amount;
- pScreen->totalGCSize += (amount - oldamount);
- }
- return TRUE;
- }
- /*
- * pixmap private machinery
- */
- static int pixmapPrivateCount;
- void
- ResetPixmapPrivates()
- {
- pixmapPrivateCount = 0;
- }
- _X_EXPORT int
- AllocatePixmapPrivateIndex()
- {
- return pixmapPrivateCount++;
- }
- _X_EXPORT Bool
- AllocatePixmapPrivate(register ScreenPtr pScreen, int index2, unsigned amount)
- {
- unsigned oldamount;
- /* Round up sizes for proper alignment */
- amount = ((amount + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long);
- if (index2 >= pScreen->PixmapPrivateLen) {
- unsigned *nsizes;
- nsizes = (unsigned *) realloc(pScreen->PixmapPrivateSizes,
- (index2 + 1) * sizeof(unsigned));
- if (!nsizes)
- return FALSE;
- while (pScreen->PixmapPrivateLen <= index2) {
- nsizes[pScreen->PixmapPrivateLen++] = 0;
- pScreen->totalPixmapSize += sizeof(DevUnion);
- }
- pScreen->PixmapPrivateSizes = nsizes;
- }
- oldamount = pScreen->PixmapPrivateSizes[index2];
- if (amount > oldamount) {
- pScreen->PixmapPrivateSizes[index2] = amount;
- pScreen->totalPixmapSize += (amount - oldamount);
- }
- pScreen->totalPixmapSize = BitmapBytePad(pScreen->totalPixmapSize * 8);
- return TRUE;
- }
- /*
- * colormap private machinery
- */
- int colormapPrivateCount;
- void
- ResetColormapPrivates()
- {
- colormapPrivateCount = 0;
- }
- /*
- * device private machinery
- */
- static int devicePrivateIndex = 0;
- void
- ResetDevicePrivateIndex(void)
- {
- devicePrivateIndex = 0;
- }
|