fcl-res: read version resource in more proper way. The length of value may be 0 (without any content).

git-svn-id: trunk@37490 -
This commit is contained in:
maciej-izak 2017-10-19 11:46:15 +00:00
parent 7e3ad42f33
commit c2f870b60d

View File

@ -54,7 +54,7 @@ type
function ReadStringFileInfo(toread : integer) : integer; function ReadStringFileInfo(toread : integer) : integer;
function ReadVarFileInfo(toread : integer) : integer; function ReadVarFileInfo(toread : integer) : integer;
function ReadStringTable(toread : integer;aName : string) : integer; function ReadStringTable(toread : integer;aName : string) : integer;
function ReadWideString: string; function ReadWideString(toread: integer = -1): string;
procedure WriteFixedBlockLength(const position : int64); procedure WriteFixedBlockLength(const position : int64);
procedure WriteData; procedure WriteData;
procedure WriteFixedInfos; procedure WriteFixedInfos;
@ -300,7 +300,7 @@ begin
begin begin
before:=RawData.Position; before:=RawData.Position;
ReadBlockHeader(block); ReadBlockHeader(block);
value:=ReadWideString; value:=ReadWideString(block.vallength);
AlignDWordReading; AlignDWordReading;
tmp:=RawData.Position-before; tmp:=RawData.Position-before;
dec(toread,tmp); inc(Result,tmp); dec(toread,tmp); inc(Result,tmp);
@ -308,20 +308,24 @@ begin
end; end;
end; end;
function TVersionResource.ReadWideString: string; function TVersionResource.ReadWideString(toread: integer): string;
var w : word; var w : word;
ws : widestring; ws : widestring;
i: integer = 0;
begin begin
ws:=''; ws:='';
if toread=0 then
exit('');
w:=0; w:=0;
repeat repeat
RawData.ReadBuffer(w,2); RawData.ReadBuffer(w,2);
if w = 0 then break; if (toread=-1) and (w = 0) then break;
{$IFDEF ENDIAN_BIG} {$IFDEF ENDIAN_BIG}
w:=SwapEndian(w); w:=SwapEndian(w);
{$ENDIF} {$ENDIF}
ws:=ws+widechar(w); ws:=ws+widechar(w);
until false; inc(i);
until i = toread;
Result:=ws; Result:=ws;
end; end;