MCPcopy Create free account
hub / github.com/diasurgical/devilution / pfile_read

Function pfile_read

Source/pfile.cpp:531–570  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

529}
530
531BYTE *pfile_read(const char *pszName, DWORD *pdwLen)
532{
533 DWORD save_num, nread;
534 char FileName[MAX_PATH];
535 HANDLE archive, save;
536 BYTE *buf;
537
538 pfile_strcpy(FileName, pszName);
539 save_num = pfile_get_save_num_from_name(plr[myplr]._pName);
540 archive = pfile_open_save_archive(NULL, save_num);
541 if (archive == NULL)
542 app_fatal("Unable to open save file archive");
543
544 if (!SFileOpenFileEx(archive, FileName, 0, &save))
545 app_fatal("Unable to open save file");
546
547 *pdwLen = SFileGetFileSize(save, NULL);
548 if (*pdwLen == 0)
549 app_fatal("Invalid save file");
550
551 buf = (BYTE *)DiabloAllocPtr(*pdwLen);
552 if (!SFileReadFile(save, buf, *pdwLen, &nread, NULL))
553 app_fatal("Unable to read save file");
554 SFileCloseFile(save);
555 pfile_SFileCloseArchive(archive);
556
557 {
558 char password[16] = PASSWORD_SINGLE;
559 DWORD nSize = 16;
560
561 if (gbMaxPlayers > 1)
562 strcpy(password, PASSWORD_MULTI);
563
564 *pdwLen = codec_decode(buf, *pdwLen, password);
565 if (*pdwLen == 0) {
566 app_fatal("Invalid save file");
567 }
568 }
569 return buf;
570}
571
572void pfile_update(BOOL force_save)
573{

Callers 2

LoadGameFunction · 0.85
LoadLevelFunction · 0.85

Calls 11

pfile_strcpyFunction · 0.85
pfile_open_save_archiveFunction · 0.85
app_fatalFunction · 0.85
SFileOpenFileExFunction · 0.85
SFileGetFileSizeFunction · 0.85
DiabloAllocPtrFunction · 0.85
SFileReadFileFunction · 0.85
SFileCloseFileFunction · 0.85
pfile_SFileCloseArchiveFunction · 0.85
codec_decodeFunction · 0.85

Tested by

no test coverage detected