# HG changeset patch # User Kenichi Handa # Date 1211181765 0 # Node ID ae4280e6a1664bf804096f350f7f2279223e3888 # Parent 974543f59c3362c20ad6bfbfd8726b62f6826cda (font_list_entities): Fix handling of cache. (font_matching_entity): Likewise. diff -r 974543f59c33 -r ae4280e6a166 src/font.c --- a/src/font.c Mon May 19 07:21:25 2008 +0000 +++ b/src/font.c Mon May 19 07:22:45 2008 +0000 @@ -2352,7 +2352,7 @@ size = 0; ftype = AREF (spec, FONT_TYPE_INDEX); - for (i = 0; i <= FONT_REGISTRY_INDEX; i++) + for (i = 1; i <= FONT_REGISTRY_INDEX; i++) ASET (scratch_font_spec, i, AREF (spec, i)); for (; i < FONT_EXTRA_INDEX; i++) { @@ -2377,7 +2377,7 @@ { Lisp_Object val = assoc_no_quit (scratch_font_spec, XCDR (cache)); - if (CONSP (val) && VECTORP (XCDR (val))) + if (CONSP (val)) val = XCDR (val); else { @@ -2430,16 +2430,18 @@ && (NILP (ftype) || EQ (driver_list->driver->type, ftype))) { Lisp_Object cache = font_get_cache (f, driver_list->driver); + Lisp_Object copy; ASET (spec, FONT_TYPE_INDEX, driver_list->driver->type); entity = assoc_no_quit (spec, XCDR (cache)); - if (CONSP (entity) && ! VECTORP (XCDR (entity))) + if (CONSP (entity)) entity = XCDR (entity); else { entity = driver_list->driver->match (frame, spec); - XSETCDR (cache, Fcons (Fcons (Fcopy_font_spec (spec), entity), - XCDR (cache))); + copy = Fcopy_font_spec (spec); + ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); + XSETCDR (cache, Fcons (Fcons (copy, entity), XCDR (cache))); } if (! NILP (entity)) break;