Blame


1 76193d7c 2003-09-30 devnull #include <u.h>
2 76193d7c 2003-09-30 devnull #include <libc.h>
3 76193d7c 2003-09-30 devnull #include <draw.h>
4 76193d7c 2003-09-30 devnull
5 76193d7c 2003-09-30 devnull /*
6 76193d7c 2003-09-30 devnull * Default version: treat as file name
7 76193d7c 2003-09-30 devnull */
8 76193d7c 2003-09-30 devnull
9 76193d7c 2003-09-30 devnull Subfont*
10 76193d7c 2003-09-30 devnull _getsubfont(Display *d, char *name)
11 76193d7c 2003-09-30 devnull {
12 76193d7c 2003-09-30 devnull int fd;
13 76193d7c 2003-09-30 devnull Subfont *f;
14 76193d7c 2003-09-30 devnull
15 76193d7c 2003-09-30 devnull fd = open(name, OREAD);
16 76193d7c 2003-09-30 devnull
17 76193d7c 2003-09-30 devnull if(fd < 0){
18 76193d7c 2003-09-30 devnull fprint(2, "getsubfont: can't open %s: %r\n", name);
19 76193d7c 2003-09-30 devnull return 0;
20 76193d7c 2003-09-30 devnull }
21 76193d7c 2003-09-30 devnull /*
22 76193d7c 2003-09-30 devnull * unlock display so i/o happens with display released, unless
23 76193d7c 2003-09-30 devnull * user is doing his own locking, in which case this could break things.
24 76193d7c 2003-09-30 devnull * _getsubfont is called only from string.c and stringwidth.c,
25 76193d7c 2003-09-30 devnull * which are known to be safe to have this done.
26 76193d7c 2003-09-30 devnull */
27 4e206880 2004-04-25 devnull if(d && d->locking == 0)
28 76193d7c 2003-09-30 devnull unlockdisplay(d);
29 4e206880 2004-04-25 devnull f = readsubfont(d, name, fd, d && d->locking==0);
30 4e206880 2004-04-25 devnull if(d && d->locking == 0)
31 76193d7c 2003-09-30 devnull lockdisplay(d);
32 76193d7c 2003-09-30 devnull if(f == 0)
33 76193d7c 2003-09-30 devnull fprint(2, "getsubfont: can't read %s: %r\n", name);
34 76193d7c 2003-09-30 devnull close(fd);
35 76193d7c 2003-09-30 devnull return f;
36 76193d7c 2003-09-30 devnull }