I read a little about variadic functions in C/C++ and I found a thread that mentions to reuse a va_list in GCC you need to use a copy of it with va_copy and on the same thread they have suggested defining it with
#define va_copy(d,s) ((d) = (s))
Which means that it is simply assigning the value of va_list s to va_list d.
Wouldn't it be more readable to use va_list ap1 = va_list ap instead? What is the point of creating another function called va_copy?