size_t _Locale_strwxfrm( struct _Locale_collate *__loc, wchar_t *dest, size_t dest_n, const wchar_t *src, size_t src_n ) { const wchar_t *real_src; wchar_t *buf = NULL; size_t result; if (src_n == 0) { if (dest != NULL) dest[0] = 0; return 0; } if (src[src_n] != 0) { buf = malloc((src_n + 1) * sizeof(wchar_t)); wcsncpy(buf, src, src_n); buf[src_n] = 0; real_src = buf; } else real_src = src; result = __wcsxfrm_l(dest, real_src, dest_n, (__c_locale)__loc); if (buf != NULL) free(buf); return result; }
size_t _Locale_strwxfrm( struct _Locale_collate *__loc, wchar_t *dest, size_t dest_n, const wchar_t *src, size_t src_n ) { size_t n; n = __wcsxfrm_l( dest, src, dest_n, (__c_locale)__loc ); return n > src_n ? (size_t)-1 : n; /* dest[n] = 0? */ }