diff options
Diffstat (limited to 'src/libdraw/string.c')
| -rw-r--r-- | src/libdraw/string.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libdraw/string.c b/src/libdraw/string.c index 4dfb27fa..4e876c17 100644 --- a/src/libdraw/string.c +++ b/src/libdraw/string.c @@ -65,6 +65,7 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i char **sptr; Rune **rptr; Font *def; + Subfont *sf; if(s == nil){ s = ""; @@ -76,6 +77,7 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i rptr = nil; }else rptr = &r; + sf = nil; while((*s || *r) && len){ max = Max; if(len < max) @@ -124,13 +126,18 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i len -= n; } if(subfontname){ - if(_getsubfont(f->display, subfontname) == 0){ - def = f->display->defaultfont; + freesubfont(sf); + if((sf=_getsubfont(f->display, subfontname)) == 0){ + def = f->display ? f->display->defaultfont : nil; if(def && f!=def) f = def; else break; } + /* + * must not free sf until cachechars has found it in the cache + * and picked up its own reference. + */ } } return pt; |
