[PATCH] Fix cast int-to-pointer and pointer-to-int

Simon Thum simon.thum at gmx.de
Thu Feb 5 09:17:47 PST 2009


Tomas Carnecky wrote:
> By first casting to long and then to the final type. Of course
> this assumes that sizeof(long) == sizeof(void *). If the Win32
On this page:
http://www.viva64.com/content/articles/64-bit-development/?f=20_issues_of_porting_C++_code_on_the_64-bit_platform.html&lang=en&content=64-bit-development#IDALZBTD

they explain that indeed there are memory models where this doesn't hold.

+1 for uintptr_t

> folks care enough about warnings, we could make macros for this.
> 
> Signed-off-by: Tomas Carnecky <tom at dbservice.com>
> ---
> 
> Let's suppose macros would be preferred, into which header
> should they go? Into include/os.h? include/misc.h?
> 
>  composite/compwindow.c                |    4 ++--
>  glx/glxcmds.c                         |    2 +-
>  hw/xfree86/dri/dri.c                  |    8 ++++----
>  hw/xfree86/os-support/bus/linuxPci.c  |    2 +-
>  hw/xfree86/os-support/linux/lnx_agp.c |    2 +-
>  mi/miscrinit.c                        |    2 +-
>  6 files changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/composite/compwindow.c b/composite/compwindow.c
> index 577fa73..efad534 100644
> --- a/composite/compwindow.c
> +++ b/composite/compwindow.c
> @@ -92,7 +92,7 @@ static Bool
>  compRepaintBorder (ClientPtr pClient, pointer closure)
>  {
>      WindowPtr pWindow;
> -    int rc = dixLookupWindow(&pWindow, (XID)closure, pClient, DixWriteAccess);
> +    int rc = dixLookupWindow(&pWindow, (XID)(long)closure, pClient, DixWriteAccess);
>  
>      if (rc == Success) {
>  	RegionRec exposed;
> @@ -123,7 +123,7 @@ compSetPixmapVisitWindow (WindowPtr pWindow, pointer data)
>      SetBorderSize (pWindow);
>      if (HasBorder (pWindow))
>  	QueueWorkProc (compRepaintBorder, serverClient,
> -		       (pointer) pWindow->drawable.id);
> +		       (pointer)(long)pWindow->drawable.id);
>      return WT_WALKCHILDREN;
>  }
>  
> diff --git a/glx/glxcmds.c b/glx/glxcmds.c
> index 33954ee..003f8e0 100644
> --- a/glx/glxcmds.c
> +++ b/glx/glxcmds.c
> @@ -2021,7 +2021,7 @@ int __glXDisp_BindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
>              if (ret == Success) {
>                  if (barrier)
>                      /* add source for cleanup when drawable is gone */
> -                    AddResource(drawable, __glXSwapBarrierRes, (pointer)screen);
> +                    AddResource(drawable, __glXSwapBarrierRes, (pointer)(long)screen);
>                  else
>                      /* delete source */
>                      FreeResourceByType(drawable, __glXSwapBarrierRes, FALSE);
> diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
> index 871b6a9..15536af 100644
> --- a/hw/xfree86/dri/dri.c
> +++ b/hw/xfree86/dri/dri.c
> @@ -429,7 +429,7 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
>      if (!pDRIPriv->pDriverInfo->dontMapFrameBuffer)
>      {
>  	if (drmAddMap( pDRIPriv->drmFD,
> -		       (drm_handle_t)pDRIPriv->pDriverInfo->frameBufferPhysicalAddress,
> +		       (drm_handle_t)(long)pDRIPriv->pDriverInfo->frameBufferPhysicalAddress,
>  		       pDRIPriv->pDriverInfo->frameBufferSize,
>  		       DRM_FRAME_BUFFER,
>  		       0,
> @@ -1278,7 +1278,7 @@ DRICreateDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable,
>  
>  	/* track this in case the client dies */
>  	AddResource(FakeClientID(client->index), DRIDrawablePrivResType,
> -		    (pointer)pDrawable->id);
> +		    (pointer)(long)pDrawable->id);
>  
>  	if (pDRIDrawablePriv->hwDrawable) {
>  	    drmUpdateDrawableInfo(pDRIPriv->drmFD,
> @@ -1349,7 +1349,7 @@ DRIDestroyDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable)
>      if (pDrawable->type == DRAWABLE_WINDOW) {
>  	LookupClientResourceComplex(client, DRIDrawablePrivResType,
>  				    DRIDestroyDrawableCB,
> -				    (pointer)pDrawable->id);
> +				    (pointer)(long)pDrawable->id);
>      }
>      else { /* pixmap (or for GLX 1.3, a PBuffer) */
>  	/* NOT_DONE */
> @@ -1364,7 +1364,7 @@ DRIDrawablePrivDelete(pointer pResource, XID id)
>  {
>      WindowPtr pWin;
>  
> -    id = (XID)pResource;
> +    id = (XID)(long)pResource;
>      pWin = LookupIDByType(id, RT_WINDOW);
>  
>      if (pWin) {
> diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
> index 41682c2..c22cfb1 100644
> --- a/hw/xfree86/os-support/bus/linuxPci.c
> +++ b/hw/xfree86/os-support/bus/linuxPci.c
> @@ -525,7 +525,7 @@ xf86MapLegacyIO(struct pci_device *dev)
>  						  PCIIOC_MMAP_IS_IO);
>  	}
>  	else { /* legacy_io file exists, encode fd */
> -	    DomainMmappedIO[domain] = (pointer)(fd << 24);
> +	    DomainMmappedIO[domain] = (pointer)(long)(fd << 24);
>  	}
>      }
>  
> diff --git a/hw/xfree86/os-support/linux/lnx_agp.c b/hw/xfree86/os-support/linux/lnx_agp.c
> index 6143740..8553155 100644
> --- a/hw/xfree86/os-support/linux/lnx_agp.c
> +++ b/hw/xfree86/os-support/linux/lnx_agp.c
> @@ -264,7 +264,7 @@ xf86DeallocateGARTMemory(int screenNum, int key)
>  	}
>  
>  #ifdef __linux__
> -	if (ioctl(gartFd, AGPIOC_DEALLOCATE, (int *)key) != 0) {
> +	if (ioctl(gartFd, AGPIOC_DEALLOCATE, (int *)(long)key) != 0) {
>  #else
>  	if (ioctl(gartFd, AGPIOC_DEALLOCATE, &key) != 0) {
>  #endif
> diff --git a/mi/miscrinit.c b/mi/miscrinit.c
> index 93a6c4b..ea52e58 100644
> --- a/mi/miscrinit.c
> +++ b/mi/miscrinit.c
> @@ -308,5 +308,5 @@ DevPrivateKey miZeroLineScreenKey = &miZeroLineScreenKeyIndex;
>  void
>  miSetZeroLineBias(ScreenPtr pScreen, unsigned int bias)
>  {
> -    dixSetPrivate(&pScreen->devPrivates, miZeroLineScreenKey, (pointer)bias);
> +    dixSetPrivate(&pScreen->devPrivates, miZeroLineScreenKey, (pointer)(long)bias);
>  }




More information about the xorg mailing list