mirror of
https://github.com/vapaamies/KolibriOS.git
synced 2025-09-21 02:30:07 +02:00
Unpacker support for LoadFile in KoW
This commit is contained in:
@@ -126,6 +126,7 @@ function LoadFile(FileName: PKolibriChar; var Size: LongWord): Pointer;
|
||||
var
|
||||
hFile: THandle;
|
||||
QSize: UInt64;
|
||||
Unpacked: Pointer;
|
||||
begin
|
||||
hFile := CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
|
||||
if (hFile <> INVALID_HANDLE_VALUE) and GetFileSizeEx(hFile, QSize) then
|
||||
@@ -133,6 +134,14 @@ begin
|
||||
Size := QSize;
|
||||
GetMem(Result, Size);
|
||||
Windows.ReadFile(hFile, Result^, Size, Size, nil);
|
||||
if PPackedFileHeader(Result).Signature = KPCK then
|
||||
begin
|
||||
Size := PPackedFileHeader(Result).UnpackedSize;
|
||||
GetMem(Unpacked, Size);
|
||||
Unpack(PPackedFile(Result)^, Unpacked^);
|
||||
FreeMem(Result);
|
||||
Result := Unpacked;
|
||||
end;
|
||||
Exit;
|
||||
end;
|
||||
Size := 0;
|
||||
|
25
Lib/KoW/Unpack.inc
Normal file
25
Lib/KoW/Unpack.inc
Normal file
@@ -0,0 +1,25 @@
|
||||
(*
|
||||
KolibriOS on Windows (KoW) unpacker (KPCK) support unit
|
||||
|
||||
Copyright (c) 2021 Delphi SDK for KolibriOS team
|
||||
*)
|
||||
|
||||
const
|
||||
KPCK = $4B43504B;
|
||||
|
||||
type
|
||||
PPackedFileHeader = ^TPackedFileHeader;
|
||||
TPackedFileHeader = packed record
|
||||
Signature: LongWord; // KPCK
|
||||
UnpackedSize: LongWord;
|
||||
PackMethod: LongWord; // LZMA, CallTrick, NoCallTrick
|
||||
end;
|
||||
|
||||
PPackedFile = ^TPackedFile;
|
||||
TPackedFile = packed record
|
||||
Header: TPackedFileHeader;
|
||||
Data: array[0..0] of Byte;
|
||||
end;
|
||||
|
||||
procedure Unpack(const Source: TPackedFile; var Dest); stdcall; external;
|
||||
{$L KoW\unpacker.obj}
|
BIN
Lib/KoW/unpacker.obj
Normal file
BIN
Lib/KoW/unpacker.obj
Normal file
Binary file not shown.
@@ -671,6 +671,10 @@ const
|
||||
function GetProcAddress(hLib: Pointer; ProcName: PKolibriChar): Pointer; stdcall;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFNDEF KolibriOS}
|
||||
{$I KoW\Unpack.inc}
|
||||
{$ENDIF}
|
||||
|
||||
implementation
|
||||
|
||||
{$IFNDEF KolibriOS}
|
||||
|
Reference in New Issue
Block a user