Place glyph privates at correct location within the allocate storage

A glyph allocation consists of :

  GlyphRec
  numScreens * PicturePtr
  glyph privates

Tell the dix private bits to start past the picture pointers.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Keith Packard 2010-06-06 16:04:42 -07:00
parent 67b824a81b
commit f03be727d6

View File

@ -368,8 +368,6 @@ FindGlyph (GlyphSetPtr glyphSet, Glyph id)
return glyph; return glyph;
} }
#define GLYPH_SIZE (sizeof (GlyphRec) + dixPrivatesSize(PRIVATE_GLYPH))
GlyphPtr GlyphPtr
AllocateGlyph (xGlyphInfo *gi, int fdepth) AllocateGlyph (xGlyphInfo *gi, int fdepth)
{ {
@ -377,15 +375,17 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
int size; int size;
GlyphPtr glyph; GlyphPtr glyph;
int i; int i;
int head_size;
size = screenInfo.numScreens * sizeof (PicturePtr); head_size = sizeof (GlyphRec) + screenInfo.numScreens * sizeof (PicturePtr);
glyph = (GlyphPtr) malloc (size + GLYPH_SIZE); size = (head_size + dixPrivatesSize(PRIVATE_GLYPH));
glyph = (GlyphPtr) malloc (size);
if (!glyph) if (!glyph)
return 0; return 0;
glyph->refcnt = 0; glyph->refcnt = 0;
glyph->size = size + sizeof (xGlyphInfo); glyph->size = size + sizeof (xGlyphInfo);
glyph->info = *gi; glyph->info = *gi;
dixInitPrivates(glyph, glyph + 1, PRIVATE_GLYPH); dixInitPrivates(glyph, (char *) glyph + head_size, PRIVATE_GLYPH);
for (i = 0; i < screenInfo.numScreens; i++) for (i = 0; i < screenInfo.numScreens; i++)
{ {