From 85ea408e38f452bcf9109f14fd1016d159692a99 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 27 Nov 2006 18:07:16 +1030 Subject: [PATCH] mi: malloc checks for misprite and midispcur, code cleanup removed IsMPDev() --- Changelog | 16 +++++++- dix/events.c | 40 +++++++++--------- mi/midispcur.c | 40 +++++++++--------- mi/mipointer.c | 7 ---- mi/misprite.c | 108 ++++++++++++++++++++++++------------------------- 5 files changed, 106 insertions(+), 105 deletions(-) diff --git a/Changelog b/Changelog index b73e93a40..5482251c4 100644 --- a/Changelog +++ b/Changelog @@ -14,12 +14,24 @@ Files: ____________________________________________________________ -mi: mipointer.c cleanup, reducing code duplication, using MPHasCursor() - instead of IsMPDev() +mi: mipointer.c cleanup, reducing code duplication, using MPHasCursor(), + removing IsMPDev() Files: mi/mipointer.c +____________________________________________________________ + +mi: malloc checks for misprite and midispcur, code cleanup + removed IsMPDev() + +Files: + mi/misprite.c + mi/mipointer.c + mi/midispcur.c + dix/events.c + + == 23.11.06 == mi: closing memory leak, miPointer is freed in miPointerCloseScreen bugfix: uninitialized pPointer in miPointerGetPosition ifndef MPX diff --git a/dix/events.c b/dix/events.c index d3b0e58bc..27f42e1ba 100644 --- a/dix/events.c +++ b/dix/events.c @@ -259,9 +259,9 @@ typedef struct { static SpritePtr sprite; /* info about the cursor sprite */ #ifdef MPX -static SpritePtr mpsprites; /* info about the MPX sprites */ +#define MPXDBG(...) fprintf (stderr, "MPX: " __VA_ARGS__) -extern BOOL IsMPDev(DeviceIntPtr dev); +static SpritePtr mpsprites; /* info about the MPX sprites */ /** * True for the core pointer and any MPX device. @@ -371,7 +371,7 @@ XineramaSetCursorPosition( SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -416,7 +416,7 @@ XineramaConstrainCursor(DeviceIntPtr pDev) BoxRec newBox; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -445,7 +445,7 @@ XineramaCheckPhysLimits( if (!cursor) return; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -583,7 +583,7 @@ XineramaCheckMotion(xEvent *xE, DeviceIntPtr pDev) SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -704,7 +704,7 @@ XineramaChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor) SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -748,7 +748,7 @@ ConfineToShape(DeviceIntPtr pDev, RegionPtr shape, int *px, int *py) int incx = 1, incy = 1; SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -794,7 +794,7 @@ CheckPhysLimits( SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -924,7 +924,7 @@ PointerConfinedToScreen(DeviceIntPtr pDev) { SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif return pSprite->confined; @@ -936,7 +936,7 @@ ChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor) SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -979,7 +979,7 @@ PostNewCursor(DeviceIntPtr pDev) SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -1018,7 +1018,7 @@ _X_EXPORT WindowPtr GetSpriteWindow(DeviceIntPtr pDev) { #ifdef MPX - if(IsMPDev(pDev)) + if(MPHasCursor(pDev)) return mpsprites[pDev->id].win; #endif @@ -1036,7 +1036,7 @@ GetSpritePosition(DeviceIntPtr pDev, int *px, int *py) { SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif *px = pSprite->hotPhys.x; @@ -1860,7 +1860,7 @@ FixUpEventFromWindow( { SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -2094,7 +2094,7 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev) SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -2131,7 +2131,7 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev) xeviehot.y = pSprite->hot.y; #endif pSprite->hotPhys = pSprite->hot; -#ifndef MPX /* XXX ndef!! */ +#if !defined MPX if ((pSprite->hotPhys.x != XE_KBPTR.rootX) || (pSprite->hotPhys.y != XE_KBPTR.rootY)) { @@ -2177,7 +2177,7 @@ WindowsRestructured() DeviceIntPtr pDev = inputInfo.devices; while(pDev) { - if (pDev != inputInfo.keyboard) + if (MPHasCursor(pDev)) CheckMotion((xEvent *)NULL, pDev); pDev = pDev->next; } @@ -2318,7 +2318,7 @@ NewCurrentScreen(DeviceIntPtr pDev, ScreenPtr newScreen, int x, int y) { SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(pDev)) + if (MPHasCursor(pDev)) pSprite = &mpsprites[pDev->id]; #endif @@ -3051,7 +3051,7 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count SpritePtr pSprite = sprite; #ifdef MPX - if (IsMPDev(mouse)) + if (MPHasCursor(mouse)) pSprite = &mpsprites[mouse->id]; #endif diff --git a/mi/midispcur.c b/mi/midispcur.c index 514fae88d..0b4ef49d6 100644 --- a/mi/midispcur.c +++ b/mi/midispcur.c @@ -139,6 +139,7 @@ miDCInitialize (pScreen, screenFuncs) miPointerScreenFuncPtr screenFuncs; { miDCScreenPtr pScreenPriv; + miDCBufferPtr pBuffer; if (miDCGeneration != serverGeneration) { @@ -154,36 +155,33 @@ miDCInitialize (pScreen, screenFuncs) /* * initialize the entire private structure to zeros */ +#if !defined MPX pScreenPriv->pCoreBuffer = (miDCBufferPtr)xalloc(sizeof(miDCBufferRec)); - - pScreenPriv->pCoreBuffer->pSourceGC = - pScreenPriv->pCoreBuffer->pMaskGC = - pScreenPriv->pCoreBuffer->pSaveGC = - pScreenPriv->pCoreBuffer->pRestoreGC = - pScreenPriv->pCoreBuffer->pMoveGC = - pScreenPriv->pCoreBuffer->pPixSourceGC = - pScreenPriv->pCoreBuffer->pPixMaskGC = NULL; -#ifdef ARGB_CURSOR - pScreenPriv->pCoreBuffer->pRootPicture = NULL; - pScreenPriv->pCoreBuffer->pTempPicture = NULL; -#endif - - pScreenPriv->pCoreBuffer->pSave = pScreenPriv->pCoreBuffer->pTemp = NULL; - -#ifdef MPX + if (!pScreenPriv->pCoreBuffer) + { + xfree((pointer)pScreenPriv); + return FALSE; + } + pBuffer = pScreenPriv->pCoreBuffer; +#else /* ifdef MPX */ { int mpBufferIdx = 0; pScreenPriv->pMPBuffers = (miDCBufferPtr)xalloc(MAX_DEVICES * sizeof(miDCBufferRec)); - + if (!pScreenPriv->pMPBuffers) + { + xfree((pointer)pScreenPriv); + return FALSE; + } + /* virtual core pointer ID is 1 */ - xfree(pScreenPriv->pCoreBuffer); pScreenPriv->pCoreBuffer = &pScreenPriv->pMPBuffers[1]; - while (mpBufferIdx < MAX_DEVICES) + while(mpBufferIdx < MAX_DEVICES) { - miDCBufferPtr pBuffer = &pScreenPriv->pMPBuffers[mpBufferIdx]; + pBuffer = &pScreenPriv->pMPBuffers[mpBufferIdx]; +#endif pBuffer->pSourceGC = pBuffer->pMaskGC = pBuffer->pSaveGC = @@ -198,11 +196,13 @@ miDCInitialize (pScreen, screenFuncs) pBuffer->pSave = pBuffer->pTemp = NULL; +#ifdef MPX mpBufferIdx++; } } #endif + pScreenPriv->CloseScreen = pScreen->CloseScreen; pScreen->CloseScreen = miDCCloseScreen; diff --git a/mi/mipointer.c b/mi/mipointer.c index db9a6f888..6ccc7299d 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -71,13 +71,6 @@ static miPointerPtr miPointer; */ static miPointerRec miMPPointers[MAX_DEVICES]; - -/* Check if the given device is a MP device. */ -_X_EXPORT Bool -IsMPDev(DeviceIntPtr pDev) -{ - return (pDev && pDev->isMPDev && pDev->id < MAX_DEVICES); -} #endif static Bool miPointerRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, diff --git a/mi/misprite.c b/mi/misprite.c index e51599e63..ec90ad2dc 100644 --- a/mi/misprite.c +++ b/mi/misprite.c @@ -187,11 +187,9 @@ miSpriteInitialize (pScreen, cursorFuncs, screenFuncs) miSpriteCursorFuncPtr cursorFuncs; miPointerScreenFuncPtr screenFuncs; { -#ifdef MPX - int mpCursorIdx = 0; -#endif miSpriteScreenPtr pScreenPriv; VisualPtr pVisual; + miCursorInfoPtr pCursorInfo; if (!DamageSetup (pScreen)) return FALSE; @@ -239,73 +237,71 @@ miSpriteInitialize (pScreen, cursorFuncs, screenFuncs) pScreenPriv->BlockHandler = pScreen->BlockHandler; +#if !defined MPX pScreenPriv->cp = (miCursorInfoPtr)xalloc(sizeof(miCursorInfoRec)); - pScreenPriv->cp->pCursor = NULL; - pScreenPriv->cp->x = 0; - pScreenPriv->cp->y = 0; - pScreenPriv->cp->isUp = FALSE; - pScreenPriv->cp->shouldBeUp = FALSE; - pScreenPriv->cp->pCacheWin = NullWindow; - pScreenPriv->cp->isInCacheWin = FALSE; - pScreenPriv->cp->checkPixels = TRUE; - pScreenPriv->cp->pInstalledMap = NULL; - pScreenPriv->cp->pColormap = NULL; - pScreenPriv->cp->colors[SOURCE_COLOR].red = 0; - pScreenPriv->cp->colors[SOURCE_COLOR].green = 0; - pScreenPriv->cp->colors[SOURCE_COLOR].blue = 0; - pScreenPriv->cp->colors[MASK_COLOR].red = 0; - pScreenPriv->cp->colors[MASK_COLOR].green = 0; - pScreenPriv->cp->colors[MASK_COLOR].blue = 0; + if (!pScreenPriv->cp) + { + xfree((pointer)pScreenPriv); + return FALSE; + } + pCursorInfo = pScreenPriv->cp; +#else + /* alloc and zero memory for all MPX cursors */ + pScreenPriv->mpCursors = (miCursorInfoPtr)xalloc(MAX_DEVICES * sizeof(miCursorInfoRec)); + if (!pScreenPriv->mpCursors) + { + xfree((pointer)pScreenPriv->cp); + xfree((pointer)pScreenPriv); + return FALSE; + } + pScreenPriv->cp = &(pScreenPriv->mpCursors[1]); + + { + int mpCursorIdx = 0; + while (mpCursorIdx < MAX_DEVICES) + { + pCursorInfo = &(pScreenPriv->mpCursors[mpCursorIdx]); +#endif + + pCursorInfo->pCursor = NULL; + pCursorInfo->x = 0; + pCursorInfo->y = 0; + pCursorInfo->isUp = FALSE; + pCursorInfo->shouldBeUp = FALSE; + pCursorInfo->pCacheWin = NullWindow; + pCursorInfo->isInCacheWin = FALSE; + pCursorInfo->checkPixels = TRUE; + pCursorInfo->pInstalledMap = NULL; + pCursorInfo->pColormap = NULL; + pCursorInfo->colors[SOURCE_COLOR].red = 0; + pCursorInfo->colors[SOURCE_COLOR].green = 0; + pCursorInfo->colors[SOURCE_COLOR].blue = 0; + pCursorInfo->colors[MASK_COLOR].red = 0; + pCursorInfo->colors[MASK_COLOR].green = 0; + pCursorInfo->colors[MASK_COLOR].blue = 0; + +#ifdef MPX + mpCursorIdx++; + } + } +#endif pScreenPriv->funcs = cursorFuncs; pScreen->devPrivates[miSpriteScreenIndex].ptr = (pointer) pScreenPriv; - + pScreen->CloseScreen = miSpriteCloseScreen; pScreen->GetImage = miSpriteGetImage; pScreen->GetSpans = miSpriteGetSpans; pScreen->SourceValidate = miSpriteSourceValidate; - + pScreen->CopyWindow = miSpriteCopyWindow; - + pScreen->SaveDoomedAreas = miSpriteSaveDoomedAreas; - + pScreen->InstallColormap = miSpriteInstallColormap; pScreen->StoreColors = miSpriteStoreColors; pScreen->BlockHandler = miSpriteBlockHandler; - -#ifdef MPX - /* alloc and zero memory for all MPX cursors */ - pScreenPriv->mpCursors = (miCursorInfoPtr)xalloc(MAX_DEVICES * sizeof(miCursorInfoRec)); - while (mpCursorIdx < MAX_DEVICES) - { - miCursorInfoPtr cursor = &(pScreenPriv->mpCursors[mpCursorIdx]); - - cursor->id = mpCursorIdx; - cursor->pCursor = NULL; - cursor->x = 0; - cursor->y = 0; - cursor->isUp = FALSE; - cursor->shouldBeUp = FALSE; - cursor->pCacheWin = NullWindow; - cursor->isInCacheWin = FALSE; - cursor->checkPixels = TRUE; - cursor->pInstalledMap = NULL; - cursor->pColormap = NULL; - cursor->colors[SOURCE_COLOR].red = 0; - cursor->colors[SOURCE_COLOR].green = 0; - cursor->colors[SOURCE_COLOR].blue = 0; - cursor->colors[MASK_COLOR].red = 0; - cursor->colors[MASK_COLOR].green = 0; - cursor->colors[MASK_COLOR].blue = 0; - - mpCursorIdx++; - } - - /* virtual core pointer has id 1, we might as well save the memory */ - xfree(pScreenPriv->cp); - pScreenPriv->cp = &(pScreenPriv->mpCursors[1]); -#endif damageRegister = 0;