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 9b4a2324 2009-07-09 rsc int _fontpipe(char*);
10 9b4a2324 2009-07-09 rsc
11 76193d7c 2003-09-30 devnull Subfont*
12 76193d7c 2003-09-30 devnull _getsubfont(Display *d, char *name)
13 76193d7c 2003-09-30 devnull {
14 76193d7c 2003-09-30 devnull int fd;
15 76193d7c 2003-09-30 devnull Subfont *f;
16 76193d7c 2003-09-30 devnull
17 76193d7c 2003-09-30 devnull fd = open(name, OREAD);
18 9b4a2324 2009-07-09 rsc if(fd < 0 && strncmp(name, "/mnt/font/", 10) == 0)
19 9b4a2324 2009-07-09 rsc fd = _fontpipe(name+10);
20 9b4a2324 2009-07-09 rsc
21 76193d7c 2003-09-30 devnull if(fd < 0){
22 76193d7c 2003-09-30 devnull fprint(2, "getsubfont: can't open %s: %r\n", name);
23 76193d7c 2003-09-30 devnull return 0;
24 76193d7c 2003-09-30 devnull }
25 76193d7c 2003-09-30 devnull /*
26 76193d7c 2003-09-30 devnull * unlock display so i/o happens with display released, unless
27 76193d7c 2003-09-30 devnull * user is doing his own locking, in which case this could break things.
28 76193d7c 2003-09-30 devnull * _getsubfont is called only from string.c and stringwidth.c,
29 76193d7c 2003-09-30 devnull * which are known to be safe to have this done.
30 76193d7c 2003-09-30 devnull */
31 4e206880 2004-04-25 devnull if(d && d->locking == 0)
32 76193d7c 2003-09-30 devnull unlockdisplay(d);
33 4e206880 2004-04-25 devnull f = readsubfont(d, name, fd, d && d->locking==0);
34 4e206880 2004-04-25 devnull if(d && d->locking == 0)
35 76193d7c 2003-09-30 devnull lockdisplay(d);
36 76193d7c 2003-09-30 devnull if(f == 0)
37 76193d7c 2003-09-30 devnull fprint(2, "getsubfont: can't read %s: %r\n", name);
38 76193d7c 2003-09-30 devnull close(fd);
39 76193d7c 2003-09-30 devnull return f;
40 76193d7c 2003-09-30 devnull }