libdraw: fix some memory leaks in font handling
This commit is contained in:
parent
a3ec102dc7
commit
dc2a17b95c
5 changed files with 18 additions and 6 deletions
|
|
@ -36,6 +36,7 @@ buildfont(Display *d, char *buf, char *name)
|
||||||
if(fnt->name==0 || fnt->cache==0 || fnt->subf==0){
|
if(fnt->name==0 || fnt->cache==0 || fnt->subf==0){
|
||||||
Err2:
|
Err2:
|
||||||
free(fnt->name);
|
free(fnt->name);
|
||||||
|
free(fnt->namespec);
|
||||||
free(fnt->cache);
|
free(fnt->cache);
|
||||||
free(fnt->subf);
|
free(fnt->subf);
|
||||||
free(fnt->sub);
|
free(fnt->sub);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ freesubfont(Subfont *f)
|
||||||
return;
|
return;
|
||||||
uninstallsubfont(f);
|
uninstallsubfont(f);
|
||||||
free(f->info); /* note: f->info must have been malloc'ed! */
|
free(f->info); /* note: f->info must have been malloc'ed! */
|
||||||
|
free(f->name);
|
||||||
freeimage(f->bits);
|
freeimage(f->bits);
|
||||||
free(f);
|
free(f);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ openfont1(Display *d, char *name)
|
||||||
{
|
{
|
||||||
Font *fnt;
|
Font *fnt;
|
||||||
int fd, i, n, scale;
|
int fd, i, n, scale;
|
||||||
char *buf, *nambuf, *fname, *freename;
|
char *buf, *nambuf, *nambuf0, *fname, *freename;
|
||||||
|
|
||||||
nambuf = 0;
|
nambuf = 0;
|
||||||
freename = nil;
|
freename = nil;
|
||||||
|
|
@ -42,19 +42,21 @@ openfont1(Display *d, char *name)
|
||||||
nambuf = smprint("#9/font/%s", fname+14);
|
nambuf = smprint("#9/font/%s", fname+14);
|
||||||
if(nambuf == nil)
|
if(nambuf == nil)
|
||||||
return 0;
|
return 0;
|
||||||
nambuf = unsharp(nambuf);
|
*nambuf0 = unsharp(nambuf);
|
||||||
|
if(nambuf0 != nambuf)
|
||||||
|
free(nambuf);
|
||||||
|
nambuf = nambuf0;
|
||||||
if(nambuf == nil)
|
if(nambuf == nil)
|
||||||
return 0;
|
return 0;
|
||||||
if((fd = open(nambuf, OREAD)) < 0){
|
if((fd = open(nambuf, OREAD)) < 0){
|
||||||
free(nambuf);
|
free(nambuf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fname = nambuf;
|
|
||||||
if(scale > 1) {
|
if(scale > 1) {
|
||||||
name = smprint("%d*%s", scale, fname);
|
name = smprint("%d*%s", scale, nambuf);
|
||||||
freename = name;
|
freename = name;
|
||||||
} else {
|
} else {
|
||||||
name = fname;
|
name = nambuf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(fd >= 0)
|
if(fd >= 0)
|
||||||
|
|
@ -63,13 +65,17 @@ openfont1(Display *d, char *name)
|
||||||
fd = _fontpipe(fname+10);
|
fd = _fontpipe(fname+10);
|
||||||
n = 128*1024;
|
n = 128*1024;
|
||||||
}
|
}
|
||||||
if(fd < 0)
|
if(fd < 0){
|
||||||
|
free(nambuf);
|
||||||
|
free(freename);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
buf = malloc(n+1);
|
buf = malloc(n+1);
|
||||||
if(buf == 0){
|
if(buf == 0){
|
||||||
close(fd);
|
close(fd);
|
||||||
free(nambuf);
|
free(nambuf);
|
||||||
|
free(freename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
i = readn(fd, buf, n);
|
i = readn(fd, buf, n);
|
||||||
|
|
@ -77,6 +83,7 @@ openfont1(Display *d, char *name)
|
||||||
if(i <= 0){
|
if(i <= 0){
|
||||||
free(buf);
|
free(buf);
|
||||||
free(nambuf);
|
free(nambuf);
|
||||||
|
free(freename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
buf[i] = 0;
|
buf[i] = 0;
|
||||||
|
|
@ -224,6 +231,7 @@ openfont(Display *d, char *name)
|
||||||
if(!f)
|
if(!f)
|
||||||
return nil;
|
return nil;
|
||||||
f->lodpi = f;
|
f->lodpi = f;
|
||||||
|
free(f->namespec);
|
||||||
f->namespec = namespec;
|
f->namespec = namespec;
|
||||||
|
|
||||||
/* add to display list for when dpi changes */
|
/* add to display list for when dpi changes */
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ void
|
||||||
uninstallsubfont(Subfont *subfont)
|
uninstallsubfont(Subfont *subfont)
|
||||||
{
|
{
|
||||||
if(subfont == lastsubfont){
|
if(subfont == lastsubfont){
|
||||||
|
free(lastname);
|
||||||
lastname = 0;
|
lastname = 0;
|
||||||
lastsubfont = 0;
|
lastsubfont = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ subfontname(char *cfname, char *fname, int maxdepth)
|
||||||
}
|
}
|
||||||
return tmp2;
|
return tmp2;
|
||||||
}
|
}
|
||||||
|
free(tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try default */
|
/* try default */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue