From 5a7d5367d23965468a4d9d22091f9748a2112556 Mon Sep 17 00:00:00 2001 From: Pierre Muller Date: Tue, 5 Mar 2024 20:58:30 +0000 Subject: [PATCH] Try to implement UnicodeFromLocaleChars for java --- rtl/inc/ustrings.inc | 3 +++ rtl/java/justrings.inc | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/rtl/inc/ustrings.inc b/rtl/inc/ustrings.inc index 5197044f47..be3ccd22d8 100644 --- a/rtl/inc/ustrings.inc +++ b/rtl/inc/ustrings.inc @@ -1047,6 +1047,8 @@ function StringToWideChar(const Src : RawByteString;Dest : PWideChar;DestSize : end; {$endif FPC_HAS_STRING_LEN_TO_WIDECHAR} +{$ifndef FPC_HAS_UNICODEFROMLOCALECHARS} +{$define FPC_HAS_UNICODEFROMLOCALECHARS} function UnicodeFromLocaleChars(CodePage, Flags: Cardinal; LocaleStr: PAnsiChar; LocaleStrLen: Integer; UnicodeStr: PWideChar; UnicodeStrLen: Integer): Integer; overload; @@ -1067,6 +1069,7 @@ begin // Return length result:=len; end; +{$endif ndef FPC_HAS_UNICODEFROMLOCALECHARS} function UnicodeFromLocaleChars(const LocaleName: AnsiString; Flags: Cardinal; LocaleStr: PAnsiChar; LocaleStrLen: Integer; UnicodeStr: PWideChar; diff --git a/rtl/java/justrings.inc b/rtl/java/justrings.inc index 866c9ffac7..786c7c4e40 100644 --- a/rtl/java/justrings.inc +++ b/rtl/java/justrings.inc @@ -624,6 +624,28 @@ function StringToWideChar(const Src : RawByteString;Dest : PWideChar;DestSize : result:=Dest; end; +{$define FPC_HAS_UNICODEFROMLOCALECHARS} +function UnicodeFromLocaleChars(CodePage, Flags: Cardinal; LocaleStr: PAnsiChar; + LocaleStrLen: Integer; UnicodeStr: PWideChar; UnicodeStrLen: Integer): Integer; overload; + +var + temp: widestring; + Len: SizeInt; +begin + widestringmanager.Ansi2WideMoveProc(LocaleStr,CodePage,temp,LocaleStrLen); + Len:=Length(temp); + // Only move when we have room. + if (UnicodeStrLen>0) then + begin + if UnicodeStrLen<=Len then + Len:=UnicodeStrLen-1; + JLString(temp).getChars(0,Len,TJCharArray(UnicodeStr),0); + UniCodeStr[Len]:=#0; + end; + // Return length + result:=len; +end; + {$define FPC_HAS_UNICODECHAR_LEN_TO_STRING} function UnicodeCharLenToString(S : PUnicodeChar;Len : SizeInt) : UnicodeString;