1 #include <stdio.h>
2 #include <stdarg.h>
3 
4 struct spurious
5 {
6     int anumber;
7 };
8 
first(char * buf,char * fmt,...)9 int 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 
second(char * buf,char * fmt,...)32 struct 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 
main()55 main()
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