1 #ifndef MIDLTESTS_C_CODE
4 uuid("225b9fcb-eb3d-497b-8b0b-591f049a2507"),
5 pointer_default(unique)
9 typedef pipe char pipe_char
;
10 typedef pipe hyper pipe_hyper
;
15 typedef pipe structtype pipe_structtype
;
23 [out,ref] struct msg
*out1
,
24 [out] pipe_structtype outp
,
25 [in] pipe_structtype inp
,
29 long midltests_ping
( [in] struct msg in1
);
33 #elif MIDLTESTS_C_CODE
35 struct pipe_char_state
{
45 unsigned long * ecount
)
47 struct pipe_char_state
*state
= (struct pipe_char_state
*)_state
;
49 printf
("pull1:%s: esize[%u] ecount[%u]\n",
50 state
->name
, esize
, *ecount
);
51 *ecount
= state
->count
--;
52 if
(*ecount
> esize
) {
55 memset
(buf
, 0xDD, *ecount
* sizeof
(*buf
));
56 printf
("pull2:%s: esize[%u] ecount[%u]\n",
57 state
->name
, esize
, *ecount
);
65 struct pipe_char_state
*state
= (struct pipe_char_state
*)_state
;
67 printf
("push:%s: ecount[%u]\n",
74 unsigned char * * buf
,
75 unsigned long * bcount
)
77 struct pipe_char_state
*state
= (struct pipe_char_state
*)_state
;
79 printf
("alloc1:%s: bsize[%u], bcount[%u]\n",
80 state
->name
, bsize
, *bcount
);
81 *bcount
= bsize
/ sizeof
(**buf
);
82 *buf
= malloc
(*bcount
* sizeof
(**buf
));
83 printf
("alloc2:%s: bsize[%u], bcount[%u]\n",
84 state
->name
, bsize
, *bcount
);
87 struct pipe_hyper_state
{
97 unsigned long * ecount
)
99 struct pipe_hyper_state
*state
= (struct pipe_hyper_state
*)_state
;
101 printf
("pull1:%s: esize[%u] ecount[%u]\n",
102 state
->name
, esize
, *ecount
);
103 *ecount
= state
->count
--;
104 if
(*ecount
> esize
) {
107 memset
(buf
, 0xDD, *ecount
* sizeof
(*buf
));
108 printf
("pull2:%s: esize[%u] ecount[%u]\n",
109 state
->name
, esize
, *ecount
);
112 void pipe_hyper_push
(
115 unsigned long ecount
)
117 struct pipe_hyper_state
*state
= (struct pipe_hyper_state
*)_state
;
119 printf
("push:%s: ecount[%u]\n",
120 state
->name
, ecount
);
123 void pipe_hyper_alloc
(
127 unsigned long * bcount
)
129 struct pipe_hyper_state
*state
= (struct pipe_hyper_state
*)_state
;
131 printf
("alloc1:%s: bsize[%u], bcount[%u]\n",
132 state
->name
, bsize
, *bcount
);
133 *bcount
= bsize
/ sizeof
(**buf
);
134 *buf
= malloc
(*bcount
* sizeof
(**buf
));
135 printf
("alloc2:%s: bsize[%u], bcount[%u]\n",
136 state
->name
, bsize
, *bcount
);
138 struct pipe_structtype_state
{
144 void pipe_structtype_pull
(
148 unsigned long * ecount
)
150 struct pipe_structtype_state
*state
= (struct pipe_structtype_state
*)_state
;
152 printf
("pull1:%s: esize[%u] ecount[%u]\n",
153 state
->name
, esize
, *ecount
);
154 *ecount
= state
->count
--;
155 if
(*ecount
> esize
) {
158 memset
(buf
, 0xDD, *ecount
* sizeof
(*buf
));
159 printf
("pull2:%s: esize[%u] ecount[%u]\n",
160 state
->name
, esize
, *ecount
);
163 void pipe_structtype_push
(
166 unsigned long ecount
)
168 struct pipe_structtype_state
*state
= (struct pipe_structtype_state
*)_state
;
170 printf
("push:%s: ecount[%u]\n",
171 state
->name
, ecount
);
174 void pipe_structtype_alloc
(
178 unsigned long * bcount
)
180 struct pipe_structtype_state
*state
= (struct pipe_structtype_state
*)_state
;
182 printf
("alloc1:%s: bsize[%u], bcount[%u]\n",
183 state
->name
, bsize
, *bcount
);
184 *bcount
= bsize
/ sizeof
(**buf
);
185 *buf
= malloc
(*bcount
* sizeof
(**buf
));
186 printf
("alloc2:%s: bsize[%u], bcount[%u]\n",
187 state
->name
, bsize
, *bcount
);
189 static
void midltests
(void)
192 unsigned char out1b
[3];
193 struct pipe_structtype_state outs
;
194 pipe_structtype outp
;
195 struct pipe_structtype_state ins
;
198 unsigned char in1b
[3];
200 in1.l
= sizeof
(in1b
);
201 memset
(&in1b
, 0xAA, sizeof
(in1b
));
204 memset
(&outs
, 0, sizeof
(outs
));
206 memset
(&outp
, 0, sizeof
(outp
));
207 outp.pull
= pipe_structtype_pull
;
208 outp.push
= pipe_structtype_push
;
209 outp.alloc
= pipe_structtype_alloc
;
210 outp.state
= (char *)&outs
;
212 memset
(&ins
, 0, sizeof
(ins
));
215 memset
(&inp
, 0, sizeof
(inp
));
216 inp.pull
= pipe_structtype_pull
;
217 inp.push
= pipe_structtype_push
;
218 inp.alloc
= pipe_structtype_alloc
;
219 inp.state
= (char *)&ins
;
221 out1.l
= sizeof
(out1b
);
222 memset
(&out1b
, 0xFF, sizeof
(out1b
));
225 cli_midltests_ping
(in1
);
226 cli_midltests_fn
(&out1
, outp
, inp
, in1
);
229 long srv_midltests_fn
(
230 /* [ref][out] */ struct msg
*out1
,
231 /* [out] */ pipe_structtype outp
,
232 /* [in] */ pipe_structtype inp
,
233 /* [in] */ struct msg in1
)
236 unsigned long inb_len
= 0;
237 structtype
*outb
= NULL
;
238 unsigned long outb_size
= 0;
239 unsigned long outb_len
= 0;
241 printf
("srv_midltests_fn: Start\n");
244 inp.pull
(inp.state
, inb
, sizeof
(inb
), &inb_len
);
245 printf
("pull inp_len[%u]\n", inb_len
);
246 } while
(inb_len
> 0);
250 outp.alloc
(outp.state
, outb_size
, &outb
, &outb_len
);
251 memset
(outb
, 0xCC, outb_len
* sizeof
(*outb
));
252 outp.push
(outp.state
, outb
, outb_len
);
253 printf
("push outb_len[%u]\n", outb_len
);
256 } while
(outb_len
> 0);
259 out1
->m
= (unsigned char *)malloc
(out1
->l
);
260 memset
(out1
->m
, 0xBB, out1
->l
);
261 printf
("srv_midltests_fn: End\n");
265 long srv_midltests_ping
(
266 /* [in] */ struct msg in1
)
268 printf
("srv_midltests_fn: Start\n");
269 printf
("srv_midltests_fn: End\n");