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 if((fd = open(nambuf, OREAD)) < 0){22 fprint(2, "failed at %s\n", nambuf);23 free(nambuf);24 return 0;25 }26 name = nambuf;27 }28 if(fd < 0)29 return 0;31 n = _drawflength(fd);32 buf = malloc(n+1);33 if(buf == 0){34 close(fd);35 free(nambuf);36 return 0;37 }38 buf[n] = 0;39 i = read(fd, buf, n);40 close(fd);41 if(i != n){42 free(buf);43 free(nambuf);44 return 0;45 }46 fnt = buildfont(d, buf, name);47 free(buf);48 free(nambuf);49 return fnt;50 }