mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
ADD: RPM - dependencies information
This commit is contained in:
parent
2cacca2c3a
commit
6ec5f573b9
3 changed files with 41 additions and 8 deletions
|
|
@ -47,6 +47,7 @@ type
|
|||
changevol_proc : TChangeVolProc;
|
||||
//- RPM tags -------------------------------------------
|
||||
info : RPM_InfoRec;
|
||||
deps : RPM_DepsRec;
|
||||
datasig : RPM_DataSig;
|
||||
end;{ArchiveRec}
|
||||
|
||||
|
|
@ -117,7 +118,7 @@ begin
|
|||
else begin
|
||||
if not RPM_ReadSignature(arec^.handle_file, r_lead.signature_type, signature) then fgError := True
|
||||
else
|
||||
if not RPM_ReadHeader(arec^.handle_file, False, arec^.header, arec^.info) then fgError := True
|
||||
if not RPM_ReadHeader(arec^.handle_file, False, arec^.header, arec^.info, arec^.deps) then fgError := True
|
||||
else
|
||||
arec^.arch_len := FileSize(arec^.handle_file) - FilePos(arec^.handle_file);
|
||||
if not fgError then begin
|
||||
|
|
@ -164,8 +165,8 @@ begin
|
|||
end;
|
||||
HDR_INFO: begin
|
||||
copy_str2buf(TStrBuf(FileName), 'INFO.TXT');
|
||||
PackSize := 0;
|
||||
UnpSize := 0;
|
||||
PackSize := -1;
|
||||
UnpSize := -1;
|
||||
end;
|
||||
else
|
||||
Result := E_END_ARCHIVE;
|
||||
|
|
@ -184,6 +185,7 @@ function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath: PChar;
|
|||
var
|
||||
rpm_file : file;
|
||||
rpm_name : String;
|
||||
index : Integer;
|
||||
buf : Pointer;
|
||||
buf_size : LongWord;
|
||||
fsize : LongWord;
|
||||
|
|
@ -285,6 +287,15 @@ begin
|
|||
Line('SOURCE RPM: ' + sourcerpm);
|
||||
Line('DESCRIPTION: ');
|
||||
Line(description);
|
||||
if Length(arec^.deps.names) > 0 then
|
||||
begin
|
||||
Line(EmptyStr);
|
||||
Line('REQUIRES: ');
|
||||
for index:= 0 to High(arec^.deps.names) do
|
||||
begin
|
||||
Line(' ' + arec^.deps.names[index]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if faborted then Result:=E_EABORTED
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ unit rpm_def;
|
|||
interface
|
||||
|
||||
uses
|
||||
Classes;
|
||||
Classes, SysUtils;
|
||||
|
||||
{$ifdef ver90}
|
||||
type longword=longint;
|
||||
|
|
@ -79,6 +79,8 @@ const
|
|||
|
||||
RPMTAG_ARCHIVESIZE = 1046;
|
||||
|
||||
RPMTAG_REQUIRENAME = 1049;
|
||||
|
||||
type
|
||||
RPM_DataSig = array[0..5] of char;
|
||||
|
||||
|
|
@ -128,6 +130,10 @@ type
|
|||
sourcerpm : AnsiString; // RPMTAG_SOURCERPM
|
||||
end;{RPM_Info}
|
||||
|
||||
RPM_DepsRec = record
|
||||
names: TStringArray;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -26,9 +26,9 @@ type
|
|||
|
||||
function RPM_ReadLead(var f : file; var lead : RPM_Lead) : Boolean;
|
||||
function RPM_ReadSignature(var f : file; sig_type : Word; var signature : RPM_Header) : Boolean;
|
||||
function RPM_ReadHeader(var f : file; align_data : Boolean; var header : RPM_Header; var info : RPM_InfoRec) : Boolean;
|
||||
function RPM_ReadHeader(var f : file; align_data : Boolean; var header : RPM_Header; var info : RPM_InfoRec; var deps : RPM_DepsRec) : Boolean;
|
||||
function RPM_ReadEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo) : Boolean;
|
||||
function RPM_ProcessEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo; var info : RPM_InfoRec) : Boolean;
|
||||
function RPM_ProcessEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo; var info : RPM_InfoRec; var deps : RPM_DepsRec) : Boolean;
|
||||
|
||||
procedure swap_value(var value; size : Integer);
|
||||
procedure copy_str2buf(var buf : TStrBuf; s : AnsiString);
|
||||
|
|
@ -126,7 +126,7 @@ begin
|
|||
for i_entry := 0 to count - 1 do begin
|
||||
if not RPM_ReadEntry(f, start, entry) then Exit
|
||||
else
|
||||
if not RPM_ProcessEntry(f, start, entry, info) then Exit;
|
||||
if not RPM_ProcessEntry(f, start, entry, info, deps) then Exit;
|
||||
end;
|
||||
end;
|
||||
start := start + LongInt(header.data_size);
|
||||
|
|
@ -158,6 +158,7 @@ end;
|
|||
function RPM_ReadSignature;
|
||||
var
|
||||
info : RPM_InfoRec;
|
||||
deps : RPM_DepsRec;
|
||||
begin
|
||||
Result := False;
|
||||
case sig_type of
|
||||
|
|
@ -166,7 +167,7 @@ begin
|
|||
RPMSIG_MD5_PGP : ; //
|
||||
RPMSIG_HEADERSIG : // New header signature
|
||||
begin
|
||||
if RPM_ReadHeader(f, True, signature, info) then Result := True;
|
||||
if RPM_ReadHeader(f, True, signature, info, deps) then Result := True;
|
||||
end;
|
||||
end;{case signature type}
|
||||
end;
|
||||
|
|
@ -176,6 +177,7 @@ var s:string;
|
|||
i,l:integer;
|
||||
ch,ch2:char;
|
||||
begin
|
||||
s := '';
|
||||
instr:=instr+' '; {Avoid overflow}
|
||||
l:=length(instr)-1;
|
||||
for i:=1 to l do begin
|
||||
|
|
@ -193,6 +195,8 @@ function RPM_ProcessEntry;
|
|||
var
|
||||
save_pos : Integer;
|
||||
fgError : Boolean;
|
||||
i : Integer;
|
||||
s : String;
|
||||
begin
|
||||
result:=true;
|
||||
if entry.tag = RPMTAG_FILENAMES then exit;
|
||||
|
|
@ -262,6 +266,18 @@ begin
|
|||
RPMTAG_SOURCERPM :
|
||||
|
||||
if entry.etype = 6 then fgError := not read_string(f, info.sourcerpm);
|
||||
|
||||
RPMTAG_REQUIRENAME:
|
||||
if entry.etype = 8 then
|
||||
begin
|
||||
SetLength(deps.names, entry.Count);
|
||||
for i := 0 to entry.Count - 1 do
|
||||
begin
|
||||
read_string(f, s);
|
||||
deps.names[i] := s;
|
||||
end;
|
||||
end;
|
||||
|
||||
end;{case}
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue