Merge pull request #182 from fingolfin/forbid-ctype
ALL: Avoid using is* macros from ctype.h
This commit is contained in:
commit
9ffe3e11d9
41 changed files with 236 additions and 105 deletions
|
@ -277,7 +277,7 @@ void registerDefaults() {
|
|||
// resp. between "--some-option" and "--no-some-option".
|
||||
#define DO_OPTION_BOOL(shortCmd, longCmd) \
|
||||
if (isLongCmd ? (!strcmp(s+2, longCmd) || !strcmp(s+2, "no-"longCmd)) : (tolower(s[1]) == shortCmd)) { \
|
||||
bool boolValue = (islower(static_cast<unsigned char>(s[1])) != 0); \
|
||||
bool boolValue = (Common::isLower(s[1]) != 0); \
|
||||
s += 2; \
|
||||
if (isLongCmd) { \
|
||||
boolValue = !strcmp(s, longCmd); \
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace Common {
|
|||
|
||||
bool ConfigFile::isValidName(const String &name) {
|
||||
const char *p = name.c_str();
|
||||
while (*p && (isalnum(static_cast<unsigned char>(*p)) || *p == '-' || *p == '_' || *p == '.'))
|
||||
while (*p && (isAlnum(*p) || *p == '-' || *p == '_' || *p == '.'))
|
||||
p++;
|
||||
return *p == 0;
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ bool ConfigFile::loadFromStream(SeekableReadStream &stream) {
|
|||
// is, verify that it only consists of alphanumerics,
|
||||
// periods, dashes and underscores). Mohawk Living Books games
|
||||
// can have periods in their section names.
|
||||
while (*p && (isalnum(static_cast<unsigned char>(*p)) || *p == '-' || *p == '_' || *p == '.'))
|
||||
while (*p && (isAlnum(*p) || *p == '-' || *p == '_' || *p == '.'))
|
||||
p++;
|
||||
|
||||
if (*p == '\0')
|
||||
|
@ -131,7 +131,7 @@ bool ConfigFile::loadFromStream(SeekableReadStream &stream) {
|
|||
|
||||
// Skip leading whitespaces
|
||||
const char *t = line.c_str();
|
||||
while (isspace(static_cast<unsigned char>(*t)))
|
||||
while (isSpace(*t))
|
||||
t++;
|
||||
|
||||
// Skip empty lines / lines with only whitespace
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
static bool isValidDomainName(const Common::String &domName) {
|
||||
const char *p = domName.c_str();
|
||||
while (*p && (isalnum(static_cast<unsigned char>(*p)) || *p == '-' || *p == '_'))
|
||||
while (*p && (Common::isAlnum(*p) || *p == '-' || *p == '_'))
|
||||
p++;
|
||||
return *p == 0;
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ void ConfigManager::loadFromStream(SeekableReadStream &stream) {
|
|||
// Get the domain name, and check whether it's valid (that
|
||||
// is, verify that it only consists of alphanumerics,
|
||||
// dashes and underscores).
|
||||
while (*p && (isalnum(static_cast<unsigned char>(*p)) || *p == '-' || *p == '_'))
|
||||
while (*p && (isAlnum(*p) || *p == '-' || *p == '_'))
|
||||
p++;
|
||||
|
||||
if (*p == '\0')
|
||||
|
@ -205,7 +205,7 @@ void ConfigManager::loadFromStream(SeekableReadStream &stream) {
|
|||
|
||||
// Skip leading whitespaces
|
||||
const char *t = line.c_str();
|
||||
while (isspace(static_cast<unsigned char>(*t)))
|
||||
while (isSpace(*t))
|
||||
t++;
|
||||
|
||||
// Skip empty lines / lines with only whitespace
|
||||
|
|
|
@ -317,6 +317,49 @@
|
|||
|
||||
#endif // FORBIDDEN_SYMBOL_EXCEPTION_unistd_h
|
||||
|
||||
|
||||
//
|
||||
// Disable various symbols from ctype.h
|
||||
//
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_ctype_h
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_isalnum
|
||||
#undef isalnum
|
||||
#define isalnum(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_isalpha
|
||||
#undef isalpha
|
||||
#define isalpha(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_isdigit
|
||||
#undef isdigit
|
||||
#define isdigit(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_isnumber
|
||||
#undef isnumber
|
||||
#define isnumber(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_islower
|
||||
#undef islower
|
||||
#define islower(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_isspace
|
||||
#undef isspace
|
||||
#define isspace(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_isupper
|
||||
#undef isupper
|
||||
#define isupper(a) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
#endif
|
||||
|
||||
#endif // FORBIDDEN_SYMBOL_EXCEPTION_ctype_h
|
||||
|
||||
#ifndef FORBIDDEN_SYMBOL_EXCEPTION_mkdir
|
||||
#undef mkdir
|
||||
#define mkdir(a,b) FORBIDDEN_SYMBOL_REPLACEMENT
|
||||
|
|
|
@ -405,13 +405,13 @@ void String::trim() {
|
|||
makeUnique();
|
||||
|
||||
// Trim trailing whitespace
|
||||
while (_size >= 1 && isspace(static_cast<unsigned char>(_str[_size - 1])))
|
||||
while (_size >= 1 && isSpace(_str[_size - 1]))
|
||||
--_size;
|
||||
_str[_size] = 0;
|
||||
|
||||
// Trim leading whitespace
|
||||
char *t = _str;
|
||||
while (isspace((unsigned char)*t))
|
||||
while (isSpace(*t))
|
||||
t++;
|
||||
|
||||
if (t != _str) {
|
||||
|
@ -606,14 +606,14 @@ String operator+(const String &x, char y) {
|
|||
}
|
||||
|
||||
char *ltrim(char *t) {
|
||||
while (isspace(static_cast<unsigned char>(*t)))
|
||||
while (isSpace(*t))
|
||||
t++;
|
||||
return t;
|
||||
}
|
||||
|
||||
char *rtrim(char *t) {
|
||||
int l = strlen(t) - 1;
|
||||
while (l >= 0 && isspace(static_cast<unsigned char>(t[l])))
|
||||
while (l >= 0 && isSpace(t[l]))
|
||||
t[l--] = 0;
|
||||
return t;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,15 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_isalnum
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_isalpha
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_isdigit
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_isnumber
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_islower
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_isspace
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_isupper
|
||||
|
||||
|
||||
#include "common/util.h"
|
||||
#include "common/translation.h"
|
||||
#include "common/config-manager.h"
|
||||
|
@ -406,4 +415,38 @@ void updateGameGUIOptions(const String &options, const String &langOption) {
|
|||
}
|
||||
}
|
||||
|
||||
#define ENSURE_ASCII_CHAR(c) \
|
||||
if (c < 0 || c > 127) \
|
||||
return false
|
||||
|
||||
bool isAlnum(int c) {
|
||||
ENSURE_ASCII_CHAR(c);
|
||||
return isalnum((byte)c);
|
||||
}
|
||||
|
||||
bool isAlpha(int c) {
|
||||
ENSURE_ASCII_CHAR(c);
|
||||
return isalpha((byte)c);
|
||||
}
|
||||
|
||||
bool isDigit(int c) {
|
||||
ENSURE_ASCII_CHAR(c);
|
||||
return isdigit((byte)c);
|
||||
}
|
||||
|
||||
bool isLower(int c) {
|
||||
ENSURE_ASCII_CHAR(c);
|
||||
return islower((byte)c);
|
||||
}
|
||||
|
||||
bool isSpace(int c) {
|
||||
ENSURE_ASCII_CHAR(c);
|
||||
return isspace((byte)c);
|
||||
}
|
||||
|
||||
bool isUpper(int c) {
|
||||
ENSURE_ASCII_CHAR(c);
|
||||
return isupper((byte)c);
|
||||
}
|
||||
|
||||
} // End of namespace Common
|
||||
|
|
|
@ -133,6 +133,70 @@ extern void hexdump(const byte * data, int len, int bytesPerLine = 16, int start
|
|||
*/
|
||||
bool parseBool(const String &val, bool &valAsBool);
|
||||
|
||||
|
||||
/**
|
||||
* Test whether the given character is alphanumeric (a-z, A-Z, 0-9).
|
||||
* If the parameter is outside the range of a signed or unsigned char, then
|
||||
* false is returned.
|
||||
*
|
||||
* @param c the character to test
|
||||
* @return true if the character is alphanumeric, false otherwise.
|
||||
*/
|
||||
bool isAlnum(int c);
|
||||
|
||||
/**
|
||||
* Test whether the given character is an alphabetic letter (a-z, A-Z).
|
||||
* If the parameter is outside the range of a signed or unsigned char, then
|
||||
* false is returned.
|
||||
*
|
||||
* @param c the character to test
|
||||
* @return true if the character is TODO, false otherwise.
|
||||
*/
|
||||
bool isAlpha(int c);
|
||||
|
||||
/**
|
||||
* Test whether the given character is a decimal-digit (0-9).
|
||||
* If the parameter is outside the range of a signed or unsigned char, then
|
||||
* false is returned.
|
||||
*
|
||||
* @param c the character to test
|
||||
* @return true if the character is a decimal-digit, false otherwise.
|
||||
*/
|
||||
bool isDigit(int c);
|
||||
|
||||
/**
|
||||
* Test whether the given character is a lower-case letter (a-z).
|
||||
* If the parameter is outside the range of a signed or unsigned char, then
|
||||
* false is returned.
|
||||
*
|
||||
* @param c the character to test
|
||||
* @return true if the character is a lower-case letter, false otherwise.
|
||||
*/
|
||||
bool isLower(int c);
|
||||
|
||||
/**
|
||||
* Test whether the given character is a white-space.
|
||||
* White-space characters are ' ', '\t', '\r', '\n', '\v', '\f'.
|
||||
*
|
||||
* If the parameter is outside the range of a signed or unsigned char, then
|
||||
* false is returned.
|
||||
*
|
||||
* @param c the character to test
|
||||
* @return true if the character is a white-space, false otherwise.
|
||||
*/
|
||||
bool isSpace(int c);
|
||||
|
||||
/**
|
||||
* Test whether the given character is an upper-case letter (A-Z).
|
||||
* If the parameter is outside the range of a signed or unsigned char, then
|
||||
* false is returned.
|
||||
*
|
||||
* @param c the character to test
|
||||
* @return true if the character is an upper-case letter, false otherwise.
|
||||
*/
|
||||
bool isUpper(int c);
|
||||
|
||||
|
||||
/**
|
||||
* List of game language.
|
||||
*/
|
||||
|
|
|
@ -263,7 +263,7 @@ bool XMLParser::vparseIntegerKey(const char *key, int count, va_list args) {
|
|||
int *num_ptr;
|
||||
|
||||
while (count--) {
|
||||
while (isspace(static_cast<unsigned char>(*key)))
|
||||
while (isSpace(*key))
|
||||
key++;
|
||||
|
||||
num_ptr = va_arg(args, int*);
|
||||
|
@ -271,7 +271,7 @@ bool XMLParser::vparseIntegerKey(const char *key, int count, va_list args) {
|
|||
|
||||
key = parseEnd;
|
||||
|
||||
while (isspace(static_cast<unsigned char>(*key)))
|
||||
while (isSpace(*key))
|
||||
key++;
|
||||
|
||||
if (count && *key++ != ',')
|
||||
|
@ -463,10 +463,10 @@ bool XMLParser::parse() {
|
|||
}
|
||||
|
||||
bool XMLParser::skipSpaces() {
|
||||
if (!isspace(static_cast<unsigned char>(_char)))
|
||||
if (!isSpace(_char))
|
||||
return false;
|
||||
|
||||
while (_char && isspace(static_cast<unsigned char>(_char)))
|
||||
while (_char && isSpace(_char))
|
||||
_char = _stream->readByte();
|
||||
|
||||
return true;
|
||||
|
@ -516,7 +516,7 @@ bool XMLParser::parseToken() {
|
|||
_char = _stream->readByte();
|
||||
}
|
||||
|
||||
return isspace(static_cast<unsigned char>(_char)) != 0 || _char == '>' || _char == '=' || _char == '/';
|
||||
return isSpace(_char) != 0 || _char == '>' || _char == '=' || _char == '/';
|
||||
}
|
||||
|
||||
} // End of namespace Common
|
||||
|
|
|
@ -295,7 +295,7 @@ protected:
|
|||
* in their name.
|
||||
*/
|
||||
virtual inline bool isValidNameChar(char c) {
|
||||
return isalnum(static_cast<unsigned char>(c)) || c == '_';
|
||||
return isAlnum(c) || c == '_';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -250,19 +250,7 @@ void AgiEngine::processEvents() {
|
|||
// Not a special key, so get the ASCII code for it
|
||||
key = event.kbd.ascii;
|
||||
|
||||
// Function isalpha is defined in <ctype.h> so the following applies to it:
|
||||
//
|
||||
// The C Programming Language Standard states:
|
||||
// The header <ctype.h> declares several functions useful for classifying
|
||||
// and mapping characters. In all cases the argument is an int, the value
|
||||
// of which shall be representable as an unsigned char or shall equal the
|
||||
// value of the macro EOF. If the argument has any other value, the
|
||||
// behavior is undefined.
|
||||
//
|
||||
// For a concrete example (e.g. in Microsoft Visual Studio 2003):
|
||||
// When used with a debug CRT library, isalpha will display a CRT assert
|
||||
// if passed a parameter that isn't EOF or in the range of 0 through 0xFF.
|
||||
if (key >= 0 && key <= 0xFF && isalpha(key)) {
|
||||
if (Common::isAlpha(key)) {
|
||||
// Key is A-Z.
|
||||
// Map Ctrl-A to 1, Ctrl-B to 2, etc.
|
||||
if (event.kbd.flags & Common::KBD_CTRL) {
|
||||
|
|
|
@ -112,11 +112,11 @@ WagFileParser::~WagFileParser() {
|
|||
bool WagFileParser::checkAgiVersionProperty(const WagProperty &version) const {
|
||||
if (version.getCode() == WagProperty::PC_INTVERSION && // Must be AGI interpreter version property
|
||||
version.getSize() >= 3 && // Need at least three characters for a version number like "X.Y"
|
||||
isdigit(static_cast<unsigned char>(version.getData()[0])) && // And the first character must be a digit
|
||||
Common::isDigit(version.getData()[0]) && // And the first character must be a digit
|
||||
(version.getData()[1] == ',' || version.getData()[1] == '.')) { // And the second a comma or a period
|
||||
|
||||
for (int i = 2; i < version.getSize(); i++) // And the rest must all be digits
|
||||
if (!isdigit(static_cast<unsigned char>(version.getData()[i])))
|
||||
if (!Common::isDigit(version.getData()[i]))
|
||||
return false; // Bail out if found a non-digit after the decimal point
|
||||
|
||||
return true;
|
||||
|
|
|
@ -466,8 +466,8 @@ void AGOSEngine_PN::opn_opcode35() {
|
|||
void AGOSEngine_PN::opn_opcode36() {
|
||||
for (int i = 0; i < _dataBase[57] + 1; ++i)
|
||||
_wordcp[i] = 0;
|
||||
if (isspace(static_cast<unsigned char>(*_inpp)))
|
||||
while ((*_inpp) && (isspace(static_cast<unsigned char>(*_inpp))))
|
||||
if (Common::isSpace(*_inpp))
|
||||
while ((*_inpp) && (Common::isSpace(*_inpp)))
|
||||
_inpp++;
|
||||
if (*_inpp == 0) {
|
||||
setScriptReturn(false);
|
||||
|
@ -481,7 +481,7 @@ void AGOSEngine_PN::opn_opcode36() {
|
|||
}
|
||||
|
||||
int ct = 1;
|
||||
while ((*_inpp != '.') && (*_inpp != ',') && (!isspace(static_cast<unsigned char>(*_inpp))) && (*_inpp != '\0') &&
|
||||
while ((*_inpp != '.') && (*_inpp != ',') && (!Common::isSpace(*_inpp)) && (*_inpp != '\0') &&
|
||||
(*_inpp!='"')) {
|
||||
if (ct < _dataBase[57])
|
||||
_wordcp[ct++] = *_inpp;
|
||||
|
@ -581,7 +581,7 @@ void AGOSEngine_PN::opn_opcode46() {
|
|||
return;
|
||||
}
|
||||
x++;
|
||||
while ((*x != '.') && (*x != ',') && (*x != '"') && (!isspace(static_cast<unsigned char>(*x))) && (*x != '\0'))
|
||||
while ((*x != '.') && (*x != ',') && (*x != '"') && (!Common::isSpace(*x)) && (*x != '\0'))
|
||||
pcf(*x++);
|
||||
setScriptReturn(true);
|
||||
}
|
||||
|
|
|
@ -152,7 +152,7 @@ const byte *AGOSEngine::getStringPtrByID(uint16 stringId, bool upperCase) {
|
|||
}
|
||||
|
||||
if (upperCase && *dst) {
|
||||
if (islower(*dst))
|
||||
if (Common::isLower(*dst))
|
||||
*dst = toupper(*dst);
|
||||
}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ void AGOSEngine_PN::pcf(uint8 ch) {
|
|||
if ((ch != 32) || (_bp + _xofs != 50))
|
||||
_buffer[_bp++] = ch;
|
||||
}
|
||||
if ((ch != 254) && (!isspace(ch)) && (_bp < 60))
|
||||
if ((ch != 254) && (!Common::isSpace(ch)) && (_bp < 60))
|
||||
return;
|
||||
/* We know have a case of needing to print the text */
|
||||
if (_bp + _xofs > 50) {
|
||||
|
|
|
@ -72,7 +72,7 @@ int16 Text::count() {
|
|||
strcpy(tmpStr, line.c_str());
|
||||
if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL)
|
||||
continue;
|
||||
if (!isdigit(*s))
|
||||
if (!Common::isDigit(*s))
|
||||
continue;
|
||||
|
||||
counter++;
|
||||
|
@ -105,7 +105,7 @@ void Text::load() {
|
|||
strcpy(tmpStr, line.c_str());
|
||||
if ((s = strtok(tmpStr, " =,;/\t\n")) == NULL)
|
||||
continue;
|
||||
if (!isdigit(*s))
|
||||
if (!Common::isDigit(*s))
|
||||
continue;
|
||||
|
||||
int r = atoi(s);
|
||||
|
|
|
@ -141,7 +141,7 @@ SaveStateList CineMetaEngine::listSaves(const char *target) const {
|
|||
|
||||
for (file = filenames.begin(); file != filenames.end(); ++file) {
|
||||
// Jump over savegame files that don't end with a digit (e.g. "fw.3" is ok, "fw.a" is not).
|
||||
if (!isdigit(static_cast<unsigned char>(file->lastChar())))
|
||||
if (!Common::isDigit(file->lastChar()))
|
||||
continue;
|
||||
|
||||
// Obtain the last digit of the filename, since they correspond to the save slot
|
||||
|
|
|
@ -168,7 +168,7 @@ void DrasculaEngine::enterName() {
|
|||
key = getScan();
|
||||
|
||||
if (key != 0) {
|
||||
if (key >= 0 && key <= 0xFF && isalpha(static_cast<unsigned char>(key)))
|
||||
if (key >= 0 && key <= 0xFF && isAlpha(key))
|
||||
select2[v] = tolower(key);
|
||||
else if ((key >= Common::KEYCODE_0 && key <= Common::KEYCODE_9) || key == Common::KEYCODE_SPACE)
|
||||
select2[v] = key;
|
||||
|
|
|
@ -119,7 +119,7 @@ char *strlwr(char *buffer) {
|
|||
char *result = buffer;
|
||||
|
||||
while (*buffer != '\0') {
|
||||
if (isupper(static_cast<unsigned char>(*buffer)))
|
||||
if (Common::isUpper(*buffer))
|
||||
*buffer = tolower(*buffer);
|
||||
buffer++;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ void GUI::updateSaveFileList(Common::String targetName, bool excludeQuickSaves)
|
|||
s1 = (*i)[i->size() - 3];
|
||||
s2 = (*i)[i->size() - 2];
|
||||
s3 = (*i)[i->size() - 1];
|
||||
if (!isdigit(static_cast<unsigned char>(s1)) || !isdigit(static_cast<unsigned char>(s2)) || !isdigit(static_cast<unsigned char>(s3)))
|
||||
if (!Common::isDigit(s1) || !Common::isDigit(s2) || !Common::isDigit(s3))
|
||||
continue;
|
||||
s1 -= '0';
|
||||
s2 -= '0';
|
||||
|
|
|
@ -1766,7 +1766,7 @@ uint LBCode::parseCode(const Common::String &source) {
|
|||
{
|
||||
Common::String tempString;
|
||||
while (pos < source.size()) {
|
||||
if (!isalpha(source[pos]) && !isdigit(source[pos]))
|
||||
if (!Common::isAlpha(source[pos]) && !Common::isDigit(source[pos]))
|
||||
break;
|
||||
tempString += source[pos++];
|
||||
}
|
||||
|
@ -1777,7 +1777,7 @@ uint LBCode::parseCode(const Common::String &source) {
|
|||
}
|
||||
break;
|
||||
default:
|
||||
if (isdigit(token)) {
|
||||
if (Common::isDigit(token)) {
|
||||
const char *in = source.c_str() + pos - 1;
|
||||
// FIXME: handle floats?
|
||||
char *endptr;
|
||||
|
@ -1792,11 +1792,11 @@ uint LBCode::parseCode(const Common::String &source) {
|
|||
WRITE_BE_UINT16(tmp, (int16)intValue);
|
||||
code.push_back(tmp[0]);
|
||||
code.push_back(tmp[1]);
|
||||
} else if (isalpha(token)) {
|
||||
} else if (Common::isAlpha(token)) {
|
||||
Common::String tempString;
|
||||
tempString += token;
|
||||
while (pos < source.size()) {
|
||||
if (!isalpha(source[pos]) && !isdigit(source[pos]))
|
||||
if (!Common::isAlpha(source[pos]) && !Common::isDigit(source[pos]))
|
||||
break;
|
||||
tempString += source[pos++];
|
||||
}
|
||||
|
|
|
@ -381,7 +381,7 @@ protected:
|
|||
}
|
||||
|
||||
void accumPassword(uint16 ascii) {
|
||||
if (!isdigit(ascii)) {
|
||||
if (!Common::isDigit(ascii)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -524,14 +524,14 @@ DECLARE_COMMAND_PARSER(location) {
|
|||
ctxt.cmd->_startPos.x = -1000;
|
||||
ctxt.cmd->_startPos2.x = -1000;
|
||||
if (_tokens[ctxt.nextToken][0] != '\0') {
|
||||
if (isdigit(static_cast<unsigned char>(_tokens[ctxt.nextToken][0])) || _tokens[ctxt.nextToken][0] == '-') {
|
||||
if (Common::isDigit(_tokens[ctxt.nextToken][0]) || _tokens[ctxt.nextToken][0] == '-') {
|
||||
ctxt.cmd->_startPos.x = atoi(_tokens[ctxt.nextToken]);
|
||||
ctxt.nextToken++;
|
||||
ctxt.cmd->_startPos.y = atoi(_tokens[ctxt.nextToken]);
|
||||
ctxt.nextToken++;
|
||||
}
|
||||
|
||||
if (isdigit(static_cast<unsigned char>(_tokens[ctxt.nextToken][0])) || _tokens[ctxt.nextToken][0] == '-') {
|
||||
if (Common::isDigit(_tokens[ctxt.nextToken][0]) || _tokens[ctxt.nextToken][0] == '-') {
|
||||
ctxt.cmd->_startPos2.x = atoi(_tokens[ctxt.nextToken]);
|
||||
ctxt.nextToken++;
|
||||
ctxt.cmd->_startPos2.y = atoi(_tokens[ctxt.nextToken]);
|
||||
|
@ -677,7 +677,7 @@ DECLARE_COMMAND_PARSER(text) {
|
|||
|
||||
createCommand(_parser->_lookup);
|
||||
|
||||
if (isdigit(static_cast<unsigned char>(_tokens[1][1]))) {
|
||||
if (Common::isDigit(_tokens[1][1])) {
|
||||
ctxt.cmd->_zeta0 = atoi(_tokens[1]);
|
||||
ctxt.nextToken++;
|
||||
} else {
|
||||
|
@ -714,7 +714,7 @@ DECLARE_COMMAND_PARSER(unary) {
|
|||
DECLARE_ZONE_PARSER(limits) {
|
||||
debugC(7, kDebugParser, "ZONE_PARSER(limits) ");
|
||||
|
||||
if (isalpha(static_cast<unsigned char>(_tokens[1][1]))) {
|
||||
if (Common::isAlpha(_tokens[1][1])) {
|
||||
ctxt.z->_flags |= kFlagsAnimLinked;
|
||||
ctxt.z->_linkedName = _tokens[1];
|
||||
} else {
|
||||
|
@ -1003,7 +1003,7 @@ DECLARE_INSTRUCTION_PARSER(text) {
|
|||
|
||||
int _si = 1;
|
||||
|
||||
if (isdigit(static_cast<unsigned char>(_tokens[1][1]))) {
|
||||
if (Common::isDigit(_tokens[1][1])) {
|
||||
ctxt.inst->_y = atoi(_tokens[1]);
|
||||
_si = 2;
|
||||
} else {
|
||||
|
@ -1066,7 +1066,7 @@ DECLARE_INSTRUCTION_PARSER(endif) {
|
|||
|
||||
void ProgramParser_br::parseRValue(ScriptVar &v, const char *str) {
|
||||
|
||||
if (isdigit(static_cast<unsigned char>(str[0])) || str[0] == '-') {
|
||||
if (Common::isDigit(str[0]) || str[0] == '-') {
|
||||
v.setImmediate(atoi(str));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -534,7 +534,7 @@ DECLARE_INSTRUCTION_PARSER(endscript) {
|
|||
|
||||
void ProgramParser_ns::parseRValue(ScriptVar &v, const char *str) {
|
||||
|
||||
if (isdigit(static_cast<unsigned char>(str[0])) || str[0] == '-') {
|
||||
if (Common::isDigit(str[0]) || str[0] == '-') {
|
||||
v.setImmediate(atoi(str));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -657,7 +657,7 @@ void Talk::stringAnimation(const SpeechParameters *parameters, int startFrame, i
|
|||
} else if (parameters->animation[0] == 'E') {
|
||||
// Talking head animation
|
||||
return;
|
||||
} else if (!isdigit(static_cast<unsigned char>(parameters->animation[0]))) {
|
||||
} else if (!Common::isDigit(parameters->animation[0])) {
|
||||
debug(6, "Error in speak string animation: '%s'", parameters->animation);
|
||||
return;
|
||||
} else
|
||||
|
|
|
@ -1151,7 +1151,7 @@ void Interface::processStatusTextInput(Common::KeyState keystate) {
|
|||
if (_statusTextInputPos >= STATUS_TEXT_INPUT_MAX) {
|
||||
break;
|
||||
}
|
||||
if (isalnum(keystate.ascii) || (keystate.ascii == ' ')) {
|
||||
if (Common::isAlnum(keystate.ascii) || (keystate.ascii == ' ')) {
|
||||
_statusTextInputString[_statusTextInputPos++] = keystate.ascii;
|
||||
_statusTextInputString[_statusTextInputPos] = 0;
|
||||
}
|
||||
|
@ -1209,7 +1209,7 @@ bool Interface::processTextInput(Common::KeyState keystate) {
|
|||
_textInputPos = _textInputStringLength + 1;
|
||||
break;
|
||||
default:
|
||||
if (((keystate.ascii <= 255) && (isalnum(keystate.ascii))) || (keystate.ascii == ' ') ||
|
||||
if (((keystate.ascii <= 255) && (Common::isAlnum(keystate.ascii))) || (keystate.ascii == ' ') ||
|
||||
(keystate.ascii == '-') || (keystate.ascii == '_')) {
|
||||
if (_textInputStringLength < save_title_size - 1) {
|
||||
ch[0] = keystate.ascii;
|
||||
|
|
|
@ -147,7 +147,7 @@ reg_t kReadNumber(EngineState *s, int argc, reg_t *argv) {
|
|||
Common::String source_str = s->_segMan->getString(argv[0]);
|
||||
const char *source = source_str.c_str();
|
||||
|
||||
while (isspace((unsigned char)*source))
|
||||
while (Common::isSpace(*source))
|
||||
source++; /* Skip whitespace */
|
||||
|
||||
int16 result = 0;
|
||||
|
@ -246,14 +246,14 @@ reg_t kFormat(EngineState *s, int argc, reg_t *argv) {
|
|||
|
||||
/* int writelength; -- unused atm */
|
||||
|
||||
if (xfer && (isdigit(static_cast<unsigned char>(xfer)) || xfer == '-' || xfer == '=')) {
|
||||
if (xfer && (Common::isDigit(xfer) || xfer == '-' || xfer == '=')) {
|
||||
char *destp;
|
||||
|
||||
if (xfer == '0')
|
||||
fillchar = '0';
|
||||
else if (xfer == '=')
|
||||
align = ALIGN_CENTER;
|
||||
else if (isdigit(static_cast<unsigned char>(xfer)) || (xfer == '-'))
|
||||
else if (Common::isDigit(xfer) || (xfer == '-'))
|
||||
source--; // Go to start of length argument
|
||||
|
||||
strLength = strtol(source, &destp, 10);
|
||||
|
|
|
@ -100,7 +100,7 @@ int16 GfxText16::CodeProcessing(const char *&text, GuiResourceId orgFontId, int1
|
|||
// cX -> sets textColor to _textColors[X-1]
|
||||
curCode = textCode[0];
|
||||
curCodeParm = textCode[1];
|
||||
if (isdigit(static_cast<unsigned char>(curCodeParm))) {
|
||||
if (Common::isDigit(curCodeParm)) {
|
||||
curCodeParm -= '0';
|
||||
} else {
|
||||
curCodeParm = -1;
|
||||
|
|
|
@ -534,7 +534,7 @@ bool Vocabulary::tokenizeString(ResultWordListList &retval, const char *sentence
|
|||
do {
|
||||
|
||||
c = sentence[pos_in_sentence++];
|
||||
if (isalnum(c) || (c == '-' && wordLen) || (c >= 0x80)) {
|
||||
if (Common::isAlnum(c) || (c == '-' && wordLen) || (c >= 0x80)) {
|
||||
currentWord[wordLen] = lowerCaseMap[c];
|
||||
++wordLen;
|
||||
}
|
||||
|
|
|
@ -1558,7 +1558,7 @@ void ResourceManager::readResourcePatches() {
|
|||
name = (*x)->getName();
|
||||
|
||||
// SCI1 scheme
|
||||
if (isdigit(static_cast<unsigned char>(name[0]))) {
|
||||
if (Common::isDigit(name[0])) {
|
||||
char *end = 0;
|
||||
resourceNr = strtol(name.c_str(), &end, 10);
|
||||
bAdd = (*end == '.'); // Ensure the next character is the period
|
||||
|
@ -1566,7 +1566,7 @@ void ResourceManager::readResourcePatches() {
|
|||
// SCI0 scheme
|
||||
int resname_len = strlen(szResType);
|
||||
if (scumm_strnicmp(name.c_str(), szResType, resname_len) == 0
|
||||
&& !isalpha(static_cast<unsigned char>(name[resname_len + 1]))) {
|
||||
&& !Common::isAlpha(name[resname_len + 1])) {
|
||||
resourceNr = atoi(name.c_str() + resname_len + 1);
|
||||
bAdd = true;
|
||||
}
|
||||
|
|
|
@ -198,7 +198,7 @@ void ResourceManager::readWaveAudioPatches() {
|
|||
for (Common::ArchiveMemberList::const_iterator x = files.begin(); x != files.end(); ++x) {
|
||||
Common::String name = (*x)->getName();
|
||||
|
||||
if (isdigit(static_cast<unsigned char>(name[0])))
|
||||
if (Common::isDigit(name[0]))
|
||||
processWavePatch(ResourceId(kResourceTypeAudio, atoi(name.c_str())), name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,13 +90,13 @@ public:
|
|||
assert(def_end != NULL);
|
||||
|
||||
char *id_end = def_end;
|
||||
while (id_end >= def_start && !isdigit(static_cast<unsigned char>(*(id_end-1)))) {
|
||||
while (id_end >= def_start && !Common::isDigit(*(id_end-1))) {
|
||||
id_end--;
|
||||
}
|
||||
|
||||
assert(id_end > def_start);
|
||||
char *id_start = id_end;
|
||||
while (isdigit(static_cast<unsigned char>(*(id_start - 1)))) {
|
||||
while (Common::isDigit(*(id_start - 1))) {
|
||||
id_start--;
|
||||
}
|
||||
|
||||
|
|
|
@ -1389,10 +1389,10 @@ void ScummEngine_v7::loadLanguageBundle() {
|
|||
} else if (*ptr == '#') {
|
||||
// Number of subtags following a given basetag. We don't need that
|
||||
// information so we just skip it
|
||||
} else if (isdigit(static_cast<unsigned char>(*ptr))) {
|
||||
} else if (Common::isDigit(*ptr)) {
|
||||
int idx = 0;
|
||||
// A number (up to three digits)...
|
||||
while (isdigit(static_cast<unsigned char>(*ptr))) {
|
||||
while (Common::isDigit(*ptr)) {
|
||||
idx = idx * 10 + (*ptr - '0');
|
||||
ptr++;
|
||||
}
|
||||
|
@ -1430,12 +1430,12 @@ void ScummEngine_v7::loadLanguageBundle() {
|
|||
for (i = 0; i < _languageIndexSize; i++) {
|
||||
// First 8 chars in the line give the string ID / 'tag'
|
||||
int j;
|
||||
for (j = 0; j < 8 && !isspace(static_cast<unsigned char>(*ptr)); j++, ptr++)
|
||||
for (j = 0; j < 8 && !Common::isSpace(*ptr); j++, ptr++)
|
||||
_languageIndex[i].tag[j] = toupper(*ptr);
|
||||
_languageIndex[i].tag[j] = 0;
|
||||
|
||||
// After that follows a single space which we skip
|
||||
assert(isspace(static_cast<unsigned char>(*ptr)));
|
||||
assert(Common::isSpace(*ptr));
|
||||
ptr++;
|
||||
|
||||
// Then comes the translated string: we record an offset to that.
|
||||
|
|
|
@ -974,7 +974,7 @@ void Control::handleKeyPress(Common::KeyState kbd, Common::String &textBuf) {
|
|||
|
||||
// Allow the key only if is a letter, a digit, or one of a selected
|
||||
// list of extra characters
|
||||
if (isalnum(kbd.ascii) || strchr(" ,().='-&+!?\"", kbd.ascii) != 0) {
|
||||
if (Common::isAlnum(kbd.ascii) || strchr(" ,().='-&+!?\"", kbd.ascii) != 0) {
|
||||
textBuf += kbd.ascii;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -206,7 +206,7 @@ SaveStateList SkyMetaEngine::listSaves(const char *target) const {
|
|||
// Extract the extension
|
||||
Common::String ext = file->c_str() + file->size() - 3;
|
||||
ext.toUppercase();
|
||||
if (isdigit(static_cast<unsigned char>(ext[0])) && isdigit(static_cast<unsigned char>(ext[1])) && isdigit(static_cast<unsigned char>(ext[2]))){
|
||||
if (Common::isDigit(ext[0]) && Common::isDigit(ext[1]) && Common::isDigit(ext[2])) {
|
||||
int slotNum = atoi(ext.c_str());
|
||||
Common::InSaveFile *in = saveFileMan->openForLoading(*file);
|
||||
if (in) {
|
||||
|
|
|
@ -115,7 +115,7 @@ bool MoviePlayer::load(uint32 id) {
|
|||
int startFrame = strtoul(ptr, const_cast<char **>(&ptr), 10);
|
||||
int endFrame = strtoul(ptr, const_cast<char **>(&ptr), 10);
|
||||
|
||||
while (*ptr && isspace(static_cast<unsigned char>(*ptr)))
|
||||
while (*ptr && Common::isSpace(*ptr))
|
||||
ptr++;
|
||||
|
||||
if (startFrame > endFrame) {
|
||||
|
@ -132,7 +132,7 @@ bool MoviePlayer::load(uint32 id) {
|
|||
if (*ptr == '@') {
|
||||
++ptr;
|
||||
color = strtoul(ptr, const_cast<char **>(&ptr), 10);
|
||||
while (*ptr && isspace(static_cast<unsigned char>(*ptr)))
|
||||
while (*ptr && Common::isSpace(*ptr))
|
||||
ptr++;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,10 +6,7 @@
|
|||
|
||||
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "common/util.h"
|
||||
|
||||
#define lbaselib_c
|
||||
#define LUA_LIB
|
||||
|
@ -62,7 +59,7 @@ static int luaB_tonumber (lua_State *L) {
|
|||
luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range");
|
||||
n = strtoul(s1, &s2, base);
|
||||
if (s1 != s2) { /* at least one valid digit? */
|
||||
while (isspace((unsigned char)(*s2))) s2++; /* skip trailing spaces */
|
||||
while (Common::isSpace(*s2)) s2++; /* skip trailing spaces */
|
||||
if (*s2 == '\0') { /* no invalid trailing characters? */
|
||||
lua_pushnumber(L, (lua_Number)n);
|
||||
return 1;
|
||||
|
|
|
@ -5,9 +5,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "common/util.h"
|
||||
|
||||
#define llex_c
|
||||
#define LUA_CORE
|
||||
|
@ -188,7 +186,7 @@ static void trydecpoint (LexState *ls, SemInfo *seminfo) {
|
|||
sprintf(buf, "%.1f", 1.0);
|
||||
ls->decpoint = '.';
|
||||
for (i = 0; buf[i]; i++) {
|
||||
if (!isspace(static_cast<unsigned char>(buf[i])) && !isdigit(static_cast<unsigned char>(buf[i]))) {
|
||||
if (!Common::isSpace(buf[i]) && !Common::isDigit(buf[i])) {
|
||||
ls->decpoint = buf[i];
|
||||
break;
|
||||
}
|
||||
|
@ -204,13 +202,13 @@ static void trydecpoint (LexState *ls, SemInfo *seminfo) {
|
|||
|
||||
/* LUA_NUMBER */
|
||||
static void read_numeral (LexState *ls, SemInfo *seminfo) {
|
||||
lua_assert(isdigit(ls->current));
|
||||
lua_assert(Common::isDigit(ls->current));
|
||||
do {
|
||||
save_and_next(ls);
|
||||
} while (isdigit(ls->current) || ls->current == '.');
|
||||
} while (Common::isDigit(ls->current) || ls->current == '.');
|
||||
if (check_next(ls, "Ee")) /* `E'? */
|
||||
check_next(ls, "+-"); /* optional exponent sign */
|
||||
while (isalnum(ls->current) || ls->current == '_')
|
||||
while (Common::isAlnum(ls->current) || ls->current == '_')
|
||||
save_and_next(ls);
|
||||
save(ls, '\0');
|
||||
buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */
|
||||
|
@ -313,7 +311,7 @@ static void read_string (LexState *ls, int del, SemInfo *seminfo) {
|
|||
case '\r': save(ls, '\n'); inclinenumber(ls); continue;
|
||||
case EOZ: continue; /* will raise an error next loop */
|
||||
default: {
|
||||
if (!isdigit(ls->current))
|
||||
if (!Common::isDigit(ls->current))
|
||||
save_and_next(ls); /* handles \\, \", \', and \? */
|
||||
else { /* \xxx */
|
||||
int i = 0;
|
||||
|
@ -321,7 +319,7 @@ static void read_string (LexState *ls, int del, SemInfo *seminfo) {
|
|||
do {
|
||||
c = 10*c + (ls->current-'0');
|
||||
next(ls);
|
||||
} while (++i<3 && isdigit(ls->current));
|
||||
} while (++i<3 && Common::isDigit(ls->current));
|
||||
if (c > UCHAR_MAX)
|
||||
luaX_lexerror(ls, "escape sequence too large", TK_STRING);
|
||||
save(ls, c);
|
||||
|
@ -412,7 +410,7 @@ static int llex (LexState *ls, SemInfo *seminfo) {
|
|||
return TK_DOTS; /* ... */
|
||||
else return TK_CONCAT; /* .. */
|
||||
}
|
||||
else if (!isdigit(ls->current)) return '.';
|
||||
else if (!Common::isDigit(ls->current)) return '.';
|
||||
else {
|
||||
read_numeral(ls, seminfo);
|
||||
return TK_NUMBER;
|
||||
|
@ -422,21 +420,21 @@ static int llex (LexState *ls, SemInfo *seminfo) {
|
|||
return TK_EOS;
|
||||
}
|
||||
default: {
|
||||
if (isspace(ls->current)) {
|
||||
if (Common::isSpace(ls->current)) {
|
||||
lua_assert(!currIsNewline(ls));
|
||||
next(ls);
|
||||
continue;
|
||||
}
|
||||
else if (isdigit(ls->current)) {
|
||||
else if (Common::isDigit(ls->current)) {
|
||||
read_numeral(ls, seminfo);
|
||||
return TK_NUMBER;
|
||||
}
|
||||
else if (isalpha(ls->current) || ls->current == '_') {
|
||||
else if (Common::isAlpha(ls->current) || ls->current == '_') {
|
||||
/* identifier or reserved word */
|
||||
TString *ts;
|
||||
do {
|
||||
save_and_next(ls);
|
||||
} while (isalnum(ls->current) || ls->current == '_');
|
||||
} while (Common::isAlnum(ls->current) || ls->current == '_');
|
||||
ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
|
||||
luaZ_bufflen(ls->buff));
|
||||
if (ts->tsv.reserved > 0) /* reserved word? */
|
||||
|
|
|
@ -4,11 +4,7 @@
|
|||
** See Copyright Notice in lua.h
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "common/util.h"
|
||||
|
||||
#define lobject_c
|
||||
#define LUA_CORE
|
||||
|
@ -94,7 +90,7 @@ int luaO_str2d (const char *s, lua_Number *result) {
|
|||
if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */
|
||||
*result = cast_num(strtoul(s, &endptr, 16));
|
||||
if (*endptr == '\0') return 1; /* most common case */
|
||||
while (isspace(cast(unsigned char, *endptr))) endptr++;
|
||||
while (Common::isSpace(*endptr)) endptr++;
|
||||
if (*endptr != '\0') return 0; /* invalid trailing characters? */
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
*/
|
||||
|
||||
|
||||
#define FORBIDDEN_SYMBOL_EXCEPTION_ctype_h
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -184,7 +184,7 @@ int Font::wordWrapText(const Common::String &str, int maxWidth, Common::Array<Co
|
|||
// 'wrap point' where wrapping could take place. Everything that
|
||||
// came before it can now safely be added to the line, as we know
|
||||
// that it will not have to be wrapped.
|
||||
if (isspace(c)) {
|
||||
if (Common::isSpace(c)) {
|
||||
line += tmpStr;
|
||||
lineWidth += tmpWidth;
|
||||
|
||||
|
@ -208,7 +208,7 @@ int Font::wordWrapText(const Common::String &str, int maxWidth, Common::Array<Co
|
|||
if (lineWidth > 0) {
|
||||
wrapper.add(line, lineWidth);
|
||||
// Trim left side
|
||||
while (tmpStr.size() && isspace(static_cast<unsigned char>(tmpStr[0]))) {
|
||||
while (tmpStr.size() && Common::isSpace(tmpStr[0])) {
|
||||
tmpStr.deleteChar(0);
|
||||
// This is not very fast, but it is the simplest way to
|
||||
// assure we do not mess something up because of kerning.
|
||||
|
|
|
@ -90,7 +90,7 @@ public:
|
|||
|
||||
protected:
|
||||
bool tryInsertChar(byte c, int pos) {
|
||||
if (isalnum(c) || c == '-' || c == '_') {
|
||||
if (Common::isAlnum(c) || c == '-' || c == '_') {
|
||||
_editString.insertChar(c, pos);
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue