Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}