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 }