1 /* This is a modfied version of va-arg-2.c to test passing a va_list as
2 a parameter to another function. */
3
4 #include <stdarg.h>
5
6 extern __SIZE_TYPE__ strlen (const char *);
7
8 int
to_hex(unsigned int a)9 to_hex (unsigned int a)
10 {
11 static char hex[] = "0123456789abcdef";
12
13 if (a > 15)
14 abort ();
15 return hex[a];
16 }
17
18 void
fap(int i,char * format,va_list ap)19 fap (int i, char* format, va_list ap)
20 {
21 if (strlen (format) != 16 - i)
22 abort ();
23 while (*format)
24 if (*format++ != to_hex (va_arg (ap, int)))
25 abort ();
26 }
27
28 void
f0(char * format,...)29 f0 (char* format, ...)
30 {
31 va_list ap;
32
33 va_start (ap, format);
34 fap(0, format, ap);
35 va_end(ap);
36 }
37
38 void
f1(int a1,char * format,...)39 f1 (int a1, char* format, ...)
40 {
41 va_list ap;
42
43 va_start(ap, format);
44 fap(1, format, ap);
45 va_end(ap);
46 }
47
48 void
f2(int a1,int a2,char * format,...)49 f2 (int a1, int a2, char* format, ...)
50 {
51 va_list ap;
52
53 va_start(ap, format);
54 fap(2, format, ap);
55 va_end(ap);
56 }
57
58 void
f3(int a1,int a2,int a3,char * format,...)59 f3 (int a1, int a2, int a3, char* format, ...)
60 {
61 va_list ap;
62
63 va_start(ap, format);
64 fap(3, format, ap);
65 va_end(ap);
66 }
67
68 void
f4(int a1,int a2,int a3,int a4,char * format,...)69 f4 (int a1, int a2, int a3, int a4, char* format, ...)
70 {
71 va_list ap;
72
73 va_start(ap, format);
74 fap(4, format, ap);
75 va_end(ap);
76 }
77
78 void
f5(int a1,int a2,int a3,int a4,int a5,char * format,...)79 f5 (int a1, int a2, int a3, int a4, int a5,
80 char* format, ...)
81 {
82 va_list ap;
83
84 va_start(ap, format);
85 fap(5, format, ap);
86 va_end(ap);
87 }
88
89 void
f6(int a1,int a2,int a3,int a4,int a5,int a6,char * format,...)90 f6 (int a1, int a2, int a3, int a4, int a5,
91 int a6,
92 char* format, ...)
93 {
94 va_list ap;
95
96 va_start(ap, format);
97 fap(6, format, ap);
98 va_end(ap);
99 }
100
101 void
f7(int a1,int a2,int a3,int a4,int a5,int a6,int a7,char * format,...)102 f7 (int a1, int a2, int a3, int a4, int a5,
103 int a6, int a7,
104 char* format, ...)
105 {
106 va_list ap;
107
108 va_start(ap, format);
109 fap(7, format, ap);
110 va_end(ap);
111 }
112
113 void
f8(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,char * format,...)114 f8 (int a1, int a2, int a3, int a4, int a5,
115 int a6, int a7, int a8,
116 char* format, ...)
117 {
118 va_list ap;
119
120 va_start(ap, format);
121 fap(8, format, ap);
122 va_end(ap);
123 }
124
125 void
f9(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,char * format,...)126 f9 (int a1, int a2, int a3, int a4, int a5,
127 int a6, int a7, int a8, int a9,
128 char* format, ...)
129 {
130 va_list ap;
131
132 va_start(ap, format);
133 fap(9, format, ap);
134 va_end(ap);
135 }
136
137 void
f10(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,char * format,...)138 f10 (int a1, int a2, int a3, int a4, int a5,
139 int a6, int a7, int a8, int a9, int a10,
140 char* format, ...)
141 {
142 va_list ap;
143
144 va_start(ap, format);
145 fap(10, format, ap);
146 va_end(ap);
147 }
148
149 void
f11(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,char * format,...)150 f11 (int a1, int a2, int a3, int a4, int a5,
151 int a6, int a7, int a8, int a9, int a10,
152 int a11,
153 char* format, ...)
154 {
155 va_list ap;
156
157 va_start(ap, format);
158 fap(11, format, ap);
159 va_end(ap);
160 }
161
162 void
f12(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,char * format,...)163 f12 (int a1, int a2, int a3, int a4, int a5,
164 int a6, int a7, int a8, int a9, int a10,
165 int a11, int a12,
166 char* format, ...)
167 {
168 va_list ap;
169
170 va_start(ap, format);
171 fap(12, format, ap);
172 va_end(ap);
173 }
174
175 void
f13(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,int a13,char * format,...)176 f13 (int a1, int a2, int a3, int a4, int a5,
177 int a6, int a7, int a8, int a9, int a10,
178 int a11, int a12, int a13,
179 char* format, ...)
180 {
181 va_list ap;
182
183 va_start(ap, format);
184 fap(13, format, ap);
185 va_end(ap);
186 }
187
188 void
f14(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,int a13,int a14,char * format,...)189 f14 (int a1, int a2, int a3, int a4, int a5,
190 int a6, int a7, int a8, int a9, int a10,
191 int a11, int a12, int a13, int a14,
192 char* format, ...)
193 {
194 va_list ap;
195
196 va_start(ap, format);
197 fap(14, format, ap);
198 va_end(ap);
199 }
200
201 void
f15(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,int a13,int a14,int a15,char * format,...)202 f15 (int a1, int a2, int a3, int a4, int a5,
203 int a6, int a7, int a8, int a9, int a10,
204 int a11, int a12, int a13, int a14, int a15,
205 char* format, ...)
206 {
207 va_list ap;
208
209 va_start(ap, format);
210 fap(15, format, ap);
211 va_end(ap);
212 }
213
main()214 main ()
215 {
216 char *f = "0123456789abcdef";
217
218 f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
219 f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
220 f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
221 f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
222 f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
223 f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
224 f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
225 f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
226 f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
227 f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
228 f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
229 f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
230 f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
231 f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
232 f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
233 f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
234
235 exit (0);
236 }
237