示例#1
0
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? */
}