blob: c42bb065b7302ad1897be7c50dab59a3eb10c54e [file] [log] [blame]
This patch removes the usage of tolower() in fts code, which is not locale
neutral and causes problem in some locales such as Turkish.
See http://crbug.com/15261 for details.
An upstream ticket was also created for this issue:
http://www.sqlite.org/src/tktview/991789d9f3136a0460dc83a33e815c1aa9757c26
Index: ext/fts3/fts3.c
===================================================================
--- ext/fts3/fts3.c 2009-09-04 13:37:41.000000000 -0700
+++ ext/fts3/fts3.c 2009-09-14 18:17:45.000000000 -0700
@@ -326,7 +326,7 @@
return (c&0x80)==0 ? isspace(c) : 0;
}
static int safe_tolower(char c){
- return (c&0x80)==0 ? tolower(c) : c;
+ return (c>='A' && c<='Z') ? (c-'A'+'a') : c;
}
static int safe_isalnum(char c){
return (c&0x80)==0 ? isalnum(c) : 0;
Index: ext/fts3/fts3_tokenizer1.c
===================================================================
--- ext/fts3/fts3_tokenizer1.c 2009-09-03 13:32:06.000000000 -0700
+++ ext/fts3/fts3_tokenizer1.c 2009-09-02 11:40:21.000000000 -0700
@@ -191,7 +191,7 @@
** case-insensitivity.
*/
unsigned char ch = p[iStartOffset+i];
- c->pToken[i] = ch<0x80 ? tolower(ch) : ch;
+ c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch;
}
*ppToken = c->pToken;
*pnBytes = n;
Index: ext/fts1/simple_tokenizer.c
===================================================================
--- ext/fts1/simple_tokenizer.c 2009-09-03 13:32:06.000000000 -0700
+++ ext/fts1/simple_tokenizer.c 2009-09-02 11:40:21.000000000 -0700
@@ -138,7 +138,7 @@
** case-insensitivity.
*/
char ch = c->pCurrent[ii];
- c->zToken[ii] = (unsigned char)ch<0x80 ? tolower(ch) : ch;
+ c->zToken[ii] = ((ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch);
}
c->zToken[n] = '\0';
*ppToken = c->zToken;
Index: ext/fts1/fts1_tokenizer1.c
===================================================================
--- ext/fts1/fts1_tokenizer1.c 2009-09-03 13:32:06.000000000 -0700
+++ ext/fts1/fts1_tokenizer1.c 2009-09-02 11:40:21.000000000 -0700
@@ -182,7 +182,7 @@
** case-insensitivity.
*/
unsigned char ch = p[iStartOffset+i];
- c->pToken[i] = ch<0x80 ? tolower(ch) : ch;
+ c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch;
}
*ppToken = c->pToken;
*pnBytes = n;
Index: ext/fts1/fts1.c
===================================================================
--- ext/fts1/fts1.c 2009-09-04 13:37:41.000000000 -0700
+++ ext/fts1/fts1.c 2009-09-14 18:16:55.000000000 -0700
@@ -208,7 +208,7 @@
return (c&0x80)==0 ? isspace(c) : 0;
}
static int safe_tolower(char c){
- return (c&0x80)==0 ? tolower(c) : c;
+ return (c>='A' && c<='Z') ? (c-'A'+'a') : c;
}
static int safe_isalnum(char c){
return (c&0x80)==0 ? isalnum(c) : 0;
Index: ext/fts2/fts2.c
===================================================================
--- ext/fts2/fts2.c 2009-09-04 13:37:41.000000000 -0700
+++ ext/fts2/fts2.c 2009-09-14 18:17:02.000000000 -0700
@@ -372,7 +372,7 @@
return (c&0x80)==0 ? isspace(c) : 0;
}
static int safe_tolower(char c){
- return (c&0x80)==0 ? tolower(c) : c;
+ return (c>='A' && c<='Z') ? (c-'A'+'a') : c;
}
static int safe_isalnum(char c){
return (c&0x80)==0 ? isalnum(c) : 0;
Index: ext/fts2/fts2_tokenizer1.c
===================================================================
--- ext/fts2/fts2_tokenizer1.c 2009-09-03 13:32:06.000000000 -0700
+++ ext/fts2/fts2_tokenizer1.c 2009-09-02 11:40:21.000000000 -0700
@@ -191,7 +191,7 @@
** case-insensitivity.
*/
unsigned char ch = p[iStartOffset+i];
- c->pToken[i] = ch<0x80 ? tolower(ch) : ch;
+ c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch;
}
*ppToken = c->pToken;
*pnBytes = n;