2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <unicode/ustring.h>
18 #include <utils_i18n_ustring.h>
19 #include <utils_i18n_private.h>
21 int32_t i18n_ustring_get_length ( const i18n_uchar *s )
24 set_last_result(I18N_ERROR_INVALID_PARAMETER);
28 set_last_result(I18N_ERROR_NONE);
32 int32_t i18n_ustring_count_char32 ( const i18n_uchar *s, int32_t length )
34 if(s == NULL || length < -1) {
35 set_last_result(I18N_ERROR_INVALID_PARAMETER);
39 set_last_result(I18N_ERROR_NONE);
40 return u_countChar32(s, length);
43 i18n_ubool i18n_ustring_has_more_char32_than ( const i18n_uchar *s, int32_t length, int32_t number )
45 if(s == NULL || length < -1) {
46 set_last_result(I18N_ERROR_INVALID_PARAMETER);
50 set_last_result(I18N_ERROR_NONE);
51 return u_strHasMoreChar32Than(s, length, number);
54 i18n_uchar* i18n_ustring_cat ( i18n_uchar *dest, const i18n_uchar *src )
56 if(dest == NULL || src == NULL) {
57 set_last_result(I18N_ERROR_INVALID_PARAMETER);
61 set_last_result(I18N_ERROR_NONE);
62 return u_strcat(dest, src);
65 i18n_uchar * i18n_ustring_cat_n ( i18n_uchar *dest, const i18n_uchar *src, int32_t n )
67 if(dest == NULL || src == NULL) {
68 set_last_result(I18N_ERROR_INVALID_PARAMETER);
72 set_last_result(I18N_ERROR_NONE);
73 return u_strncat(dest, src, n);
76 i18n_uchar* i18n_ustring_string ( const i18n_uchar *s, const i18n_uchar *sub_string )
79 set_last_result(I18N_ERROR_INVALID_PARAMETER);
83 set_last_result(I18N_ERROR_NONE);
84 return (i18n_uchar*)u_strstr(s, sub_string);
87 i18n_uchar* i18n_ustring_find_first ( const i18n_uchar *s, int32_t length, const i18n_uchar *sub_string, int32_t sub_length )
89 if(s == NULL || length < -1) {
90 set_last_result(I18N_ERROR_INVALID_PARAMETER);
94 set_last_result(I18N_ERROR_NONE);
95 return u_strFindFirst(s, length, sub_string, sub_length);
98 i18n_uchar* i18n_ustring_char ( const i18n_uchar *s, i18n_uchar c )
101 set_last_result(I18N_ERROR_INVALID_PARAMETER);
105 set_last_result(I18N_ERROR_NONE);
106 return (i18n_uchar*)u_strchr(s, c);
109 i18n_uchar* i18n_ustring_char32 ( const i18n_uchar *s, i18n_uchar32 c )
112 set_last_result(I18N_ERROR_INVALID_PARAMETER);
116 set_last_result(I18N_ERROR_NONE);
117 return (i18n_uchar*)u_strchr32(s, c);
120 i18n_uchar* i18n_ustring_r_string ( const i18n_uchar *s, const i18n_uchar *sub_string )
123 set_last_result(I18N_ERROR_INVALID_PARAMETER);
127 set_last_result(I18N_ERROR_NONE);
128 return (i18n_uchar*)u_strrstr(s, sub_string);
131 i18n_uchar* i18n_ustring_find_last( const i18n_uchar *s, int32_t length, const i18n_uchar *sub_string, int32_t sub_length )
133 if(s == NULL || length < -1) {
134 set_last_result(I18N_ERROR_INVALID_PARAMETER);
138 set_last_result(I18N_ERROR_NONE);
139 return (i18n_uchar*)u_strFindLast(s, length, sub_string, sub_length);
142 i18n_uchar* i18n_ustring_r_char ( const i18n_uchar *s, i18n_uchar c )
145 set_last_result(I18N_ERROR_INVALID_PARAMETER);
149 set_last_result(I18N_ERROR_NONE);
150 return (i18n_uchar*)u_strrchr(s, c);
153 i18n_uchar* i18n_ustring_r_char32 ( const i18n_uchar *s, i18n_uchar32 c )
156 set_last_result(I18N_ERROR_INVALID_PARAMETER);
160 set_last_result(I18N_ERROR_NONE);
161 return (i18n_uchar*)u_strrchr32(s, c);
164 i18n_uchar* i18n_ustring_pbrk ( const i18n_uchar *string, const i18n_uchar *match_set )
166 if(string == NULL || match_set == NULL) {
167 set_last_result(I18N_ERROR_INVALID_PARAMETER);
171 set_last_result(I18N_ERROR_NONE);
172 return (i18n_uchar*)u_strpbrk(string, match_set);
175 int32_t i18n_ustring_cspn ( const i18n_uchar *string, const i18n_uchar *match_set )
177 if(string == NULL || match_set == NULL) {
178 set_last_result(I18N_ERROR_INVALID_PARAMETER);
182 set_last_result(I18N_ERROR_NONE);
183 return u_strcspn(string, match_set);
186 int32_t i18n_ustring_spn ( const i18n_uchar *string, const i18n_uchar *match_set )
188 if(string == NULL || match_set == NULL) {
189 set_last_result(I18N_ERROR_INVALID_PARAMETER);
193 set_last_result(I18N_ERROR_NONE);
194 return u_strspn(string, match_set);
197 i18n_uchar* i18n_ustring_tokenizer_r ( i18n_uchar *src, const i18n_uchar *delim, i18n_uchar **save_state )
199 if((src == NULL && save_state == NULL) || delim == NULL) {
200 set_last_result(I18N_ERROR_INVALID_PARAMETER);
204 set_last_result(I18N_ERROR_NONE);
205 return u_strtok_r(src, delim, save_state);
208 int32_t i18n_ustring_compare ( const i18n_uchar *s1, const i18n_uchar *s2 )
210 if(s1 == NULL || s2 == NULL) {
211 set_last_result(I18N_ERROR_INVALID_PARAMETER);
215 set_last_result(I18N_ERROR_NONE);
216 return u_strcmp (s1, s2);
219 int32_t i18n_ustring_compare_code_point_order( const i18n_uchar *s1, const i18n_uchar *s2 )
221 if(s1 == NULL || s2 == NULL) {
222 set_last_result(I18N_ERROR_INVALID_PARAMETER);
226 set_last_result(I18N_ERROR_NONE);
227 return u_strcmpCodePointOrder(s1, s2);
230 int32_t i18n_ustring_compare_binary_order( const i18n_uchar *s1, int32_t length1, const i18n_uchar *s2, int32_t length2, i18n_ubool code_point_order )
232 if(s1 == NULL || s2 == NULL) {
233 set_last_result(I18N_ERROR_INVALID_PARAMETER);
237 set_last_result(I18N_ERROR_NONE);
238 return u_strCompare(s1, length1, s2, length2, code_point_order);
241 int32_t i18n_ustring_case_compare_with_length( const i18n_uchar *s1, int32_t length1, const i18n_uchar *s2, int32_t length2, uint32_t options, i18n_error_code_e *i18n_error )
243 UErrorCode icu_error = U_ZERO_ERROR;
244 int32_t result = u_strCaseCompare(s1, length1, s2, length2, options, &icu_error);
245 *i18n_error = _i18n_error_mapping(icu_error);
246 set_last_result(*i18n_error);
251 int32_t i18n_ustring_compare_n( const i18n_uchar *s1, const i18n_uchar *s2, int32_t n )
253 if(s1 == NULL || s2 == NULL) {
254 set_last_result(I18N_ERROR_INVALID_PARAMETER);
258 set_last_result(I18N_ERROR_NONE);
259 return u_strncmp(s1, s2, n);
262 int32_t i18n_ustring_compare_n_code_point_order( const i18n_uchar *s1, const i18n_uchar *s2, int32_t n )
264 if(s1 == NULL || s2 == NULL) {
265 set_last_result(I18N_ERROR_INVALID_PARAMETER);
269 set_last_result(I18N_ERROR_NONE);
270 return u_strncmpCodePointOrder(s1, s2, n);
273 int32_t i18n_ustring_case_compare( const i18n_uchar *s1, const i18n_uchar *s2, uint32_t options )
275 if(s1 == NULL || s2 == NULL) {
276 set_last_result(I18N_ERROR_INVALID_PARAMETER);
280 set_last_result(I18N_ERROR_NONE);
281 return u_strcasecmp(s1, s2, options);
284 int32_t i18n_ustring_case_compare_n( const i18n_uchar *s1, const i18n_uchar *s2, int32_t n, uint32_t options )
286 if(s1 == NULL || s2 == NULL) {
287 set_last_result(I18N_ERROR_INVALID_PARAMETER);
291 set_last_result(I18N_ERROR_NONE);
292 return u_strncasecmp(s1, s2, n, options);
295 int32_t i18n_ustring_mem_case_compare( const i18n_uchar *s1, const i18n_uchar *s2, int32_t length, uint32_t options )
297 if(s1 == NULL || s2 == NULL) {
298 set_last_result(I18N_ERROR_INVALID_PARAMETER);
302 set_last_result(I18N_ERROR_NONE);
303 return u_memcasecmp(s1, s2, length, options);
306 i18n_uchar* i18n_ustring_copy ( i18n_uchar *dest, const i18n_uchar *src )
308 if(dest == NULL || src == NULL) {
309 set_last_result(I18N_ERROR_INVALID_PARAMETER);
313 set_last_result(I18N_ERROR_NONE);
314 return u_strcpy(dest, src);
317 i18n_uchar* i18n_ustring_copy_n ( i18n_uchar *dest, const i18n_uchar *src, int32_t n )
319 if(dest == NULL || src == NULL) {
320 set_last_result(I18N_ERROR_INVALID_PARAMETER);
324 set_last_result(I18N_ERROR_NONE);
325 return u_strncpy(dest, src, n);
328 i18n_uchar* i18n_ustring_copy_ua ( i18n_uchar *dest, const char *src )
330 if(dest == NULL || src == NULL) {
331 set_last_result(I18N_ERROR_INVALID_PARAMETER);
335 set_last_result(I18N_ERROR_NONE);
336 return u_uastrcpy(dest, src);
339 i18n_uchar* i18n_ustring_copy_ua_n ( i18n_uchar *dest, const char *src, int32_t n )
341 if(dest == NULL || src == NULL) {
342 set_last_result(I18N_ERROR_INVALID_PARAMETER);
346 set_last_result(I18N_ERROR_NONE);
347 return u_uastrncpy(dest, src, n);
350 char* i18n_ustring_copy_au ( char *dest, const i18n_uchar *src )
352 if(dest == NULL || src == NULL) {
353 set_last_result(I18N_ERROR_INVALID_PARAMETER);
357 set_last_result(I18N_ERROR_NONE);
358 return u_austrcpy(dest, src);
361 char* i18n_ustring_copy_au_n ( char *dest, const i18n_uchar *src, int32_t n )
363 if(dest == NULL || src == NULL) {
364 set_last_result(I18N_ERROR_INVALID_PARAMETER);
368 set_last_result(I18N_ERROR_NONE);
369 return u_austrncpy(dest, src, n);
372 i18n_uchar* i18n_ustring_mem_copy ( i18n_uchar *dest, const i18n_uchar *src, int32_t count )
374 if(dest == NULL || src == NULL) {
375 set_last_result(I18N_ERROR_INVALID_PARAMETER);
379 set_last_result(I18N_ERROR_NONE);
380 return u_memcpy(dest, src, count);
383 i18n_uchar* i18n_ustring_mem_move ( i18n_uchar *dest, const i18n_uchar *src, int32_t count )
385 if(dest == NULL || src == NULL) {
386 set_last_result(I18N_ERROR_INVALID_PARAMETER);
390 set_last_result(I18N_ERROR_NONE);
391 return u_memmove(dest, src, count);
394 i18n_uchar* i18n_ustring_mem_set ( i18n_uchar *dest, const i18n_uchar c, int32_t count )
397 set_last_result(I18N_ERROR_INVALID_PARAMETER);
401 set_last_result(I18N_ERROR_NONE);
402 return u_memset(dest, c, count);
405 int32_t i18n_ustring_mem_compare ( const i18n_uchar *buf1, const i18n_uchar *buf2, int32_t count )
407 if(buf1 == NULL || buf2 == NULL) {
408 set_last_result(I18N_ERROR_INVALID_PARAMETER);
412 set_last_result(I18N_ERROR_NONE);
413 return u_memcmp(buf1, buf2, count);
416 int32_t i18n_ustring_mem_compare_code_point_order ( const i18n_uchar *s1, const i18n_uchar *s2, int32_t count )
418 if(s1 == NULL || s2 == NULL) {
419 set_last_result(I18N_ERROR_INVALID_PARAMETER);
423 set_last_result(I18N_ERROR_NONE);
424 return u_memcmpCodePointOrder(s1, s2, count);
427 i18n_uchar* i18n_ustring_mem_char ( const i18n_uchar *s, i18n_uchar c, int32_t count )
430 set_last_result(I18N_ERROR_INVALID_PARAMETER);
434 set_last_result(I18N_ERROR_NONE);
435 return (i18n_uchar*)u_memchr(s, c, count);
438 i18n_uchar* i18n_ustring_mem_char32 ( const i18n_uchar *s, i18n_uchar32 c, int32_t count )
441 set_last_result(I18N_ERROR_INVALID_PARAMETER);
445 set_last_result(I18N_ERROR_NONE);
446 return (i18n_uchar*)u_memchr32(s, c, count);
449 i18n_uchar* i18n_ustring_mem_r_char ( const i18n_uchar *s, i18n_uchar c, int32_t count )
452 set_last_result(I18N_ERROR_INVALID_PARAMETER);
456 set_last_result(I18N_ERROR_NONE);
457 return (i18n_uchar*)u_memrchr(s, c, count);
460 i18n_uchar* i18n_ustring_mem_r_char32 ( const i18n_uchar *s, i18n_uchar32 c, int32_t count )
463 set_last_result(I18N_ERROR_INVALID_PARAMETER);
467 set_last_result(I18N_ERROR_NONE);
468 return (i18n_uchar*)u_memrchr32(s, c, count);
471 int32_t i18n_ustring_unescape ( const char *src, i18n_uchar *dest, int32_t dest_capacity )
473 if(dest == NULL || src == NULL) {
474 set_last_result(I18N_ERROR_INVALID_PARAMETER);
478 set_last_result(I18N_ERROR_NONE);
479 return u_unescape(src, dest, dest_capacity);
482 i18n_uchar32 i18n_ustring_unescape_at ( i18n_ustring_unescape_char_at_cb char_at, int32_t *offset, int32_t length, void *context )
484 if(char_at == NULL || offset == NULL) {
485 set_last_result(I18N_ERROR_INVALID_PARAMETER);
489 set_last_result(I18N_ERROR_NONE);
490 return u_unescapeAt(char_at, offset, length, context);
493 int32_t i18n_ustring_to_upper ( i18n_uchar *dest, int32_t dest_capacity, const i18n_uchar *src, int32_t src_len, const char *locale, i18n_error_code_e *i18n_error )
495 UErrorCode icu_error = U_ZERO_ERROR;
496 int32_t result = u_strToUpper (dest, dest_capacity, src, src_len, locale, &icu_error);
497 *i18n_error = _i18n_error_mapping(icu_error);
498 set_last_result(*i18n_error);
503 int32_t i18n_ustring_to_lower ( i18n_uchar *dest, int32_t dest_capacity, const i18n_uchar *src, int32_t src_len, const char *locale, i18n_error_code_e *i18n_error )
505 UErrorCode icu_error = U_ZERO_ERROR;
506 int32_t result = u_strToLower (dest, dest_capacity, src, src_len, locale, &icu_error);
507 *i18n_error = _i18n_error_mapping(icu_error);
508 set_last_result(*i18n_error);
513 int32_t i18n_ustring_to_title ( i18n_uchar *dest, int32_t dest_capacity, const i18n_uchar *src, int32_t src_len, i18n_ubreak_iterator_s *title_iter,
514 const char *locale, i18n_error_code_e *i18n_error )
517 set_last_result(I18N_ERROR_INVALID_PARAMETER);
518 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
522 UErrorCode icu_error = U_ZERO_ERROR;
523 int32_t result = u_strToTitle (dest, dest_capacity, src, src_len, (UBreakIterator*)title_iter, locale, &icu_error);
524 *i18n_error = _i18n_error_mapping(icu_error);
525 set_last_result(*i18n_error);
530 int32_t i18n_ustring_to_title_new ( i18n_uchar *dest, int32_t dest_capacity, const i18n_uchar *src,
531 int32_t src_len, i18n_ubreak_iterator_h title_iter, const char *locale)
533 UErrorCode err = U_ZERO_ERROR;
534 int32_t result = u_strToTitle (dest, dest_capacity, src, src_len, (UBreakIterator*)title_iter, locale, &err);
535 set_last_result(_i18n_error_mapping(err));
540 int32_t i18n_ustring_fold_case ( i18n_uchar *dest, int32_t dest_capacity, const i18n_uchar *src, int32_t src_len, uint32_t options, i18n_error_code_e *i18n_error )
543 set_last_result(I18N_ERROR_INVALID_PARAMETER);
544 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
548 UErrorCode icu_error = U_ZERO_ERROR;
549 int32_t result =u_strFoldCase (dest, dest_capacity, src, src_len, options, &icu_error);
550 *i18n_error = _i18n_error_mapping(icu_error);
551 set_last_result(*i18n_error);
556 wchar_t* i18n_ustring_to_WCS ( wchar_t *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar *src, int32_t src_len, i18n_error_code_e *i18n_error )
559 set_last_result(I18N_ERROR_INVALID_PARAMETER);
560 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
564 UErrorCode icu_error = U_ZERO_ERROR;
565 wchar_t* result = u_strToWCS (dest, dest_capacity, dest_len, src, src_len, &icu_error);
566 *i18n_error = _i18n_error_mapping(icu_error);
567 set_last_result(*i18n_error);
572 i18n_uchar* i18n_ustring_from_WCS ( i18n_uchar *dest, int32_t dest_capacity, int32_t *dest_len, const wchar_t *src, int32_t src_len, i18n_error_code_e *i18n_error )
575 set_last_result(I18N_ERROR_INVALID_PARAMETER);
576 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
580 UErrorCode icu_error = U_ZERO_ERROR;
581 i18n_uchar* result = u_strFromWCS (dest, dest_capacity, dest_len, src, src_len, &icu_error);
582 *i18n_error = _i18n_error_mapping(icu_error);
583 set_last_result(*i18n_error);
588 char* i18n_ustring_to_UTF8 ( char *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar *src, int32_t src_len, i18n_error_code_e *i18n_error )
591 set_last_result(I18N_ERROR_INVALID_PARAMETER);
592 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
596 UErrorCode icu_error = U_ZERO_ERROR;
597 char* result = u_strToUTF8 (dest, dest_capacity, dest_len, src, src_len, &icu_error);
598 *i18n_error = _i18n_error_mapping(icu_error);
599 set_last_result(*i18n_error);
604 i18n_uchar* i18n_ustring_from_UTF8 ( i18n_uchar *dest, int32_t dest_capacity, int32_t *dest_len, const char *src, int32_t src_len, i18n_error_code_e *i18n_error )
607 set_last_result(I18N_ERROR_INVALID_PARAMETER);
608 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
612 UErrorCode icu_error = U_ZERO_ERROR;
613 i18n_uchar* result = u_strFromUTF8 (dest, dest_capacity, dest_len, src, src_len, &icu_error);
614 *i18n_error = _i18n_error_mapping(icu_error);
615 set_last_result(*i18n_error);
620 char* i18n_ustring_to_UTF8_with_sub ( char *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar *src, int32_t src_len, i18n_uchar32 sub_char, int32_t *num_substitutions, i18n_error_code_e *i18n_error )
623 set_last_result(I18N_ERROR_INVALID_PARAMETER);
624 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
628 UErrorCode icu_error = U_ZERO_ERROR;
629 char* result = u_strToUTF8WithSub (dest, dest_capacity, dest_len, src, src_len, sub_char, num_substitutions, &icu_error);
630 *i18n_error = _i18n_error_mapping(icu_error);
631 set_last_result(*i18n_error);
636 i18n_uchar* i18n_ustring_from_UTF8_with_sub ( i18n_uchar *dest, int32_t dest_capacity, int32_t *dest_len, const char *src, int32_t src_len, i18n_uchar32 sub_char,
637 int32_t *num_substitutions, i18n_error_code_e *i18n_error )
640 set_last_result(I18N_ERROR_INVALID_PARAMETER);
641 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
645 UErrorCode icu_error = U_ZERO_ERROR;
646 i18n_uchar* result = u_strFromUTF8WithSub (dest, dest_capacity, dest_len, src, src_len, sub_char, num_substitutions, &icu_error);
647 *i18n_error = _i18n_error_mapping(icu_error);
648 set_last_result(*i18n_error);
653 i18n_uchar* i18n_ustring_from_UTF8_lenient ( i18n_uchar *dest, int32_t dest_capacity, int32_t *dest_len, const char *src, int32_t src_len, i18n_error_code_e *i18n_error )
656 set_last_result(I18N_ERROR_INVALID_PARAMETER);
657 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
661 UErrorCode icu_error = U_ZERO_ERROR;
662 i18n_uchar* result = u_strFromUTF8Lenient (dest, dest_capacity, dest_len, src, src_len, &icu_error);
663 *i18n_error = _i18n_error_mapping(icu_error);
664 set_last_result(*i18n_error);
669 i18n_uchar32* i18n_ustring_to_UTF32 ( i18n_uchar32 *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar *src, int32_t src_len, i18n_error_code_e *i18n_error )
672 set_last_result(I18N_ERROR_INVALID_PARAMETER);
673 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
677 UErrorCode icu_error = U_ZERO_ERROR;
678 i18n_uchar32* result = u_strToUTF32 (dest, dest_capacity, dest_len, src, src_len, &icu_error);
679 *i18n_error = _i18n_error_mapping(icu_error);
680 set_last_result(*i18n_error);
685 i18n_uchar* i18n_ustring_from_UTF32 ( i18n_uchar *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar32 *src, int32_t src_len, i18n_error_code_e *i18n_error )
688 set_last_result(I18N_ERROR_INVALID_PARAMETER);
689 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
693 UErrorCode icu_error = U_ZERO_ERROR;
694 i18n_uchar* result = u_strFromUTF32 (dest, dest_capacity, dest_len, src, src_len, &icu_error);
695 *i18n_error = _i18n_error_mapping(icu_error);
696 set_last_result(*i18n_error);
701 i18n_uchar32* i18n_ustring_to_UTF32_with_sub ( i18n_uchar32 *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar *src, int32_t src_len,
702 i18n_uchar32 sub_char, int32_t *num_substitutions, i18n_error_code_e *i18n_error )
705 set_last_result(I18N_ERROR_INVALID_PARAMETER);
706 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
710 UErrorCode icu_error = U_ZERO_ERROR;
711 i18n_uchar32* result = u_strToUTF32WithSub (dest, dest_capacity, dest_len, src, src_len, sub_char, num_substitutions, &icu_error);
712 *i18n_error = _i18n_error_mapping(icu_error);
713 set_last_result(*i18n_error);
718 i18n_uchar* i18n_ustring_from_UTF32_with_sub ( i18n_uchar *dest, int32_t dest_capacity, int32_t *dest_len, const i18n_uchar32 *src, int32_t src_len, i18n_uchar32 sub_char, int32_t *num_substitutions, i18n_error_code_e *i18n_error )
721 set_last_result(I18N_ERROR_INVALID_PARAMETER);
722 *i18n_error = I18N_ERROR_INVALID_PARAMETER;
726 UErrorCode icu_error = U_ZERO_ERROR;
727 i18n_uchar* result = u_strFromUTF32WithSub (dest, dest_capacity, dest_len, src, src_len, sub_char, num_substitutions, (UErrorCode*)&icu_error);
728 *i18n_error = _i18n_error_mapping(icu_error);
729 set_last_result(*i18n_error);