in win_unicode.c [899:929]
SQLLEN mbstoc16_lf(char16_t *c16dt, const char *c8dt, size_t n, BOOL lf_conv)
{
int i;
size_t brtn;
const char *cdt;
mbstate_t mbst = initial_state;
MYLOG(MIN_LOG_LEVEL, " c16dt=%p size=" FORMAT_SIZE_T "\n", c16dt, n);
for (i = 0, cdt = c8dt; i < n || (!c16dt); i++)
{
if (lf_conv && PG_LINEFEED == *cdt && i > 0 && PG_CARRIAGE_RETURN != cdt[-1])
{
if (c16dt)
c16dt[i] = PG_CARRIAGE_RETURN;
i++;
}
brtn = mbrtoc16(c16dt ? c16dt + i : NULL, cdt, 4, &mbst);
if (0 == brtn)
break;
if (brtn == (size_t) -1 ||
brtn == (size_t) -2)
return -1;
if (brtn == (size_t) -3)
continue;
cdt += brtn;
}
if (c16dt && i >= n)
c16dt[n - 1] = 0;
return i;
}