_cairo_xlib_surface_show_glyphs32 (cairo_unscaled_font_t  *font, cairo_font_scale_t	  *scale,
_cairo_xlib_surface_show_glyphs32 (cairo_font_t           *font,
_cairo_xlib_surface_show_glyphs32 (cairo_unscaled_font_t  *font,				   cairo_font_scale_t	  *scale,				   cairo_operator_t       operator,				   glyphset_cache_t 	  *g,				   cairo_glyph_cache_key_t *key,				   cairo_xlib_surface_t   *src,				   cairo_xlib_surface_t   *self,				   int                    source_x,				   int                    source_y,				   const cairo_glyph_t    *glyphs,				   glyphset_cache_entry_t **entries,				   int                    num_glyphs){    XGlyphElt32 *elts = NULL;    XGlyphElt32 stack_elts [N_STACK_BUF];    unsigned int *chars = NULL;    unsigned int stack_chars [N_STACK_BUF];    int i;        int thisX, thisY;    int lastX = 0, lastY = 0;    /* Acquire arrays of suitable sizes. */    if (num_glyphs < N_STACK_BUF) {	elts = stack_elts;	chars = stack_chars;    } else {	elts = malloc (num_glyphs * sizeof (XGlyphElt32));	if (elts == NULL)	    goto FAIL;	chars = malloc (num_glyphs * sizeof (unsigned int));	if (chars == NULL)	    goto FREE_ELTS;    }    for (i = 0; i < num_glyphs; ++i) {	chars[i] = entries[i]->glyph;	elts[i].chars = &(chars[i]);	elts[i].nchars = 1;	elts[i].glyphset = g->glyphset;	thisX = (int) floor (glyphs[i].x + 0.5);	thisY = (int) floor (glyphs[i].y + 0.5);	elts[i].xOff = thisX - lastX;	elts[i].yOff = thisY - lastY;	lastX = thisX;	lastY = thisY;    }    XRenderCompositeText32 (self->dpy,			    _render_operator (operator),			    src->picture,			    self->picture,			    g->a8_pict_format,			    source_x, source_y,			    0, 0,			    elts, num_glyphs);    if (num_glyphs >= N_STACK_BUF) {	free (chars);	free (elts);     }        return CAIRO_STATUS_SUCCESS;     FREE_ELTS:    if (num_glyphs >= N_STACK_BUF)	free (elts);  FAIL:    return CAIRO_STATUS_NO_MEMORY;}