Blame


1 6e527fbc 2005-02-13 devnull #include "std.h"
2 6e527fbc 2005-02-13 devnull #include "dat.h"
3 6e527fbc 2005-02-13 devnull
4 6e527fbc 2005-02-13 devnull static Ioproc *cache[5];
5 6e527fbc 2005-02-13 devnull static int ncache;
6 6e527fbc 2005-02-13 devnull
7 6e527fbc 2005-02-13 devnull static Ioproc*
8 6e527fbc 2005-02-13 devnull xioproc(void)
9 6e527fbc 2005-02-13 devnull {
10 6e527fbc 2005-02-13 devnull Ioproc *c;
11 6e527fbc 2005-02-13 devnull int i;
12 6e527fbc 2005-02-13 devnull
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;
17 6e527fbc 2005-02-13 devnull }
18 6e527fbc 2005-02-13 devnull }
19 6e527fbc 2005-02-13 devnull
20 6e527fbc 2005-02-13 devnull return ioproc();
21 6e527fbc 2005-02-13 devnull }
22 6e527fbc 2005-02-13 devnull
23 6e527fbc 2005-02-13 devnull static void
24 6e527fbc 2005-02-13 devnull closexioproc(Ioproc *io)
25 6e527fbc 2005-02-13 devnull {
26 6e527fbc 2005-02-13 devnull int i;
27 6e527fbc 2005-02-13 devnull
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;
31 6e527fbc 2005-02-13 devnull return;
32 6e527fbc 2005-02-13 devnull }
33 6e527fbc 2005-02-13 devnull
34 6e527fbc 2005-02-13 devnull closeioproc(io);
35 6e527fbc 2005-02-13 devnull }
36 6e527fbc 2005-02-13 devnull
37 6e527fbc 2005-02-13 devnull int
38 6e527fbc 2005-02-13 devnull xiodial(char *ds, char *local, char *dir, int *cfdp)
39 6e527fbc 2005-02-13 devnull {
40 6e527fbc 2005-02-13 devnull int fd;
41 6e527fbc 2005-02-13 devnull Ioproc *io;
42 6e527fbc 2005-02-13 devnull
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;
48 6e527fbc 2005-02-13 devnull }
49 6e527fbc 2005-02-13 devnull
50 6e527fbc 2005-02-13 devnull void
51 6e527fbc 2005-02-13 devnull xioclose(int fd)
52 6e527fbc 2005-02-13 devnull {
53 6e527fbc 2005-02-13 devnull Ioproc *io;
54 6e527fbc 2005-02-13 devnull
55 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil){
56 6e527fbc 2005-02-13 devnull close(fd);
57 6e527fbc 2005-02-13 devnull return;
58 6e527fbc 2005-02-13 devnull }
59 6e527fbc 2005-02-13 devnull
60 6e527fbc 2005-02-13 devnull ioclose(io, fd);
61 6e527fbc 2005-02-13 devnull closexioproc(io);
62 6e527fbc 2005-02-13 devnull }
63 6e527fbc 2005-02-13 devnull
64 6e527fbc 2005-02-13 devnull int
65 6e527fbc 2005-02-13 devnull xiowrite(int fd, void *v, int n)
66 6e527fbc 2005-02-13 devnull {
67 6e527fbc 2005-02-13 devnull int m;
68 6e527fbc 2005-02-13 devnull Ioproc *io;
69 6e527fbc 2005-02-13 devnull
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;
77 6e527fbc 2005-02-13 devnull }
78 6e527fbc 2005-02-13 devnull
79 6e527fbc 2005-02-13 devnull static long
80 6e527fbc 2005-02-13 devnull _ioauthdial(va_list *arg)
81 6e527fbc 2005-02-13 devnull {
82 6e527fbc 2005-02-13 devnull char *net;
83 6e527fbc 2005-02-13 devnull char *dom;
84 6e527fbc 2005-02-13 devnull int fd;
85 6e527fbc 2005-02-13 devnull
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;
92 6e527fbc 2005-02-13 devnull }
93 6e527fbc 2005-02-13 devnull
94 6e527fbc 2005-02-13 devnull int
95 6e527fbc 2005-02-13 devnull xioauthdial(char *net, char *dom)
96 6e527fbc 2005-02-13 devnull {
97 6e527fbc 2005-02-13 devnull int fd;
98 6e527fbc 2005-02-13 devnull Ioproc *io;
99 6e527fbc 2005-02-13 devnull
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;
105 6e527fbc 2005-02-13 devnull }
106 6e527fbc 2005-02-13 devnull
107 6e527fbc 2005-02-13 devnull static long
108 6e527fbc 2005-02-13 devnull _ioasrdresp(va_list *arg)
109 6e527fbc 2005-02-13 devnull {
110 6e527fbc 2005-02-13 devnull int fd;
111 6e527fbc 2005-02-13 devnull void *a;
112 6e527fbc 2005-02-13 devnull int n;
113 6e527fbc 2005-02-13 devnull
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);
117 6e527fbc 2005-02-13 devnull
118 6e527fbc 2005-02-13 devnull return _asrdresp(fd, a, n);
119 6e527fbc 2005-02-13 devnull }
120 6e527fbc 2005-02-13 devnull
121 6e527fbc 2005-02-13 devnull int
122 6e527fbc 2005-02-13 devnull xioasrdresp(int fd, void *a, int n)
123 6e527fbc 2005-02-13 devnull {
124 6e527fbc 2005-02-13 devnull Ioproc *io;
125 6e527fbc 2005-02-13 devnull
126 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
127 6e527fbc 2005-02-13 devnull return -1;
128 6e527fbc 2005-02-13 devnull
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;
132 6e527fbc 2005-02-13 devnull }
133 6e527fbc 2005-02-13 devnull
134 6e527fbc 2005-02-13 devnull static long
135 6e527fbc 2005-02-13 devnull _ioasgetticket(va_list *arg)
136 6e527fbc 2005-02-13 devnull {
137 6e527fbc 2005-02-13 devnull int asfd;
138 6e527fbc 2005-02-13 devnull char *trbuf;
139 6e527fbc 2005-02-13 devnull char *tbuf;
140 6e527fbc 2005-02-13 devnull
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*);
144 6e527fbc 2005-02-13 devnull
145 6e527fbc 2005-02-13 devnull return _asgetticket(asfd, trbuf, tbuf);
146 6e527fbc 2005-02-13 devnull }
147 6e527fbc 2005-02-13 devnull
148 6e527fbc 2005-02-13 devnull int
149 6e527fbc 2005-02-13 devnull xioasgetticket(int fd, char *trbuf, char *tbuf)
150 6e527fbc 2005-02-13 devnull {
151 6e527fbc 2005-02-13 devnull int n;
152 6e527fbc 2005-02-13 devnull Ioproc *io;
153 6e527fbc 2005-02-13 devnull
154 6e527fbc 2005-02-13 devnull if((io = xioproc()) == nil)
155 6e527fbc 2005-02-13 devnull return -1;
156 6e527fbc 2005-02-13 devnull
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)
160 6e527fbc 2005-02-13 devnull n = -1;
161 6e527fbc 2005-02-13 devnull else
162 6e527fbc 2005-02-13 devnull n = 0;
163 6e527fbc 2005-02-13 devnull return n;
164 6e527fbc 2005-02-13 devnull }
165 6e527fbc 2005-02-13 devnull