17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier
57dd7cddfSDavid du Colombier /*
67dd7cddfSDavid du Colombier * Default version: treat as file name
77dd7cddfSDavid du Colombier */
87dd7cddfSDavid du Colombier
97dd7cddfSDavid du Colombier Subfont*
_getsubfont(Display * d,char * name)107dd7cddfSDavid du Colombier _getsubfont(Display *d, char *name)
117dd7cddfSDavid du Colombier {
127dd7cddfSDavid du Colombier int fd;
137dd7cddfSDavid du Colombier Subfont *f;
147dd7cddfSDavid du Colombier
157dd7cddfSDavid du Colombier fd = open(name, OREAD);
167dd7cddfSDavid du Colombier
177dd7cddfSDavid du Colombier if(fd < 0){
189a747e4fSDavid du Colombier fprint(2, "getsubfont: can't open %s: %r\n", name);
197dd7cddfSDavid du Colombier return 0;
207dd7cddfSDavid du Colombier }
217dd7cddfSDavid du Colombier /*
227dd7cddfSDavid du Colombier * unlock display so i/o happens with display released, unless
237dd7cddfSDavid du Colombier * user is doing his own locking, in which case this could break things.
247dd7cddfSDavid du Colombier * _getsubfont is called only from string.c and stringwidth.c,
257dd7cddfSDavid du Colombier * which are known to be safe to have this done.
267dd7cddfSDavid du Colombier */
27b8661318SDavid du Colombier if(d && d->locking == 0)
287dd7cddfSDavid du Colombier unlockdisplay(d);
29b8661318SDavid du Colombier f = readsubfont(d, name, fd, d && d->locking==0);
30b8661318SDavid du Colombier if(d && d->locking == 0)
317dd7cddfSDavid du Colombier lockdisplay(d);
327dd7cddfSDavid du Colombier if(f == 0)
339a747e4fSDavid du Colombier fprint(2, "getsubfont: can't read %s: %r\n", name);
347dd7cddfSDavid du Colombier close(fd);
35*50e5f38dSDavid du Colombier setmalloctag(f, getcallerpc(&d));
367dd7cddfSDavid du Colombier return f;
377dd7cddfSDavid du Colombier }
38