#include <windows.h>
#include <malloc.h>
#include <errno.h>
#include <msvcrt.h>
#include <stdio.h>

int __cdecl vsprintf_s (char *, size_t, const char *, va_list);
static int __cdecl _int_vsprintf_s (char *, size_t, const char *, va_list);
static int __cdecl _stub (char *, size_t, const char *, va_list);

int __cdecl (*__MINGW_IMP_SYMBOL(vsprintf_s))(char *, size_t, const char *, va_list) = 
 _stub;

static int __cdecl
_stub (char *_DstBuf, size_t _Size, const char *_Format, va_list _ArgList)
{
  int __cdecl (*f)(char *, size_t, const char *, va_list) = __MINGW_IMP_SYMBOL(vsprintf_s);

  if (f == _stub)
    {
	f = (int __cdecl (*)(char *, size_t, const char *, va_list))
	    GetProcAddress (__mingw_get_msvcrt_handle (), "vsprintf_s");
	if (!f)
	  f = _int_vsprintf_s;
	__MINGW_IMP_SYMBOL(vsprintf_s) = f;
    }
  return (*f)(_DstBuf, _Size, _Format, _ArgList);
}

int __cdecl
vsprintf_s (char *_DstBuf, size_t _Size, const char *_Format, va_list _ArgList)
{
  return _stub (_DstBuf, _Size, _Format, _ArgList);
}

static int __cdecl
_int_vsprintf_s (char *_DstBuf, size_t _Size, const char *_Format, va_list _ArgList)
{
  return __ms_vsnprintf (_DstBuf, _Size, _Format, _ArgList);
}
