in win_unicode.c [1184:1234]
SQLLEN bindcol_hybrid_exec(SQLWCHAR *utf16, const char *ldt, size_t n, BOOL lf_conv, char **wcsbuf)
{
SQLLEN l = (-2);
get_convtype();
MYLOG(MIN_LOG_LEVEL, " size=" FORMAT_SIZE_T " lf_conv=%d\n", n, lf_conv);
#if defined(__WCS_ISO10646__)
if (use_wcs)
{
unsigned int *utf32 = NULL;
BOOL midbuf = (wcsbuf && *wcsbuf);
if (sizeof(SQLWCHAR) == sizeof(wchar_t))
{
if (midbuf)
l = msgtowstr(*wcsbuf, (wchar_t *) utf16, n);
else
l = msgtowstr(ldt, (wchar_t *) utf16, n);
}
else if (midbuf)
{
utf32 = (unsigned int *) *wcsbuf;
l = ucs4_to_ucs2_lf(utf32, -1, utf16, n, lf_conv);
}
else
{
int count = strlen(ldt);
utf32 = (unsigned int *) malloc((count + 1) * sizeof(unsigned int));
if ((l = msgtowstr(ldt, (wchar_t *) utf32, count + 1)) >= 0)
{
l = ucs4_to_ucs2_lf(utf32, -1, utf16, n, lf_conv);
}
free(utf32);
}
if (midbuf)
{
free(*wcsbuf);
*wcsbuf = NULL;
}
}
#endif /* __WCS_ISO10646__ */
#ifdef __CHAR16_UTF_16__
if (use_c16)
{
l = mbstoc16_lf((char16_t *) utf16, ldt, n, lf_conv);
}
#endif /* __CHAR16_UTF_16__ */
return l;
}