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 return nil;31 if(read(fd, p, 6*(n+1)) != 6*(n+1)){32 werrstr("rdsubfonfile: fontchar read error: %r");33 Err:34 free(p);35 return nil;36 }37 fc = malloc(sizeof(Fontchar)*(n+1));38 if(fc == nil)39 goto Err;40 _unpackinfo(fc, p, n);41 if(dolock)42 lockdisplay(d);43 f = allocsubfont(name, n, atoi(hdr+12), atoi(hdr+24), fc, i);44 if(dolock)45 unlockdisplay(d);46 if(f == nil){47 free(fc);48 goto Err;49 }50 free(p);51 return f;52 }54 Subfont*55 readsubfont(Display*d, char *name, int fd, int dolock)56 {57 return readsubfonti(d, name, fd, nil, dolock);58 }