#include <printf.h>
#include <wchar.h>

static bool swprintfhelp(void* pContext, const wchar_t* str, dword len)
{
	wchar_t** buffer = (wchar_t**) pContext;
	wcscpy(*buffer, str);
	*buffer += len;
	return true;
}

//! Copies a formatted string to a buffer, given a va_list of arguments.
/*!
 *	Use this function instead of swprintf() when a va_list is used, rather 
 *		than a variable list of parameters in the argument list.
  *	\param	fmt	The string to be processed. Conforms to normal wprintf() 
 *		specifications.
 *	\param	ptr	A va_list of the arguments that control the output.
 *	\return	The total number of characters copied.
 */
int vswprintf(wchar_t *buffer, const wchar_t *format, va_list argptr)
{
	return dowprintf(swprintfhelp, &buffer, format, argptr);
}

//! Copies a formatted string to a buffer.
/*!
 *	\param	fmt	The string to be processed. Conforms to normal wprintf() 
 *		specifications.
 *	\param	...	Arguments that control the output.
 *	\return	The total number of characters copied.
 */
int swprintf(wchar_t *buffer, const wchar_t *format, ...)
{
	va_list ptr;
	int ret;

	va_start(ptr, format);
	ret = vswprintf(buffer, format, ptr);
	va_end(ptr);
	return ret;
}