1 6e527fbc 2005-02-13 devnull #include "std.h"
2 6e527fbc 2005-02-13 devnull #include "dat.h"
4 6e527fbc 2005-02-13 devnull static Ioproc *cache[5];
5 6e527fbc 2005-02-13 devnull static int ncache;
7 6e527fbc 2005-02-13 devnull static Ioproc*
8 6e527fbc 2005-02-13 devnull xioproc(void)
10 6e527fbc 2005-02-13 devnull Ioproc *c;
13 6e527fbc 2005-02-13 devnull for(i=0; i<ncache; i++){
14 6e527fbc 2005-02-13 devnull if(c = cache[i]){
15 6e527fbc 2005-02-13 devnull cache[i] = nil;
16 6e527fbc 2005-02-13 devnull return c;
20 6e527fbc 2005-02-13 devnull return ioproc();
23 6e527fbc 2005-02-13 devnull static void
24 6e527fbc 2005-02-13 devnull closexioproc(Ioproc *io)
28 6e527fbc 2005-02-13 devnull for(i=0; i<ncache; i++)
29 6e527fbc 2005-02-13 devnull if(cache[i] == nil){
30 6e527fbc 2005-02-13 devnull cache[i] = io;
34 6e527fbc 2005-02-13 devnull closeioproc(io);
38 6e527fbc 2005-02-13 devnull xiodial(char *ds, char *local, char *dir, int *cfdp)
41 6e527fbc 2005-02-13 devnull Ioproc *io;
43 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
44 6e527fbc 2005-02-13 devnull return -1;
45 6e527fbc 2005-02-13 devnull fd = iodial(io, ds, local, dir, cfdp);
46 6e527fbc 2005-02-13 devnull closexioproc(io);
47 6e527fbc 2005-02-13 devnull return fd;
51 6e527fbc 2005-02-13 devnull xioclose(int fd)
53 6e527fbc 2005-02-13 devnull Ioproc *io;
55 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil){
56 6e527fbc 2005-02-13 devnull close(fd);
60 6e527fbc 2005-02-13 devnull ioclose(io, fd);
61 6e527fbc 2005-02-13 devnull closexioproc(io);
65 6e527fbc 2005-02-13 devnull xiowrite(int fd, void *v, int n)
68 6e527fbc 2005-02-13 devnull Ioproc *io;
70 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
71 6e527fbc 2005-02-13 devnull return -1;
72 6e527fbc 2005-02-13 devnull m = iowrite(io, fd, v, n);
73 6e527fbc 2005-02-13 devnull closexioproc(io);
74 6e527fbc 2005-02-13 devnull if(m != n)
75 6e527fbc 2005-02-13 devnull return -1;
76 6e527fbc 2005-02-13 devnull return n;
79 6e527fbc 2005-02-13 devnull static long
80 6e527fbc 2005-02-13 devnull _ioauthdial(va_list *arg)
82 6e527fbc 2005-02-13 devnull char *net;
83 6e527fbc 2005-02-13 devnull char *dom;
86 6e527fbc 2005-02-13 devnull net = va_arg(*arg, char*);
87 6e527fbc 2005-02-13 devnull dom = va_arg(*arg, char*);
88 6e527fbc 2005-02-13 devnull fd = _authdial(net, dom);
89 6e527fbc 2005-02-13 devnull if(fd < 0)
90 6e527fbc 2005-02-13 devnull fprint(2, "authdial: %r\n");
91 6e527fbc 2005-02-13 devnull return fd;
95 6e527fbc 2005-02-13 devnull xioauthdial(char *net, char *dom)
98 6e527fbc 2005-02-13 devnull Ioproc *io;
100 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
101 6e527fbc 2005-02-13 devnull return -1;
102 6e527fbc 2005-02-13 devnull fd = iocall(io, _ioauthdial, net, dom);
103 6e527fbc 2005-02-13 devnull closexioproc(io);
104 6e527fbc 2005-02-13 devnull return fd;
107 6e527fbc 2005-02-13 devnull static long
108 6e527fbc 2005-02-13 devnull _ioasrdresp(va_list *arg)
111 6e527fbc 2005-02-13 devnull void *a;
114 6e527fbc 2005-02-13 devnull fd = va_arg(*arg, int);
115 6e527fbc 2005-02-13 devnull a = va_arg(*arg, void*);
116 6e527fbc 2005-02-13 devnull n = va_arg(*arg, int);
118 6e527fbc 2005-02-13 devnull return _asrdresp(fd, a, n);
122 6e527fbc 2005-02-13 devnull xioasrdresp(int fd, void *a, int n)
124 6e527fbc 2005-02-13 devnull Ioproc *io;
126 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
127 6e527fbc 2005-02-13 devnull return -1;
129 6e527fbc 2005-02-13 devnull n = iocall(io, _ioasrdresp, fd, a, n);
130 6e527fbc 2005-02-13 devnull closexioproc(io);
131 6e527fbc 2005-02-13 devnull return n;
134 6e527fbc 2005-02-13 devnull static long
135 6e527fbc 2005-02-13 devnull _ioasgetticket(va_list *arg)
137 6e527fbc 2005-02-13 devnull int asfd;
138 6e527fbc 2005-02-13 devnull char *trbuf;
139 6e527fbc 2005-02-13 devnull char *tbuf;
141 6e527fbc 2005-02-13 devnull asfd = va_arg(*arg, int);
142 6e527fbc 2005-02-13 devnull trbuf = va_arg(*arg, char*);
143 6e527fbc 2005-02-13 devnull tbuf = va_arg(*arg, char*);
145 6e527fbc 2005-02-13 devnull return _asgetticket(asfd, trbuf, tbuf);
149 6e527fbc 2005-02-13 devnull xioasgetticket(int fd, char *trbuf, char *tbuf)
152 6e527fbc 2005-02-13 devnull Ioproc *io;
154 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
155 6e527fbc 2005-02-13 devnull return -1;
157 6e527fbc 2005-02-13 devnull n = iocall(io, _ioasgetticket, fd, trbuf, tbuf);
158 6e527fbc 2005-02-13 devnull closexioproc(io);
159 6e527fbc 2005-02-13 devnull if(n != 2*TICKETLEN)
163 6e527fbc 2005-02-13 devnull return n;