MCPcopy Create free account
hub / github.com/Sinflower/UberWolf / LoadFileToMem

Method LoadFileToMem

3rdParty/DXLib/DXArchive.cpp:3747–3942  ·  view source on GitHub ↗

アーカイブファイル中の指定のファイルをメモリに読み込む

Source from the content-addressed store, hash-verified

3745
3746// アーカイブファイル中の指定のファイルをメモリに読み込む
3747s64 DXArchive::LoadFileToMem(const TCHAR *FilePath, void *Buffer, u64 BufferLength)
3748{
3749 DARC_FILEHEAD *FileH;
3750 char KeyStringBuffer[DXA_KEY_STRING_MAXLENGTH];
3751 size_t KeyStringBufferBytes;
3752 unsigned char lKey[DXA_KEY_BYTES];
3753 DARC_DIRECTORY *Directory;
3754 void *HuffDataBuffer = NULL;
3755
3756 // 指定のファイルの情報を得る
3757 FileH = this->GetFileInfo(FilePath, &Directory);
3758 if (FileH == NULL) return -1;
3759
3760 // ファイルサイズが足りているか調べる、足りていないか、バッファ、又はサイズが0だったらサイズを返す
3761 if (BufferLength < FileH->DataSize || BufferLength == 0 || Buffer == NULL)
3762 {
3763 return (s64)FileH->DataSize;
3764 }
3765
3766 // 足りている場合はバッファーに読み込む
3767
3768 // ファイルが圧縮されているかどうかで処理を分岐
3769 if (FileH->PressDataSize != 0xffffffffffffffff)
3770 {
3771 // 圧縮されている場合
3772
3773 // ハフマン圧縮されているかどうかで処理を分岐
3774 if (FileH->HuffPressDataSize != 0xffffffffffffffff)
3775 {
3776 // メモリ上に読み込んでいるかどうかで処理を分岐
3777 if (MemoryOpenFlag == true)
3778 {
3779 // ハフマン圧縮を解凍したデータを格納するメモリ領域の確保
3780 HuffDataBuffer = malloc((size_t)FileH->PressDataSize);
3781 if (HuffDataBuffer == NULL) return -1;
3782
3783 // ハフマン圧縮データを解凍
3784 Huffman_Decode((u8 *)this->fp + this->Head.DataStartAddress + FileH->DataAddress, HuffDataBuffer);
3785
3786 // メモリ上の圧縮データを解凍する
3787 Decode(HuffDataBuffer, Buffer);
3788
3789 // メモリを解放
3790 free(HuffDataBuffer);
3791 }
3792 else
3793 {
3794 void *temp;
3795
3796 // 圧縮データをメモリに読み込んでから解凍する
3797
3798 // 圧縮データが収まるメモリ領域の確保
3799 temp = malloc((size_t)(FileH->PressDataSize + FileH->HuffPressDataSize));
3800
3801 // 圧縮データの読み込み
3802 _fseeki64(this->fp, this->Head.DataStartAddress + FileH->DataAddress, SEEK_SET);
3803
3804 // ファイル個別の鍵を作成

Callers 2

GetFileSizeMethod · 0.95
LoadFileToCacheMethod · 0.95

Calls 2

GetFileInfoMethod · 0.95
Huffman_DecodeFunction · 0.85

Tested by

no test coverage detected