aboutsummaryrefslogtreecommitdiff
path: root/src/SMemUtf8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMemUtf8.cpp')
-rw-r--r--src/SMemUtf8.cpp37
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
+}