| #include <u.h> | 
 | #include <libc.h> | 
 | #include <draw.h> | 
 |  | 
 | Subfont* | 
 | allocsubfont(char *name, int n, int height, int ascent, Fontchar *info, Image *i) | 
 | { | 
 | 	Subfont *f, *cf; | 
 |  | 
 | 	assert(height != 0 /* allocsubfont */); | 
 |  | 
 | 	f = malloc(sizeof(Subfont)); | 
 | 	if(f == 0) | 
 | 		return 0; | 
 | 	f->n = n; | 
 | 	f->height = height; | 
 | 	f->ascent = ascent; | 
 | 	f->info = info; | 
 | 	f->bits = i; | 
 | 	f->ref = 1; | 
 | 	if(name){ | 
 | 		/* | 
 | 		 * if already caching this subfont, leave older  | 
 | 		 * (and hopefully more widely used) copy in cache. | 
 | 		 * this case should not happen -- we got called  | 
 | 		 * because cachechars needed this subfont and it | 
 | 		 * wasn't in the cache. | 
 | 		 */ | 
 | 		f->name = strdup(name); | 
 | 		if((cf=lookupsubfont(i->display, name)) == 0) | 
 | 			installsubfont(name, f); | 
 | 		else | 
 | 			freesubfont(cf);	/* drop ref we just picked up */ | 
 | 	}else | 
 | 		f->name = 0; | 
 | 	return f; | 
 | } |