From c8229ab47939499b92f78a8e27e9874fccb53740 Mon Sep 17 00:00:00 2001 From: oetiker Date: Sun, 22 May 2005 22:29:11 +0000 Subject: [PATCH 1/1] don't go into an endless loop upon finding a bad character in a truetype font git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.2/program@593 a5681a0c-68f1-0310-ab6d-d61299d08faa --- src/rrd_gfx.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/rrd_gfx.c b/src/rrd_gfx.c index ac33ba2..0de62aa 100644 --- a/src/rrd_gfx.c +++ b/src/rrd_gfx.c @@ -38,7 +38,7 @@ typedef struct gfx_string_s *gfx_string; struct gfx_string_s { unsigned int width; unsigned int height; - size_t count; /* number of characters */ + int count; /* number of characters */ gfx_char glyphs; size_t num_glyphs; FT_BBox bbox; @@ -376,7 +376,7 @@ gfx_string gfx_string_create(gfx_canvas_t *canvas, FT_Face face,const char *text gfx_string string = (gfx_string) malloc (sizeof(struct gfx_string_s)); gfx_char glyph; /* current glyph in table */ - unsigned int n; + int n; int error; int gottab = 0; @@ -409,7 +409,7 @@ gfx_string gfx_string_create(gfx_canvas_t *canvas, FT_Face face,const char *text use_kerning = FT_HAS_KERNING(face); previous = 0; glyph = string->glyphs; - for (n=0; ncount;glyph++) { + for (n=0; ncount;glyph++,n++) { FT_Vector vec; /* handle the tabs ... have a witespace glyph inserted, but set its width such that the distance @@ -456,7 +456,7 @@ gfx_string gfx_string_create(gfx_canvas_t *canvas, FT_Face face,const char *text } error = FT_Get_Glyph (slot, &glyph->image); if (error) { - fprintf (stderr, "couldn't get glyph from slot: %c\n", letter); + fprintf (stderr, "couldn't get glyph %d from slot %d\n", letter, (int)slot); continue; } /* if we are in tabbing mode, we replace the tab with a space and shift the position @@ -478,7 +478,7 @@ gfx_string gfx_string_create(gfx_canvas_t *canvas, FT_Face face,const char *text FT_Vector_Transform (&vec, &string->transform); error = FT_Glyph_Transform (glyph->image, &string->transform, &vec); if (error) { - fprintf (stderr, "couldn't transform glyph\n"); + fprintf (stderr, "couldn't transform glyph id %d\n", letter); continue; } @@ -488,15 +488,13 @@ gfx_string gfx_string_create(gfx_canvas_t *canvas, FT_Face face,const char *text canvas->aa_type == AA_LIGHT ? FT_RENDER_MODE_LIGHT : FT_RENDER_MODE_MONO : FT_RENDER_MODE_MONO, 0, 1); if (error) { - fprintf (stderr, "couldn't convert glyph to bitmap\n"); + fprintf (stderr, "couldn't convert glyph id %d to bitmap\n", letter); continue; } /* increment number of glyphs */ previous = glyph->index; string->num_glyphs++; - n++; - } free(cstr); /* printf ("number of glyphs = %d\n", string->num_glyphs);*/ -- 2.11.0