diff options
Diffstat (limited to 'src/engine/shared')
| -rw-r--r-- | src/engine/shared/console.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp index dc2e1a25..808b64ed 100644 --- a/src/engine/shared/console.cpp +++ b/src/engine/shared/console.cpp @@ -383,7 +383,28 @@ static void StrVariableCommand(IConsole::IResult *pResult, void *pUserData) CStrVariableData *pData = (CStrVariableData *)pUserData; if(pResult->NumArguments()) - str_copy(pData->m_pStr, pResult->GetString(0), pData->m_MaxSize); + { + const char *pString = pResult->GetString(0); + if(!str_utf8_check(pString)) + { + char Temp[4]; + int Length = 0; + while(*pString) + { + int Size = str_utf8_encode(Temp, static_cast<const unsigned char>(*pString++)); + if(Length+Size < pData->m_MaxSize) + { + mem_copy(pData->m_pStr+Length, &Temp, Size); + Length += Size; + } + else + break; + } + pData->m_pStr[Length] = 0; + } + else + str_copy(pData->m_pStr, pString, pData->m_MaxSize); + } else { char aBuf[1024]; |