--- Добавлено в 2020-01-04 16:22:09
Откуда-то у меня взялся баг в реализации KOL.AnsiLowerCase()/KOL.AnsiUpperCase() - не инициализировался Result.
rav, для исправления:
- в файле HiAsm\compiler\FPC2\src\packages\KOLx64\kol.pas нужно поправить функции (в районе строки 21772)
function AnsiUpperCase(const S: AnsiString): AnsiString;
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PAnsiChar(S), Len);
if Len > 0 then CharUpperBuffA(Pointer(Result), Len);
end;
function AnsiUpperCase(const S: WideString): WideString; // Overloaded (NetSpirit)
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PWideChar(S), Len);
if Len > 0 then CharUpperBuffW(Pointer(Result), Len);
end;
function AnsiLowerCase(const S: AnsiString): AnsiString;
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PAnsiChar(S), Len);
if Len > 0 then CharLowerBuffA(Pointer(Result), Len);
end;
function AnsiLowerCase(const S: WideString): WideString; // Overloaded (NetSpirit)
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PWideChar(S), Len);
if Len > 0 then CharLowerBuffW(Pointer(Result), Len);
end;
- В файле hiStrMask.pas функция _StrCmp() должна выглядеть так:
function _StrCmp(Str, Msk: PChar): Boolean;
begin
while (Str^ <> #0) and (Msk^ <> #0) do
begin
if Msk^ = '*' then
begin
Result := _StrCmp(Str, Msk + 1);
if Result then Exit;
end
else
begin
if Msk^ = '#' then
Result := Str^ in ['0'..'9']
else
Result := (Msk^ = '?') or (Msk^ = Str^);
if Result then
Inc(Msk)
else
Exit;
end;
Inc(Str);
end;
while Msk^ = '*' do Inc(Msk);
Result := (Str^ = #0) and (Msk^ = #0);
end;