diff --git a/rtl/unix/cwstring.pp b/rtl/unix/cwstring.pp index e83313406b..56cb14c41a 100644 --- a/rtl/unix/cwstring.pp +++ b/rtl/unix/cwstring.pp @@ -809,6 +809,10 @@ function CompareTextWideString(const s1, s2 : WideString): PtrInt; end; +{ return value: number of code points in the string. Whenever an invalid + code point is encountered, all characters part of this invalid code point + are considered to form one "character" and the next character is + considered to be the start of a new (possibly also invalid) code point } function CharLengthPChar(const Str: PChar): PtrInt; var nextlen: ptrint; @@ -824,14 +828,14 @@ function CharLengthPChar(const Str: PChar): PtrInt; {$endif not beos} repeat {$ifdef beos} - nextlen:=ptrint(mblen(str,MB_CUR_MAX)); + nextlen:=ptrint(mblen(s,MB_CUR_MAX)); {$else beos} - nextlen:=ptrint(mbrlen(str,MB_CUR_MAX,@mbstate)); + nextlen:=ptrint(mbrlen(s,MB_CUR_MAX,@mbstate)); {$endif beos} { skip invalid/incomplete sequences } if (nextlen<0) then nextlen:=1; - inc(result,nextlen); + inc(result,1); inc(s,nextlen); until (nextlen=0); end;