1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-29 22:20:33 +00:00

Cast to the unsigned char expected by cctype functions

This commit is contained in:
Evil Eye 2021-11-11 18:14:10 +01:00
parent f23bd51175
commit 6daefe3ddc
5 changed files with 31 additions and 13 deletions

View File

@ -17,6 +17,19 @@
#include "textnode.hpp" #include "textnode.hpp"
#include "valuenode.hpp" #include "valuenode.hpp"
namespace
{
bool isAlpha(char c)
{
return std::isalpha(static_cast<unsigned char>(c));
}
bool isDigit(char c)
{
return std::isdigit(static_cast<unsigned char>(c));
}
}
namespace CSMFilter namespace CSMFilter
{ {
struct Token struct Token
@ -103,7 +116,7 @@ CSMFilter::Token CSMFilter::Parser::getStringToken()
{ {
char c = mInput[mIndex]; char c = mInput[mIndex];
if (std::isalpha (c) || c==':' || c=='_' || (!string.empty() && std::isdigit (c)) || c=='"' || if (isAlpha(c) || c==':' || c=='_' || (!string.empty() && isDigit(c)) || c=='"' ||
(!string.empty() && string[0]=='"')) (!string.empty() && string[0]=='"'))
string += c; string += c;
else else
@ -150,7 +163,7 @@ CSMFilter::Token CSMFilter::Parser::getNumberToken()
{ {
char c = mInput[mIndex]; char c = mInput[mIndex];
if (std::isdigit (c)) if (isDigit(c))
{ {
string += c; string += c;
hasDigit = true; hasDigit = true;
@ -225,10 +238,10 @@ CSMFilter::Token CSMFilter::Parser::getNextToken()
case '!': ++mIndex; return Token (Token::Type_OneShot); case '!': ++mIndex; return Token (Token::Type_OneShot);
} }
if (c=='"' || c=='_' || std::isalpha (c) || c==':') if (c=='"' || c=='_' || isAlpha(c) || c==':')
return getStringToken(); return getStringToken();
if (c=='-' || c=='.' || std::isdigit (c)) if (c=='-' || c=='.' || isDigit(c))
return getNumberToken(); return getNumberToken();
error(); error();

View File

@ -42,9 +42,9 @@ namespace MWInput
bool consumed = SDL_IsTextInputActive() && // Little trick to check if key is printable bool consumed = SDL_IsTextInputActive() && // Little trick to check if key is printable
(!(SDLK_SCANCODE_MASK & arg.keysym.sym) && (!(SDLK_SCANCODE_MASK & arg.keysym.sym) &&
(arg.keysym.sym >= 0 && arg.keysym.sym <= 255 && std::isprint(arg.keysym.sym) ||
// Don't trust isprint for symbols outside the extended ASCII range // Don't trust isprint for symbols outside the extended ASCII range
(kc == MyGUI::KeyCode::None && arg.keysym.sym > 0xff))); ((kc == MyGUI::KeyCode::None && arg.keysym.sym > 0xff) ||
(arg.keysym.sym >= 0 && arg.keysym.sym <= 255 && std::isprint(arg.keysym.sym))));
if (kc != MyGUI::KeyCode::None && !mBindingsManager->isDetectingBindingState()) if (kc != MyGUI::KeyCode::None && !mBindingsManager->isDetectingBindingState())
{ {
if (MWBase::Environment::get().getWindowManager()->injectKeyPress(kc, 0, arg.repeat)) if (MWBase::Environment::get().getWindowManager()->injectKeyPress(kc, 0, arg.repeat))

View File

@ -30,6 +30,11 @@ namespace LuaUtil
{"POTION", ESM::LuaScriptCfg::sPotion}, {"POTION", ESM::LuaScriptCfg::sPotion},
{"WEAPON", ESM::LuaScriptCfg::sWeapon}, {"WEAPON", ESM::LuaScriptCfg::sWeapon},
}; };
bool isSpace(char c)
{
return std::isspace(static_cast<unsigned char>(c));
}
} }
const std::vector<int> ScriptsConfiguration::sEmpty; const std::vector<int> ScriptsConfiguration::sEmpty;
@ -101,11 +106,11 @@ namespace LuaUtil
if (!line.empty() && line.back() == '\r') if (!line.empty() && line.back() == '\r')
line = line.substr(0, line.size() - 1); line = line.substr(0, line.size() - 1);
while (!line.empty() && std::isspace(line[0])) while (!line.empty() && isSpace(line[0]))
line = line.substr(1); line = line.substr(1);
if (line.empty() || line[0] == '#') // Skip empty lines and comments if (line.empty() || line[0] == '#') // Skip empty lines and comments
continue; continue;
while (!line.empty() && std::isspace(line.back())) while (!line.empty() && isSpace(line.back()))
line = line.substr(0, line.size() - 1); line = line.substr(0, line.size() - 1);
if (!Misc::StringUtils::ciEndsWith(line, ".lua")) if (!Misc::StringUtils::ciEndsWith(line, ".lua"))
@ -118,7 +123,7 @@ namespace LuaUtil
throw std::runtime_error(Misc::StringUtils::format("No flags found in: %s", std::string(line))); throw std::runtime_error(Misc::StringUtils::format("No flags found in: %s", std::string(line)));
std::string_view flagsStr = line.substr(0, semicolonPos); std::string_view flagsStr = line.substr(0, semicolonPos);
std::string_view scriptPath = line.substr(semicolonPos + 1); std::string_view scriptPath = line.substr(semicolonPos + 1);
while (std::isspace(scriptPath[0])) while (isSpace(scriptPath[0]))
scriptPath = scriptPath.substr(1); scriptPath = scriptPath.substr(1);
// Parse flags // Parse flags
@ -126,10 +131,10 @@ namespace LuaUtil
size_t flagsPos = 0; size_t flagsPos = 0;
while (true) while (true)
{ {
while (flagsPos < flagsStr.size() && (std::isspace(flagsStr[flagsPos]) || flagsStr[flagsPos] == ',')) while (flagsPos < flagsStr.size() && (isSpace(flagsStr[flagsPos]) || flagsStr[flagsPos] == ','))
flagsPos++; flagsPos++;
size_t startPos = flagsPos; size_t startPos = flagsPos;
while (flagsPos < flagsStr.size() && !std::isspace(flagsStr[flagsPos]) && flagsStr[flagsPos] != ',') while (flagsPos < flagsStr.size() && !isSpace(flagsStr[flagsPos]) && flagsStr[flagsPos] != ',')
flagsPos++; flagsPos++;
if (startPos == flagsPos) if (startPos == flagsPos)
break; break;

View File

@ -187,7 +187,7 @@ public:
const auto notSpace = [](char ch) const auto notSpace = [](char ch)
{ {
// TODO Do we care about multibyte whitespace? // TODO Do we care about multibyte whitespace?
return !std::isspace(ch); return !std::isspace(static_cast<unsigned char>(ch));
}; };
// left trim // left trim
s.erase(s.begin(), std::find_if(s.begin(), s.end(), notSpace)); s.erase(s.begin(), std::find_if(s.begin(), s.end(), notSpace));

View File

@ -311,7 +311,7 @@ void Settings::SettingsFileParser::saveSettingsFile(const std::string& file, con
bool Settings::SettingsFileParser::skipWhiteSpace(size_t& i, std::string& str) bool Settings::SettingsFileParser::skipWhiteSpace(size_t& i, std::string& str)
{ {
while (i < str.size() && std::isspace(str[i], std::locale::classic())) while (i < str.size() && std::isspace(static_cast<unsigned char>(str[i]), std::locale::classic()))
{ {
++i; ++i;
} }