summaryrefslogtreecommitdiffstats
path: root/src/libdraw/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdraw/string.c')
-rw-r--r--src/libdraw/string.c11
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;