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