Akihiro Sagawa : msi: Avoid using isspace()/isdigit() for WCHARs.

Alexandre Julliard julliard at winehq.org
Thu May 18 15:27:50 CDT 2017


Module: wine
Branch: master
Commit: f6ced24999ffb287bacb8300d0e7c55d89568a79
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f6ced24999ffb287bacb8300d0e7c55d89568a79

Author: Akihiro Sagawa <sagawa.aki at 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 at gmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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++){}




More information about the wine-cvs mailing list