size_t _Locale_strxfrm(struct _Locale_collate *__loc, char *dest, size_t dest_n, const char *src, size_t src_n ) { const char *real_src; char *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); strncpy(buf, src, src_n); buf[src_n] = 0; real_src = buf; } else real_src = src; result = __strxfrm_l(dest, real_src, dest_n, (__c_locale)__loc); if (buf != NULL) free(buf); return result; }
size_t _Locale_strxfrm(struct _Locale_collate *__loc, char *dest, size_t dest_n, const char *src, size_t src_n ) { size_t n; n = __strxfrm_l( dest, src, dest_n, (__c_locale)__loc ); return n > src_n ? (size_t)-1 : n; /* dest[n] = 0? */ }