Module: wine Branch: master Commit: f6ced24999ffb287bacb8300d0e7c55d89568a79 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f6ced24999ffb287bacb8300d0...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Thu May 18 10:16:14 2017 +0200
msi: Avoid using isspace()/isdigit() for WCHARs.
Found with Coccinelle.
Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msi/tokenize.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/dlls/msi/tokenize.c b/dlls/msi/tokenize.c index 441a54a..1656fd8 100644 --- a/dlls/msi/tokenize.c +++ b/dlls/msi/tokenize.c @@ -187,6 +187,21 @@ static const char isIdChar[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* Fx */ };
+/* +** WCHAR safe version of isdigit() +*/ +static inline int isDigit(WCHAR c) +{ + return c >= '0' && c <= '9'; +} + +/* +** WCHAR safe version of isspace(), except '\r' +*/ +static inline int isSpace(WCHAR c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\f'; +}
/* ** Return the length of the token that begins at z[0]. Return @@ -199,7 +214,7 @@ int sqliteGetToken(const WCHAR *z, int *tokenType, int *skip){ *skip = 0; switch( *z ){ case ' ': case '\t': case '\n': case '\f': - for(i=1; isspace(z[i]) && z[i] != '\r'; i++){} + for(i=1; isSpace(z[i]); i++){} *tokenType = TK_SPACE; return i; case '-': @@ -265,7 +280,7 @@ int sqliteGetToken(const WCHAR *z, int *tokenType, int *skip){ return i; } case '.': - if( !isdigit(z[1]) ){ + if( !isDigit(z[1]) ){ *tokenType = TK_DOT; return 1; } @@ -273,7 +288,7 @@ int sqliteGetToken(const WCHAR *z, int *tokenType, int *skip){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': *tokenType = TK_INTEGER; - for(i=1; isdigit(z[i]); i++){} + for(i=1; isDigit(z[i]); i++){} return i; case '[': for(i=1; z[i] && z[i-1]!=']'; i++){}