Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a903b4d

Browse files
jeltzCommitfest Bot
authored and
Commitfest Bot
committed
Reduce code duplication in ICU case mapping code
1 parent 36cbe9f commit a903b4d

File tree

1 file changed

+26
-48
lines changed

1 file changed

+26
-48
lines changed

src/backend/utils/adt/pg_locale_icu.c

Lines changed: 26 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ static size_t icu_from_uchar(char *dest, size_t destsize,
113113
const UChar *buff_uchar, int32_t len_uchar);
114114
static void icu_set_collation_attributes(UCollator *collator, const char *loc,
115115
UErrorCode *status);
116+
static int32_t icu_convert_case_no_utf8(ICU_Convert_Func func, char *dest,
117+
size_t destsize, const char *src,
118+
ssize_t srclen, pg_locale_t locale);
116119
static int32_t icu_convert_case_uchar(ICU_Convert_Func func, pg_locale_t mylocale,
117120
UChar **buff_dest, UChar *buff_source,
118121
int32_t len_source);
@@ -410,22 +413,7 @@ strlower_icu(char *dest, size_t destsize, const char *src, ssize_t srclen,
410413
return needed;
411414
}
412415
else
413-
{
414-
int32_t len_uchar;
415-
int32_t len_conv;
416-
UChar *buff_uchar;
417-
UChar *buff_conv;
418-
size_t result_len;
419-
420-
len_uchar = icu_to_uchar(&buff_uchar, src, srclen);
421-
len_conv = icu_convert_case_uchar(u_strToLower, locale, &buff_conv,
422-
buff_uchar, len_uchar);
423-
result_len = icu_from_uchar(dest, destsize, buff_conv, len_conv);
424-
pfree(buff_uchar);
425-
pfree(buff_conv);
426-
427-
return result_len;
428-
}
416+
return icu_convert_case_no_utf8(u_strToLower, dest, destsize, src, srclen, locale);
429417
}
430418

431419
size_t
@@ -452,22 +440,7 @@ strtitle_icu(char *dest, size_t destsize, const char *src, ssize_t srclen,
452440
return needed;
453441
}
454442
else
455-
{
456-
int32_t len_uchar;
457-
int32_t len_conv;
458-
UChar *buff_uchar;
459-
UChar *buff_conv;
460-
size_t result_len;
461-
462-
len_uchar = icu_to_uchar(&buff_uchar, src, srclen);
463-
len_conv = icu_convert_case_uchar(u_strToTitle_default_BI, locale, &buff_conv,
464-
buff_uchar, len_uchar);
465-
result_len = icu_from_uchar(dest, destsize, buff_conv, len_conv);
466-
pfree(buff_uchar);
467-
pfree(buff_conv);
468-
469-
return result_len;
470-
}
443+
return icu_convert_case_no_utf8(u_strToTitle_default_BI, dest, destsize, src, srclen, locale);
471444
}
472445

473446
size_t
@@ -494,22 +467,7 @@ strupper_icu(char *dest, size_t destsize, const char *src, ssize_t srclen,
494467
return needed;
495468
}
496469
else
497-
{
498-
int32_t len_uchar;
499-
int32_t len_conv;
500-
UChar *buff_uchar;
501-
UChar *buff_conv;
502-
size_t result_len;
503-
504-
len_uchar = icu_to_uchar(&buff_uchar, src, srclen);
505-
len_conv = icu_convert_case_uchar(u_strToUpper, locale, &buff_conv,
506-
buff_uchar, len_uchar);
507-
result_len = icu_from_uchar(dest, destsize, buff_conv, len_conv);
508-
pfree(buff_uchar);
509-
pfree(buff_conv);
510-
511-
return result_len;
512-
}
470+
return icu_convert_case_no_utf8(u_strToUpper, dest, destsize, src, srclen, locale);
513471
}
514472

515473
size_t
@@ -729,6 +687,26 @@ icu_from_uchar(char *dest, size_t destsize, const UChar *buff_uchar, int32_t len
729687
return len_result;
730688
}
731689

690+
static int32_t
691+
icu_convert_case_no_utf8(ICU_Convert_Func func, char *dest, size_t destsize,
692+
const char *src, ssize_t srclen, pg_locale_t locale)
693+
{
694+
int32_t len_uchar;
695+
int32_t len_conv;
696+
UChar *buff_uchar;
697+
UChar *buff_conv;
698+
size_t result_len;
699+
700+
len_uchar = icu_to_uchar(&buff_uchar, src, srclen);
701+
len_conv = icu_convert_case_uchar(func, locale, &buff_conv,
702+
buff_uchar, len_uchar);
703+
result_len = icu_from_uchar(dest, destsize, buff_conv, len_conv);
704+
pfree(buff_uchar);
705+
pfree(buff_conv);
706+
707+
return result_len;
708+
}
709+
732710
static int32_t
733711
icu_convert_case_uchar(ICU_Convert_Func func, pg_locale_t mylocale,
734712
UChar **buff_dest, UChar *buff_source, int32_t len_source)

0 commit comments

Comments
 (0)