summaryrefslogtreecommitdiff
path: root/sys/src/libdraw/stringwidth.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-09-05 18:34:46 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-09-05 18:34:46 +0200
commit45f2fd3c01768f6483e4d583e4ca06c8e11362f4 (patch)
tree38cc5e0dc9dd398f4dbe16d7e5b12288f6cc7346 /sys/src/libdraw/stringwidth.c
parent9cddb6ed33051b8d19753e348a2eed3296622397 (diff)
libdraw: fix old subfont leak
Diffstat (limited to 'sys/src/libdraw/stringwidth.c')
-rw-r--r--sys/src/libdraw/stringwidth.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/src/libdraw/stringwidth.c b/sys/src/libdraw/stringwidth.c
index eb2bb42e7..004b695e7 100644
--- a/sys/src/libdraw/stringwidth.c
+++ b/sys/src/libdraw/stringwidth.c
@@ -12,6 +12,7 @@ _stringnwidth(Font *f, char *s, Rune *r, int len)
Rune rune, **rptr;
char *subfontname, **sptr;
Font *def;
+ Subfont *sf;
if(s == nil){
s = "";
@@ -23,6 +24,7 @@ _stringnwidth(Font *f, char *s, Rune *r, int len)
rptr = nil;
}else
rptr = &r;
+ sf = nil;
twid = 0;
while(len>0 && (*s || *r)){
max = Max;
@@ -43,7 +45,8 @@ _stringnwidth(Font *f, char *s, Rune *r, int len)
return twid;
}
if(subfontname){
- if(_getsubfont(f->display, subfontname) == 0){
+ freesubfont(sf);
+ if((sf=_getsubfont(f->display, subfontname)) == 0){
def = f->display->defaultfont;
if(def && f!=def)
f = def;
@@ -56,6 +59,7 @@ _stringnwidth(Font *f, char *s, Rune *r, int len)
twid += wid;
len -= l;
}
+ freesubfont(sf);
return twid;
}