-int icu_utf16_casemap(struct icu_buf_utf16 * dest16,
- struct icu_buf_utf16 * src16,
- const char *locale, char action,
- UErrorCode *status)
-{
- int32_t dest16_len = 0;
-
- switch(action) {
- case 'l':
- dest16_len = u_strToLower(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- locale, status);
- break;
- case 'u':
- dest16_len = u_strToUpper(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- locale, status);
- break;
- case 't':
- dest16_len = u_strToTitle(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- 0, locale, status);
- break;
- case 'f':
- dest16_len = u_strFoldCase(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- U_FOLD_CASE_DEFAULT, status);
- break;
-
- default:
- return U_UNSUPPORTED_ERROR;
- break;
- }
-
- // check for buffer overflow, resize and retry
- if (*status == U_BUFFER_OVERFLOW_ERROR
- //|| dest16_len > dest16->utf16_cap
- ){
- icu_buf_utf16_resize(dest16, dest16_len * 2);
- *status = U_ZERO_ERROR;
-
-
- switch(action) {
- case 'l':
- dest16_len = u_strToLower(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- locale, status);
- break;
- case 'u':
- dest16_len = u_strToUpper(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- locale, status);
- break;
- case 't':
- dest16_len = u_strToTitle(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- 0, locale, status);
- break;
- case 'f':
- dest16_len = u_strFoldCase(dest16->utf16, dest16->utf16_cap,
- src16->utf16, src16->utf16_len,
- U_FOLD_CASE_DEFAULT, status);
- break;
-
- default:
- return U_UNSUPPORTED_ERROR;
- break;
- }
- }
-
- if (U_SUCCESS(*status)
- && dest16_len < dest16->utf16_cap)
- dest16->utf16_len = dest16_len;
- else {
- dest16->utf16[0] = (UChar) 0;
- dest16->utf16_len = 0;
- }
-
- return *status;
-};
-
-