* Dyn array for ReadArchive variables

This commit is contained in:
Michaël Van Canneyt 2025-03-18 15:41:20 +01:00
parent 4652593a8c
commit 2cd92ee792

View File

@ -26,6 +26,7 @@ unit owar;
interface
uses
globtype,
cclasses,
owbase;
@ -461,11 +462,11 @@ implementation
symsize : longint;
arsym : TArSymbol;
s : string;
syms,
currp,
endp,
startp : pchar;
relocs : plongint;
startp : integer;
syms : TAnsiCharDynArray;
relocs : Array of longint;
begin
Read(currarhdr,sizeof(currarhdr));
{ Read number of relocs }
@ -481,23 +482,23 @@ implementation
exit;
end;
{ Read relocs }
getmem(Relocs,relocsize);
Read(relocs^,relocsize);
setlength(Relocs,relocsize);
Read(relocs[0],relocsize);
{ Read symbols, force terminating #0 to prevent overflow }
getmem(syms,symsize+1);
setlength(syms,symsize+1);
syms[symsize]:=#0;
Read(syms^,symsize);
Read(syms[0],symsize);
{ Parse symbols }
relocidx:=0;
currp:=syms;
endp:=syms+symsize;
currp:=0;
endp:=symsize;
for relocidx:=0 to nrelocs-1 do
begin
startp:=currp;
while (currp^<>#0) do
while (syms[currp]<>#0) do
inc(currp);
s[0]:=chr(currp-startp);
move(startp^,s[1],byte(s[0]));
SetLength(s,currp-startp);
move(syms[startp],s[1],currp-startp);
arsym:=TArSymbol.create(ArSymbols,s);
arsym.MemberPos:=lsb2msb(relocs[relocidx]);
inc(currp);
@ -507,8 +508,8 @@ implementation
break;
end;
end;
freemem(relocs);
freemem(syms);
relocs:=nil;
syms:=nil;
{ LFN names }
Read(currarhdr,sizeof(currarhdr));
if DecodeMemberName(currarhdr)='/' then