aboutsummaryrefslogtreecommitdiff
path: root/src/libdraw/subfont.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-07-13 03:57:24 +0000
committerrsc <devnull@localhost>2005-07-13 03:57:24 +0000
commitb2f9ee0de55f3c59c83f479d12cfe8c894935bd7 (patch)
tree9c7e107d71bdda7bec76aba10b4485c023a99f65 /src/libdraw/subfont.c
parent3b634dc7e4ab32a6854c8ec93107b2750bf906e8 (diff)
downloadplan9port-b2f9ee0de55f3c59c83f479d12cfe8c894935bd7.tar.gz
plan9port-b2f9ee0de55f3c59c83f479d12cfe8c894935bd7.tar.bz2
plan9port-b2f9ee0de55f3c59c83f479d12cfe8c894935bd7.zip
free subfonts correctly
Diffstat (limited to 'src/libdraw/subfont.c')
-rw-r--r--src/libdraw/subfont.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libdraw/subfont.c b/src/libdraw/subfont.c
index 61838b05..085afba3 100644
--- a/src/libdraw/subfont.c
+++ b/src/libdraw/subfont.c
@@ -5,13 +5,14 @@
Subfont*
allocsubfont(char *name, int n, int height, int ascent, Fontchar *info, Image *i)
{
- Subfont *f;
+ Subfont *f, *cf;
assert(height != 0 /* allocsubfont */);
f = malloc(sizeof(Subfont));
if(f == 0)
return 0;
+fprint(2, "allocsubfont %p\n", f);
f->n = n;
f->height = height;
f->ascent = ascent;
@@ -19,9 +20,18 @@ allocsubfont(char *name, int n, int height, int ascent, Fontchar *info, Image *i
f->bits = i;
f->ref = 1;
if(name){
+ /*
+ * if already caching this subfont, leave older
+ * (and hopefully more widely used) copy in cache.
+ * this case should not happen -- we got called
+ * because cachechars needed this subfont and it
+ * wasn't in the cache.
+ */
f->name = strdup(name);
- if(lookupsubfont(i->display, name) == 0)
+ if((cf=lookupsubfont(i->display, name)) == 0)
installsubfont(name, f);
+ else
+ freesubfont(cf); /* drop ref we just picked up */
}else
f->name = 0;
return f;