Fix vsnprintf usage

After a call to vsnprintf, argptr cannot be reused without another va_start
MSVC vsnprintf has different semantics from POSIX