diff options
Diffstat (limited to 'src/SMemUtf8.cpp')
| -rw-r--r-- | src/SMemUtf8.cpp | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/SMemUtf8.cpp b/src/SMemUtf8.cpp index 5832422..b9d5e9d 100644 --- a/src/SMemUtf8.cpp +++ b/src/SMemUtf8.cpp @@ -40,6 +40,8 @@ const unsigned char SMemCharToByte[0x80] = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // 0x70 }; +static TCHAR szInvalidCharPrefix[] = _T("%u["); + //----------------------------------------------------------------------------- // Local functions @@ -92,7 +94,7 @@ static DWORD UTF8_DecodeSequence(const BYTE * pbString, BYTE BitsMask, size_t cc } // https://en.wikipedia.org/wiki/UTF-8 -static DWORD UTF8_DecodeCodePoint(const BYTE * pbString, const BYTE * pbStringEnd, DWORD & dwCodePoint, size_t & ccBytesEaten) +DWORD UTF8_DecodeCodePoint(const BYTE * pbString, const BYTE * pbStringEnd, DWORD & dwCodePoint, size_t & ccBytesEaten) { // Reset the number of bytes eaten dwCodePoint = SFILE_UTF8_INVALID_CHARACTER; @@ -165,7 +167,7 @@ static size_t UTF8_EncodeSequence(DWORD dwCodePoint, BYTE LeadingByte, DWORD dwF return dwFollowByteCount + 1; } -static size_t UTF8_EncodeCodePoint(DWORD dwCodePoint, LPBYTE Utf8Buffer) +size_t UTF8_EncodeCodePoint(DWORD dwCodePoint, LPBYTE Utf8Buffer) { // 0x00 - 0x7F, 1 byte if(dwCodePoint < 0x80) @@ -217,7 +219,7 @@ static size_t UTF8_FlushInvalidChars(LPTSTR szBuffer, size_t ccBuffer, size_t nO // Space for 4 characters needed if(szBuffer != NULL && (nOutLength + nLengthNeeded) <= ccBuffer) { - memcpy(szBuffer + nOutLength, _T("%u["), 6); + memcpy(szBuffer + nOutLength, szInvalidCharPrefix, sizeof(szInvalidCharPrefix) - sizeof(TCHAR)); SMemBinToStr(szBuffer + nOutLength + 3, ccBuffer - 3, InvalidChars, nInvalidChars); @@ -549,3 +551,32 @@ DWORD WINAPI SMemFileNameToUTF8( pOutLength[0] = nOutLength; return dwErrCode; } + +//----------------------------------------------------------------------------- +// (Set/Get)LastError wrapper + +#ifndef STORMLIB_WINDOWS +#ifndef STORMLIB_WIIU +static thread_local DWORD dwLastError = ERROR_SUCCESS; +#else +static DWORD dwLastError = ERROR_SUCCESS; +#endif +#endif + +void SErrSetLastError(DWORD dwErrCode) +{ +#ifdef STORMLIB_WINDOWS + SetLastError(dwErrCode); +#else + dwLastError = dwErrCode; +#endif +} + +DWORD SErrGetLastError() +{ +#ifdef STORMLIB_WINDOWS + return GetLastError(); +#else + return dwLastError; +#endif +} |
