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

Function SFileCreateFile

extern/StormLib/src/SFileAddFile.cpp:762–816  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

760// Adds data as file to the archive
761
762bool WINAPI SFileCreateFile(
763 HANDLE hMpq,
764 const char * szArchivedName,
765 ULONGLONG FileTime,
766 DWORD dwFileSize,
767 LCID lcFileLocale,
768 DWORD dwFlags,
769 HANDLE * phFile)
770{
771 TMPQArchive * ha = (TMPQArchive *)hMpq;
772 DWORD dwErrCode = ERROR_SUCCESS;
773
774 // Check valid parameters
775 if(!IsValidMpqHandle(hMpq))
776 dwErrCode = ERROR_INVALID_HANDLE;
777 if(szArchivedName == NULL || *szArchivedName == 0)
778 dwErrCode = ERROR_INVALID_PARAMETER;
779 if(phFile == NULL)
780 dwErrCode = ERROR_INVALID_PARAMETER;
781
782 // Don't allow to add file if the MPQ is open for read only
783 if(dwErrCode == ERROR_SUCCESS)
784 {
785 if(ha->dwFlags & MPQ_FLAG_READ_ONLY)
786 dwErrCode = ERROR_ACCESS_DENIED;
787
788 // Don't allow to add a file under pseudo-file name
789 if(IsPseudoFileName(szArchivedName, NULL))
790 dwErrCode = ERROR_INVALID_PARAMETER;
791
792 // Don't allow to add any of the internal files
793 if(IsInternalMpqFileName(szArchivedName))
794 dwErrCode = ERROR_INTERNAL_FILE;
795 }
796
797 // Perform validity check of the MPQ flags
798 if(dwErrCode == ERROR_SUCCESS)
799 {
800 // Mask all unsupported flags out
801 dwFlags &= ha->dwValidFileFlags;
802
803 // Check for valid flag combinations
804 if((dwFlags & (MPQ_FILE_IMPLODE | MPQ_FILE_COMPRESS)) == (MPQ_FILE_IMPLODE | MPQ_FILE_COMPRESS))
805 dwErrCode = ERROR_INVALID_PARAMETER;
806 }
807
808 // Initiate the add file operation
809 if(dwErrCode == ERROR_SUCCESS)
810 dwErrCode = SFileAddFile_Init(ha, szArchivedName, FileTime, dwFileSize, lcFileLocale, dwFlags, (TMPQFile **)phFile);
811
812 // Deal with the errors
813 if(dwErrCode != ERROR_SUCCESS)
814 SetLastError(dwErrCode);
815 return (dwErrCode == ERROR_SUCCESS);
816}
817
818bool WINAPI SFileWriteFile(
819 HANDLE hFile,

Callers 4

AddFileToMpqFunction · 0.85
SFileAddFileExFunction · 0.85
AddFileMethod · 0.85

Calls 5

IsValidMpqHandleFunction · 0.85
IsPseudoFileNameFunction · 0.85
IsInternalMpqFileNameFunction · 0.85
SFileAddFile_InitFunction · 0.85
SetLastErrorFunction · 0.85

Tested by 2

AddFileToMpqFunction · 0.68