Commit bc0c56c4 authored by Adam Jackson's avatar Adam Jackson 🎧

Bug #6924: Restore the ABI for DrawableRec and ColormapRec to the state

    they were in prior to the fix for #6438. Based on a patch from Andy
    Ritger.
parent cc3b882b
2006-05-22 Adam Jackson <ajax@freedesktop.org>
* dix/colormap.c:
* dix/pixmap.c:
* dix/window.c:
* include/colormapst.h:
* include/pixmapstr.h:
Bug #6924: Restore the ABI for DrawableRec and ColormapRec to
the state they were in prior to the fix for #6438. Based on a
patch from Andy Ritger.
2006-05-19 Alan Coopersmith <alan.coopersmith@sun.com>
* hw/xfree86/scanpci/pci.ids:
......
/* $XdotOrg: xserver/xorg/dix/colormap.c,v 1.11 2005/09/05 07:40:50 daniels Exp $ */
/* $XdotOrg: xserver/xorg/dix/colormap.c,v 1.12 2006/02/15 20:44:12 ajax Exp $ */
/* $XFree86: xc/programs/Xserver/dix/colormap.c,v 3.11 2003/11/03 05:10:59 tsi Exp $ */
/***********************************************************
......@@ -280,6 +280,13 @@ CreateColormap (Colormap mid, ScreenPtr pScreen, VisualPtr pVisual,
pmap = (ColormapPtr) xalloc(sizebytes);
if (!pmap)
return (BadAlloc);
#if defined(_XSERVER64)
pmap->pad0 = 0;
pmap->pad1 = 0;
#if (X_BYTE_ORDER == X_LITTLE_ENDIAN)
pmap->pad2 = 0;
#endif
#endif
pmap->red = (EntryPtr)((char *)pmap + sizeof(ColormapRec));
sizebytes = size * sizeof(Entry);
pmap->clientPixelsRed = (Pixel **)((char *)pmap->red + sizebytes);
......
......@@ -141,5 +141,13 @@ AllocatePixmap(ScreenPtr pScreen, int pixDataSize)
#else
pPixmap = (PixmapPtr)xalloc(sizeof(PixmapRec) + pixDataSize);
#endif
#ifdef _XSERVER64
if (pPixmap) {
pPixmap->drawable.pad0 = 0;
pPixmap->drawable.pad1 = 0;
}
#endif
return pPixmap;
}
/* $XdotOrg: xserver/xorg/dix/window.c,v 1.16 2006/03/29 17:51:54 deronj Exp $ */
/* $XdotOrg: xserver/xorg/dix/window.c,v 1.17 2006/03/31 17:39:35 sandmann Exp $ */
/* $Xorg: window.c,v 1.4 2001/02/09 02:04:41 xorgcvs Exp $ */
/*
......@@ -384,6 +384,10 @@ AllocateWindow(ScreenPtr pScreen)
else
ppriv->ptr = (pointer)NULL;
}
#if _XSERVER64
pWin->drawable.pad0 = 0;
pWin->drawable.pad1 = 0;
#endif
}
return pWin;
}
......
......@@ -49,6 +49,8 @@ SOFTWARE.
#ifndef CMAPSTRUCT_H
#define CMAPSTRUCT_H 1
#include <X11/Xarch.h>
#include "colormap.h"
#include "screenint.h"
......@@ -89,15 +91,26 @@ typedef struct _CMEntry
Bool fShared;
} Entry;
/* COLORMAPs can be used for either Direct or Pseudo color. PseudoColor
/*
* COLORMAPs can be used for either Direct or Pseudo color. PseudoColor
* only needs one cell table, we arbitrarily pick red. We keep track
* of that table with freeRed, numPixelsRed, and clientPixelsRed */
* of that table with freeRed, numPixelsRed, and clientPixelsRed
*
* The padN variables are unfortunate ABI BC. See fdo bug #6924.
*/
typedef struct _ColormapRec
{
VisualPtr pVisual;
short class; /* PseudoColor or DirectColor */
#if defined(_XSERVER64)
short pad0;
XID pad1;
#endif
XID mid; /* client's name for colormap */
#if defined(_XSERVER64) && (X_BYTE_ORDER == X_LITTLE_ENDIAN)
XID pad2;
#endif
ScreenPtr pScreen; /* screen map is associated with */
short flags; /* 1 = IsDefault
* 2 = AllAllocated */
......
......@@ -49,16 +49,27 @@ SOFTWARE.
#ifndef PIXMAPSTRUCT_H
#define PIXMAPSTRUCT_H
#include <X11/Xarch.h>
#include "pixmap.h"
#include "screenint.h"
#include "regionstr.h"
/*
* The padN members are unfortunate ABI BC. See fdo bug #6924.
*/
typedef struct _Drawable {
unsigned char type; /* DRAWABLE_<type> */
unsigned char class; /* specific to type */
unsigned char depth;
unsigned char bitsPerPixel;
#if defined(_XSERVER64)
XID pad0;
#endif
XID id; /* resource id */
#if defined(_XSERVER64)
XID pad1;
#endif
short x; /* window: screen absolute, pixmap: 0 */
short y; /* window: screen absolute, pixmap: 0 */
unsigned short width;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment