Blob
1 #include <u.h>2 #include <libc.h>3 #include <draw.h>5 Subfont*6 readsubfonti(Display*d, char *name, int fd, Image *ai, int dolock)7 {8 char hdr[3*12+4+1];9 int n;10 uchar *p;11 Fontchar *fc;12 Subfont *f;13 Image *i;15 i = ai;16 if(i == nil){17 i = readimage(d, fd, dolock);18 if(i == nil)19 return nil;20 }21 if(read(fd, hdr, 3*12) != 3*12){22 if(ai == nil)23 freeimage(i);24 werrstr("rdsubfonfile: header read error: %r");25 return nil;26 }27 n = atoi(hdr);28 p = malloc(6*(n+1));29 if(p == nil)30 goto Err;31 if(read(fd, p, 6*(n+1)) != 6*(n+1)){32 werrstr("rdsubfonfile: fontchar read error: %r");33 Err:34 if(ai == nil)35 freeimage(i);36 free(p);37 return nil;38 }39 fc = malloc(sizeof(Fontchar)*(n+1));40 if(fc == nil)41 goto Err;42 _unpackinfo(fc, p, n);43 if(dolock)44 lockdisplay(d);45 f = allocsubfont(name, n, atoi(hdr+12), atoi(hdr+24), fc, i);46 if(dolock)47 unlockdisplay(d);48 if(f == nil){49 free(fc);50 goto Err;51 }52 free(p);53 return f;54 }56 Subfont*57 readsubfont(Display*d, char *name, int fd, int dolock)58 {59 return readsubfonti(d, name, fd, nil, dolock);60 }