xref: /plan9-contrib/sys/src/libdraw/openfont.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier Font*
openfont(Display * d,char * name)67dd7cddfSDavid du Colombier openfont(Display *d, char *name)
77dd7cddfSDavid du Colombier {
87dd7cddfSDavid du Colombier 	Font *fnt;
97dd7cddfSDavid du Colombier 	int fd, i, n;
107dd7cddfSDavid du Colombier 	char *buf;
11*9a747e4fSDavid du Colombier 	Dir *dir;
127dd7cddfSDavid du Colombier 
137dd7cddfSDavid du Colombier 	fd = open(name, OREAD);
147dd7cddfSDavid du Colombier 	if(fd < 0)
157dd7cddfSDavid du Colombier 		return 0;
167dd7cddfSDavid du Colombier 
17*9a747e4fSDavid du Colombier 	dir = dirfstat(fd);
18*9a747e4fSDavid du Colombier 	if(dir == nil){
197dd7cddfSDavid du Colombier     Err0:
207dd7cddfSDavid du Colombier 		close(fd);
217dd7cddfSDavid du Colombier 		return 0;
227dd7cddfSDavid du Colombier 	}
23*9a747e4fSDavid du Colombier 	n = dir->length;
24*9a747e4fSDavid du Colombier 	free(dir);
257dd7cddfSDavid du Colombier 	buf = malloc(n+1);
267dd7cddfSDavid du Colombier 	if(buf == 0)
277dd7cddfSDavid du Colombier 		goto Err0;
287dd7cddfSDavid du Colombier 	buf[n] = 0;
297dd7cddfSDavid du Colombier 	i = read(fd, buf, n);
307dd7cddfSDavid du Colombier 	close(fd);
317dd7cddfSDavid du Colombier 	if(i != n){
327dd7cddfSDavid du Colombier 		free(buf);
337dd7cddfSDavid du Colombier 		return 0;
347dd7cddfSDavid du Colombier 	}
357dd7cddfSDavid du Colombier 	fnt = buildfont(d, buf, name);
367dd7cddfSDavid du Colombier 	free(buf);
377dd7cddfSDavid du Colombier 	return fnt;
387dd7cddfSDavid du Colombier }
39