aboutsummaryrefslogtreecommitdiff
path: root/dep/CascLib/src/common/Common.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-02-06 20:08:39 +0100
committerShauren <shauren.trinity@gmail.com>2023-02-06 20:08:39 +0100
commitfd154940eddc54e556d6bfb5147cedbda4750c3e (patch)
tree8ff9e3974e8479c1b8157f8aa40bc094cba24bc2 /dep/CascLib/src/common/Common.h
parent99320464997a5411b7245cb952eaf6cdf8a2a978 (diff)
Dep/CascLib: Update to ladislav-zezula/CascLib@a5080b5794027a25d98aa6024b2bef17d06fe0ea
Diffstat (limited to 'dep/CascLib/src/common/Common.h')
-rw-r--r--dep/CascLib/src/common/Common.h87
1 files changed, 60 insertions, 27 deletions
diff --git a/dep/CascLib/src/common/Common.h b/dep/CascLib/src/common/Common.h
index 3fbbf0d842c..5abc5c77b9a 100644
--- a/dep/CascLib/src/common/Common.h
+++ b/dep/CascLib/src/common/Common.h
@@ -124,7 +124,7 @@ typedef CASC_CKEY_ENTRY *PCASC_CKEY_ENTRY;
extern unsigned char AsciiToLowerTable_Slash[256];
extern unsigned char AsciiToUpperTable_BkSlash[256];
-extern unsigned char AsciiToHexTable[0x80];
+extern unsigned char AsciiToHexTable[128];
extern unsigned char IntToHexChar[];
//-----------------------------------------------------------------------------
@@ -186,7 +186,7 @@ inline DWORD Rol32(DWORD dwValue, DWORD dwRolCount)
//-----------------------------------------------------------------------------
// Big endian number manipulation
-inline DWORD ConvertBytesToInteger_2(LPBYTE ValueAsBytes)
+inline USHORT ConvertBytesToInteger_2(LPBYTE ValueAsBytes)
{
USHORT Value = 0;
@@ -325,7 +325,9 @@ void CascStrCopy(wchar_t * szTarget, size_t cchTarget, const wchar_t * szSource,
//-----------------------------------------------------------------------------
// Safe version of s(w)printf
+size_t CascStrPrintfV(char * buffer, size_t nCount, const char * format, va_list argList);
size_t CascStrPrintf(char * buffer, size_t nCount, const char * format, ...);
+size_t CascStrPrintfV(wchar_t * buffer, size_t nCount, const wchar_t * format, va_list argList);
size_t CascStrPrintf(wchar_t * buffer, size_t nCount, const wchar_t * format, ...);
//-----------------------------------------------------------------------------
@@ -337,11 +339,6 @@ wchar_t * CascNewStr(const wchar_t * szString, size_t nCharsToReserve = 0);
LPSTR CascNewStrT2A(LPCTSTR szString, size_t nCharsToReserve = 0);
LPTSTR CascNewStrA2T(LPCSTR szString, size_t nCharsToReserve = 0);
-size_t CombinePath(LPTSTR szBuffer, size_t nMaxChars, va_list argList);
-size_t CombinePath(LPTSTR szBuffer, size_t nMaxChars, ...);
-LPTSTR GetLastPathPart(LPTSTR szWorkPath);
-bool CutLastPathPart(LPTSTR szWorkPath);
-
size_t NormalizeFileName_UpperBkSlash(char * szNormName, const char * szFileName, size_t cchMaxChars);
size_t NormalizeFileName_LowerSlash(char * szNormName, const char * szFileName, size_t cchMaxChars);
@@ -351,6 +348,12 @@ ULONGLONG CalcFileNameHash(const char * szFileName);
//-----------------------------------------------------------------------------
// String conversion functions
+template <typename xchar>
+bool IsHexadecimalDigit(xchar ch)
+{
+ return ((ch < sizeof(AsciiToHexTable)) && (AsciiToHexTable[ch] != 0xFF));
+}
+
template <typename xchar, typename INTXX>
DWORD ConvertStringToInt(const xchar * szString, size_t nMaxDigits, INTXX & RefValue, const xchar ** PtrStringEnd = NULL)
{
@@ -448,34 +451,75 @@ xchar * StringFromBinary(LPBYTE pbBinary, size_t cbBinary, xchar * szBuffer)
//-----------------------------------------------------------------------------
// Structures for data blobs
-struct QUERY_KEY
+struct CASC_BLOB
{
- QUERY_KEY()
+ CASC_BLOB()
{
- pbData = NULL;
- cbData = 0;
+ Reset();
}
- ~QUERY_KEY()
+ ~CASC_BLOB()
{
- CASC_FREE(pbData);
- cbData = 0;
+ Free();
+ }
+
+ void MoveFrom(CASC_BLOB & Source)
+ {
+ // Free current data, if any
+ Free();
+
+ // Take the source data
+ pbData = Source.pbData;
+ cbData = Source.cbData;
+
+ // Reset the source data without freeing
+ Source.Reset();
}
DWORD SetData(const void * pv, size_t cb)
{
- if((pbData = CASC_ALLOC<BYTE>(cb)) == NULL)
+ if(SetSize(cb) != ERROR_SUCCESS)
return ERROR_NOT_ENOUGH_MEMORY;
memcpy(pbData, pv, cb);
+ return ERROR_SUCCESS;
+ }
+
+ DWORD SetSize(size_t cb)
+ {
+ Free();
+
+ // Always leave one extra byte for NUL character
+ if((pbData = CASC_ALLOC<BYTE>(cb + 1)) == NULL)
+ return ERROR_NOT_ENOUGH_MEMORY;
+
cbData = cb;
return ERROR_SUCCESS;
}
+ void Reset()
+ {
+ pbData = NULL;
+ cbData = 0;
+ }
+
+ void Free()
+ {
+ if(pbData != NULL)
+ CASC_FREE(pbData);
+ pbData = NULL;
+ cbData = 0;
+ }
+
+ LPBYTE End() const
+ {
+ return pbData + cbData;
+ }
+
LPBYTE pbData;
size_t cbData;
};
-typedef QUERY_KEY *PQUERY_KEY;
+typedef CASC_BLOB *PCASC_BLOB;
//-----------------------------------------------------------------------------
// File name utilities
@@ -526,22 +570,11 @@ bool CascCheckWildCard(const char * szString, const char * szWildCard);
//-----------------------------------------------------------------------------
// Hashing functions
-ULONGLONG HashStringJenkins(const char * szFileName);
-
bool CascIsValidMD5(LPBYTE pbMd5);
void CascCalculateDataBlockHash(void * pvDataBlock, DWORD cbDataBlock, LPBYTE md5_hash);
bool CascVerifyDataBlockHash(void * pvDataBlock, DWORD cbDataBlock, LPBYTE expected_md5);
//-----------------------------------------------------------------------------
-// Scanning a directory
-
-typedef bool (*INDEX_FILE_FOUND)(LPCTSTR szFileName, void * pvContext);
-
-bool DirectoryExists(LPCTSTR szDirectory);
-
-int ScanIndexDirectory(LPCTSTR szIndexPath, INDEX_FILE_FOUND pfnOnFileFound, void * pvContext);
-
-//-----------------------------------------------------------------------------
// Argument structure versioning
// Safely retrieves field value from a structure
// intended for cases where users upgrade CascLib by simply dropping in a new .dll without recompiling their app