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