Blob
1 #include <u.h>2 #include <libc.h>3 #include <draw.h>5 extern vlong _drawflength(int);7 Font*8 openfont(Display *d, char *name)9 {10 Font *fnt;11 int fd, i, n;12 char *buf, *nambuf;14 nambuf = 0;15 fd = open(name, OREAD);17 if(fd < 0 && strncmp(name, "/lib/font/bit/", 14) == 0){18 nambuf = smprint("#9/font/%s", name+14);19 if(nambuf == nil)20 return 0;21 nambuf = unsharp(nambuf);22 if(nambuf == nil)23 return 0;24 if((fd = open(nambuf, OREAD)) < 0){25 free(nambuf);26 return 0;27 }28 name = nambuf;29 }30 if(fd < 0)31 return 0;33 n = _drawflength(fd);34 buf = malloc(n+1);35 if(buf == 0){36 close(fd);37 free(nambuf);38 return 0;39 }40 buf[n] = 0;41 i = read(fd, buf, n);42 close(fd);43 if(i != n){44 free(buf);45 free(nambuf);46 return 0;47 }48 fnt = buildfont(d, buf, name);49 free(buf);50 free(nambuf);51 return fnt;52 }