/********************************************************************* * wcsrtombs (MSVCRT.@) */ MSVCRT_size_t CDECL MSVCRT_wcsrtombs(char *mbstr, const MSVCRT_wchar_t **wcstr, MSVCRT_size_t count, MSVCRT_mbstate_t *mbstate) { if(mbstate) *mbstate = 0; return MSVCRT_wcsrtombs_l(mbstr, wcstr, count, NULL); }
/********************************************************************* * MSVCRT_wcsrtombs_s_l (INTERNAL) */ static int MSVCRT_wcsrtombs_s_l(MSVCRT_size_t *ret, char *mbstr, MSVCRT_size_t size, const MSVCRT_wchar_t **wcstr, MSVCRT_size_t count, MSVCRT__locale_t locale) { MSVCRT_size_t conv; if(!mbstr && !size && wcstr) { conv = MSVCRT_wcsrtombs_l(NULL, wcstr, 0, locale); if(ret) *ret = conv+1; return 0; } if (!MSVCRT_CHECK_PMT(wcstr != NULL) || !MSVCRT_CHECK_PMT(*wcstr != NULL) || !MSVCRT_CHECK_PMT(mbstr != NULL)) { if(mbstr && size) mbstr[0] = '\0'; *MSVCRT__errno() = MSVCRT_EINVAL; return MSVCRT_EINVAL; } if(count==MSVCRT__TRUNCATE || size<count) conv = size; else conv = count; conv = MSVCRT_wcsrtombs_l(mbstr, wcstr, conv, locale); if(conv<size) mbstr[conv++] = '\0'; else if(conv==size && (count==MSVCRT__TRUNCATE || mbstr[conv-1]=='\0')) mbstr[conv-1] = '\0'; else { MSVCRT_INVALID_PMT("mbstr[size] is too small"); if(size) mbstr[0] = '\0'; *MSVCRT__errno() = MSVCRT_ERANGE; return MSVCRT_ERANGE; } if(ret) *ret = conv; return 0; }
/********************************************************************* * wcstombs (MSVCRT.@) */ MSVCRT_size_t CDECL MSVCRT_wcstombs(char *mbstr, const MSVCRT_wchar_t *wcstr, MSVCRT_size_t count) { return MSVCRT_wcsrtombs_l(mbstr, &wcstr, count, NULL); }
/********************************************************************* * _wcstombs_l (MSVCRT.@) */ MSVCRT_size_t CDECL MSVCRT__wcstombs_l(char *mbstr, const MSVCRT_wchar_t *wcstr, MSVCRT_size_t count, MSVCRT__locale_t locale) { return MSVCRT_wcsrtombs_l(mbstr, &wcstr, count, locale); }