FWadLump::FWadLump(int lumpnum, FResourceLump *lump) : FileReader() { FileReader *f = lump->GetReader(); if (f != NULL && f->GetFile() != NULL) { // Uncompressed lump in a file. For this we will have to open a new FILE, since we need it for streaming int fileno = Wads.GetLumpFile(lumpnum); const char *filename = Wads.GetWadFullName(fileno); File = openfd(filename); if (File != NULL) { Length = lump->LumpSize; StartPos = FilePos = lump->GetFileOffset(); Lump = NULL; CloseOnDestruct = true; Seek(0, SEEK_SET); return; } } File = NULL; Length = lump->LumpSize; StartPos = FilePos = 0; Lump = lump; Lump->CacheLump(); }
FWadLump::FWadLump(FResourceLump *lump, bool alwayscache) : FileReader() { FileReader *f = lump->GetReader(); if (f != NULL && f->GetFile() != NULL && !alwayscache) { // Uncompressed lump in a file File = f->GetFile(); Length = lump->LumpSize; StartPos = FilePos = lump->GetFileOffset(); Lump = NULL; } else { File = NULL; Length = lump->LumpSize; StartPos = FilePos = 0; Lump = lump; Lump->CacheLump(); } }
bool FWadCollection::IsUncompressedFile(int lump) const { if ((unsigned)lump >= (unsigned)NumLumps) { I_Error ("IsUncompressedFile: %u >= NumLumps",lump); } FResourceLump *l = LumpInfo[lump].lump; FileReader *f = l->GetReader(); // We can access the file only if we get the FILE pointer from the FileReader here. // Any other case means it won't work. return (f != NULL && f->GetFile() != NULL); }