topenmemsubfont.c - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       topenmemsubfont.c (900B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <draw.h>
            4 #include <memdraw.h>
            5 
            6 Memsubfont*
            7 openmemsubfont(char *name)
            8 {
            9         Memsubfont *sf;
           10         Memimage *i;
           11         Fontchar *fc;
           12         int fd, n;
           13         char hdr[3*12+4+1];
           14         uchar *p;
           15 
           16         fd = open(name, OREAD);
           17         if(fd < 0)
           18                 return nil;
           19         p = nil;
           20         i = readmemimage(fd);
           21         if(i == nil)
           22                 goto Err;
           23         if(read(fd, hdr, 3*12) != 3*12){
           24                 werrstr("openmemsubfont: header read error: %r");
           25                 goto Err;
           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("openmemsubfont: fontchar read error: %r");
           33                 goto Err;
           34         }
           35         fc = malloc(sizeof(Fontchar)*(n+1));
           36         if(fc == nil)
           37                 goto Err;
           38         _unpackinfo(fc, p, n);
           39         sf = allocmemsubfont(name, n, atoi(hdr+12), atoi(hdr+24), fc, i);
           40         if(sf == nil){
           41                 free(fc);
           42                 goto Err;
           43         }
           44         free(p);
           45         return sf;
           46 Err:
           47         close(fd);
           48         if (i != nil)
           49                 freememimage(i);
           50         if (p != nil)
           51                 free(p);
           52         return nil;
           53 }