- transition to new FileReader interface complete, but untested.

This commit is contained in:
Christoph Oelckers 2018-03-11 12:33:46 +01:00
commit b14ee50d0d
31 changed files with 1253 additions and 1708 deletions

View file

@ -58,19 +58,19 @@ extern ISzAlloc g_Alloc;
struct CZDFileInStream
{
ISeekInStream s;
FileReader *File;
FileRdr &File;
CZDFileInStream(FileReader *_file)
CZDFileInStream(FileRdr &_file)
: File(_file)
{
s.Read = Read;
s.Seek = Seek;
File = _file;
}
static SRes Read(const ISeekInStream *pp, void *buf, size_t *size)
{
CZDFileInStream *p = (CZDFileInStream *)pp;
long numread = p->File->Read(buf, (long)*size);
auto numread = p->File.Read(buf, (long)*size);
if (numread < 0)
{
*size = 0;
@ -83,26 +83,26 @@ struct CZDFileInStream
static SRes Seek(const ISeekInStream *pp, Int64 *pos, ESzSeek origin)
{
CZDFileInStream *p = (CZDFileInStream *)pp;
int move_method;
FileRdr::ESeek move_method;
int res;
if (origin == SZ_SEEK_SET)
{
move_method = SEEK_SET;
move_method = FileRdr::SeekSet;
}
else if (origin == SZ_SEEK_CUR)
{
move_method = SEEK_CUR;
move_method = FileRdr::SeekCur;
}
else if (origin == SZ_SEEK_END)
{
move_method = SEEK_END;
move_method = FileRdr::SeekEnd;
}
else
{
return 1;
}
res = p->File->Seek((long)*pos, move_method);
*pos = p->File->Tell();
res = (int)p->File.Seek((long)*pos, move_method);
*pos = p->File.Tell();
return res;
}
};
@ -117,13 +117,13 @@ struct C7zArchive
Byte *OutBuffer;
size_t OutBufferSize;
C7zArchive(FileReader *file) : ArchiveStream(file)
C7zArchive(FileRdr &file) : ArchiveStream(file)
{
if (g_CrcTable[1] == 0)
{
CrcGenerateTable();
}
file->Seek(0, SEEK_SET);
file.Seek(0, FileRdr::SeekSet);
LookToRead2_CreateVTable(&LookStream, false);
LookStream.realStream = &ArchiveStream.s;
LookToRead2_Init(&LookStream);
@ -192,7 +192,7 @@ class F7ZFile : public FResourceFile
C7zArchive *Archive;
public:
F7ZFile(const char * filename, FileReader *filer);
F7ZFile(const char * filename, FileRdr &filer);
bool Open(bool quiet);
virtual ~F7ZFile();
virtual FResourceLump *GetLump(int no) { return ((unsigned)no < NumLumps)? &Lumps[no] : NULL; }
@ -206,7 +206,7 @@ public:
//
//==========================================================================
F7ZFile::F7ZFile(const char * filename, FileReader *filer)
F7ZFile::F7ZFile(const char * filename, FileRdr &filer)
: FResourceFile(filename, filer)
{
Lumps = NULL;
@ -295,7 +295,7 @@ bool F7ZFile::Open(bool quiet)
lump_p->LumpNameSetup(name);
lump_p->LumpSize = static_cast<int>(SzArEx_GetFileSize(archPtr, i));
lump_p->Owner = this;
lump_p->Flags = LUMPF_ZIPFILE;
lump_p->Flags = LUMPF_ZIPFILE|LUMPF_COMPRESSED;
lump_p->Position = i;
lump_p->CheckEmbedded();
lump_p++;
@ -361,21 +361,21 @@ int F7ZLump::FillCache()
//
//==========================================================================
FResourceFile *Check7Z(const char *filename, FileReader *file, bool quiet)
FResourceFile *Check7Z(const char *filename, FileRdr &file, bool quiet)
{
char head[k7zSignatureSize];
if (file->GetLength() >= k7zSignatureSize)
if (file.GetLength() >= k7zSignatureSize)
{
file->Seek(0, SEEK_SET);
file->Read(&head, k7zSignatureSize);
file->Seek(0, SEEK_SET);
file.Seek(0, FileRdr::SeekSet);
file.Read(&head, k7zSignatureSize);
file.Seek(0, FileRdr::SeekSet);
if (!memcmp(head, k7zSignature, k7zSignatureSize))
{
FResourceFile *rf = new F7ZFile(filename, file);
if (rf->Open(quiet)) return rf;
rf->Reader = NULL; // to avoid destruction of reader
file = std::move(rf->Reader); // to avoid destruction of reader
delete rf;
}
}