MCPcopy Create free account
hub / github.com/Kenix3/libultraship / SFileGetFileInfo

Function SFileGetFileInfo

extern/StormLib/src/SFileGetFileInfo.cpp:189–450  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

187// pcbLengthNeeded - Receives number of bytes necessary to store the information
188
189bool WINAPI SFileGetFileInfo(
190 HANDLE hMpqOrFile,
191 SFileInfoClass InfoClass,
192 void * pvFileInfo,
193 DWORD cbFileInfo,
194 LPDWORD pcbLengthNeeded)
195{
196 MPQ_SIGNATURE_INFO SignatureInfo;
197 const TCHAR * szSrcFileInfo;
198 TMPQArchive * ha = NULL;
199 TFileEntry * pFileEntry = NULL;
200 TMPQHeader * pHeader = NULL;
201 ULONGLONG Int64Value = 0;
202 ULONGLONG ByteOffset;
203 TMPQFile * hf = NULL;
204 void * pvSrcFileInfo = NULL;
205 DWORD cbSrcFileInfo = 0;
206 DWORD dwInt32Value = 0;
207
208 // Validate archive/file handle
209 if((int)InfoClass <= (int)SFileMpqFlags)
210 {
211 if((ha = IsValidMpqHandle(hMpqOrFile)) == NULL)
212 return GetInfo_ReturdwErrCode(ERROR_INVALID_HANDLE);
213 pHeader = ha->pHeader;
214 }
215 else
216 {
217 if((hf = IsValidFileHandle(hMpqOrFile)) == NULL)
218 return GetInfo_ReturdwErrCode(ERROR_INVALID_HANDLE);
219 pFileEntry = hf->pFileEntry;
220 }
221
222 // Return info-class-specific data
223 switch(InfoClass)
224 {
225 case SFileMpqFileName:
226 szSrcFileInfo = FileStream_GetFileName(ha->pStream);
227 cbSrcFileInfo = (DWORD)((_tcslen(szSrcFileInfo) + 1) * sizeof(TCHAR));
228 return GetInfo(pvFileInfo, cbFileInfo, szSrcFileInfo, cbSrcFileInfo, pcbLengthNeeded);
229
230 case SFileMpqStreamBitmap:
231 return FileStream_GetBitmap(ha->pStream, pvFileInfo, cbFileInfo, pcbLengthNeeded);
232
233 case SFileMpqUserDataOffset:
234 return GetInfo(pvFileInfo, cbFileInfo, &ha->UserDataPos, sizeof(ULONGLONG), pcbLengthNeeded);
235
236 case SFileMpqUserDataHeader:
237 if(ha->pUserData == NULL)
238 return GetInfo_ReturdwErrCode(ERROR_INVALID_PARAMETER);
239 return GetInfo_ReadFromFile(pvFileInfo, cbFileInfo, ha->pStream, ha->UserDataPos, sizeof(TMPQUserData), pcbLengthNeeded);
240
241 case SFileMpqUserData:
242 if(ha->pUserData == NULL)
243 return GetInfo_ReturdwErrCode(ERROR_INVALID_PARAMETER);
244 return GetInfo_ReadFromFile(pvFileInfo, cbFileInfo, ha->pStream, ha->UserDataPos + sizeof(TMPQUserData), ha->pUserData->dwHeaderOffs - sizeof(TMPQUserData), pcbLengthNeeded);
245
246 case SFileMpqHeaderOffset:

Callers 7

GetFilePatchCountFunction · 0.85
LoadMpqFileFunction · 0.85
TestGetFileInfoFunction · 0.85
TestArchiveFunction · 0.85
IsMatchingPatchFileFunction · 0.85

Calls 15

IsValidMpqHandleFunction · 0.85
GetInfo_ReturdwErrCodeFunction · 0.85
IsValidFileHandleFunction · 0.85
FileStream_GetFileNameFunction · 0.85
GetInfoFunction · 0.85
FileStream_GetBitmapFunction · 0.85
GetInfo_ReadFromFileFunction · 0.85
LoadExtTableFunction · 0.85
GetInfo_AllocatedFunction · 0.85
LoadHetTableFunction · 0.85
GetInfo_TablePointerFunction · 0.85
LoadBetTableFunction · 0.85

Tested by 6

GetFilePatchCountFunction · 0.68
LoadMpqFileFunction · 0.68
TestGetFileInfoFunction · 0.68
TestArchiveFunction · 0.68