@@ -559,10 +559,16 @@ pg_wc_toupper(pg_wchar c)
559
559
case PG_REGEX_STRATEGY_BUILTIN :
560
560
return unicode_uppercase_simple (c );
561
561
case PG_REGEX_STRATEGY_LIBC_WIDE :
562
+ /* force C behavior for ASCII characters, per comments above */
563
+ if (pg_regex_locale -> is_default && c <= (pg_wchar ) 127 )
564
+ return pg_ascii_toupper ((unsigned char ) c );
562
565
if (sizeof (wchar_t ) >= 4 || c <= (pg_wchar ) 0xFFFF )
563
566
return towupper_l ((wint_t ) c , pg_regex_locale -> info .lt );
564
567
/* FALL THRU */
565
568
case PG_REGEX_STRATEGY_LIBC_1BYTE :
569
+ /* force C behavior for ASCII characters, per comments above */
570
+ if (pg_regex_locale -> is_default && c <= (pg_wchar ) 127 )
571
+ return pg_ascii_toupper ((unsigned char ) c );
566
572
if (c <= (pg_wchar ) UCHAR_MAX )
567
573
return toupper_l ((unsigned char ) c , pg_regex_locale -> info .lt );
568
574
return c ;
@@ -587,10 +593,16 @@ pg_wc_tolower(pg_wchar c)
587
593
case PG_REGEX_STRATEGY_BUILTIN :
588
594
return unicode_lowercase_simple (c );
589
595
case PG_REGEX_STRATEGY_LIBC_WIDE :
596
+ /* force C behavior for ASCII characters, per comments above */
597
+ if (pg_regex_locale -> is_default && c <= (pg_wchar ) 127 )
598
+ return pg_ascii_tolower ((unsigned char ) c );
590
599
if (sizeof (wchar_t ) >= 4 || c <= (pg_wchar ) 0xFFFF )
591
600
return towlower_l ((wint_t ) c , pg_regex_locale -> info .lt );
592
601
/* FALL THRU */
593
602
case PG_REGEX_STRATEGY_LIBC_1BYTE :
603
+ /* force C behavior for ASCII characters, per comments above */
604
+ if (pg_regex_locale -> is_default && c <= (pg_wchar ) 127 )
605
+ return pg_ascii_tolower ((unsigned char ) c );
594
606
if (c <= (pg_wchar ) UCHAR_MAX )
595
607
return tolower_l ((unsigned char ) c , pg_regex_locale -> info .lt );
596
608
return c ;
0 commit comments