1#include <stdio.h>
2#include <stdarg.h>
3
4struct spurious
5{
6    int anumber;
7};
8
9int first(char *buf, char *fmt, ...)
10{
11  int pos, number;
12  va_list args;
13  int dummy;
14  char *bp = buf;
15
16  va_start(args, fmt);
17  for (pos = 0; fmt[pos]; pos++)
18    if (fmt[pos] == 'i')
19      {
20	number = va_arg(args, int);
21	sprintf(bp, "%d", number);
22	bp += strlen(bp);
23      }
24    else
25      *bp++ = fmt[pos];
26
27  va_end(args);
28  *bp = 0;
29  return dummy;
30}
31
32struct spurious second(char *buf,char *fmt, ...)
33{
34  int pos, number;
35  va_list args;
36  struct spurious dummy;
37  char *bp = buf;
38
39  va_start(args, fmt);
40  for (pos = 0; fmt[pos]; pos++)
41    if (fmt[pos] == 'i')
42      {
43	number = va_arg(args, int);
44	sprintf(bp, "%d", number);
45	bp += strlen(bp);
46      }
47    else
48      *bp++ = fmt[pos];
49
50  va_end(args);
51  *bp = 0;
52  return dummy;
53}
54
55main()
56{
57  char buf1[100], buf2[100];
58  first(buf1, "i i ", 5, 20);
59  second(buf2, "i i ", 5, 20);
60  if (strcmp ("5 20 ", buf1) || strcmp ("5 20 ", buf2))
61    abort();
62  exit(0);
63}
64