in win_unicode.c [1133:1182]
SQLLEN bindcol_hybrid_estimate(const char *ldt, BOOL lf_conv, char **wcsbuf)
{
SQLLEN l = (-2);
get_convtype();
MYLOG(MIN_LOG_LEVEL, " lf_conv=%d\n", lf_conv);
#if defined(__WCS_ISO10646__)
if (use_wcs)
{
unsigned int *utf32 = NULL;
if (sizeof(SQLWCHAR) == sizeof(wchar_t))
{
l = msgtowstr(ldt, (wchar_t *) NULL, 0);
if (l >= 0 && lf_conv)
{
BOOL changed;
size_t len;
len = convert_linefeeds(ldt, NULL, 0, TRUE, &changed);
if (changed)
{
l += (len - strlen(ldt));
*wcsbuf = (char *) malloc(len + 1);
convert_linefeeds(ldt, *wcsbuf, len + 1, TRUE, NULL);
}
}
}
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, NULL, 0, lf_conv);
*wcsbuf = (char *) utf32;
}
}
if (l < 0 && NULL != utf32)
free(utf32);
}
#endif /* __WCS_ISO10646__ */
#ifdef __CHAR16_UTF_16__
if (use_c16)
l = mbstoc16_lf((char16_t *) NULL, ldt, 0, lf_conv);
#endif /* __CHAR16_UTF_16__ */
return l;
}