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