diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-09-05 18:34:46 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-09-05 18:34:46 +0200 |
commit | 45f2fd3c01768f6483e4d583e4ca06c8e11362f4 (patch) | |
tree | 38cc5e0dc9dd398f4dbe16d7e5b12288f6cc7346 /sys/src/libdraw/stringwidth.c | |
parent | 9cddb6ed33051b8d19753e348a2eed3296622397 (diff) |
libdraw: fix old subfont leak
Diffstat (limited to 'sys/src/libdraw/stringwidth.c')
-rw-r--r-- | sys/src/libdraw/stringwidth.c | 6 |
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; } |