diff options
author | rsc <devnull@localhost> | 2005-07-13 03:57:24 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-07-13 03:57:24 +0000 |
commit | b2f9ee0de55f3c59c83f479d12cfe8c894935bd7 (patch) | |
tree | 9c7e107d71bdda7bec76aba10b4485c023a99f65 /src/libdraw/subfont.c | |
parent | 3b634dc7e4ab32a6854c8ec93107b2750bf906e8 (diff) | |
download | plan9port-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.c | 14 |
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; |