OLD | NEW |
| (Empty) |
1 This patch removes the usage of tolower() in fts code, which is not locale | |
2 neutral and causes problem in some locales such as Turkish. | |
3 See http://crbug.com/15261 for details. | |
4 An upstream ticket was also created for this issue: | |
5 http://www.sqlite.org/src/tktview/991789d9f3136a0460dc83a33e815c1aa9757c26 | |
6 | |
7 Contains backport for upstream http://www.sqlite.org/src/ci/b8b465ed2c. | |
8 | |
9 Index: ext/fts3/fts3.c | |
10 =================================================================== | |
11 --- ext/fts3/fts3.c 2009-09-04 13:37:41.000000000 -0700 | |
12 +++ ext/fts3/fts3.c 2009-09-14 18:17:45.000000000 -0700 | |
13 @@ -326,7 +326,7 @@ | |
14 return (c&0x80)==0 ? isspace(c) : 0; | |
15 } | |
16 static int safe_tolower(char c){ | |
17 - return (c&0x80)==0 ? tolower(c) : c; | |
18 + return (c>='A' && c<='Z') ? (c-'A'+'a') : c; | |
19 } | |
20 static int safe_isalnum(char c){ | |
21 return (c&0x80)==0 ? isalnum(c) : 0; | |
22 Index: ext/fts3/fts3_expr.c | |
23 =================================================================== | |
24 --- ext/fts3/fts3_expr.c | |
25 +++ ext/fts3/fts3_expr.c | |
26 @@ -58,7 +58,6 @@ int sqlite3_fts3_enable_parentheses = 0; | |
27 | |
28 #include "fts3_expr.h" | |
29 #include "sqlite3.h" | |
30 -#include <ctype.h> | |
31 #include <string.h> | |
32 #include <assert.h> | |
33 | |
34 @@ -84,7 +83,7 @@ struct ParseContext { | |
35 ** negative values). | |
36 */ | |
37 static int fts3isspace(char c){ | |
38 - return (c&0x80)==0 ? isspace(c) : 0; | |
39 + return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f'; | |
40 } | |
41 | |
42 /* | |
43 Index: ext/fts3/fts3_porter.c | |
44 =================================================================== | |
45 --- ext/fts3/fts3_porter.c | |
46 +++ ext/fts3/fts3_porter.c | |
47 @@ -29,7 +29,6 @@ | |
48 #include <stdlib.h> | |
49 #include <stdio.h> | |
50 #include <string.h> | |
51 -#include <ctype.h> | |
52 | |
53 #include "fts3_tokenizer.h" | |
54 | |
55 Index: ext/fts3/fts3_tokenizer1.c | |
56 =================================================================== | |
57 --- ext/fts3/fts3_tokenizer1.c | |
58 +++ ext/fts3/fts3_tokenizer1.c | |
59 @@ -29,7 +29,6 @@ | |
60 #include <stdlib.h> | |
61 #include <stdio.h> | |
62 #include <string.h> | |
63 -#include <ctype.h> | |
64 | |
65 #include "fts3_tokenizer.h" | |
66 | |
67 @@ -55,6 +54,9 @@ static const sqlite3_tokenizer_module simpleTokenizerModule; | |
68 static int simpleDelim(simple_tokenizer *t, unsigned char c){ | |
69 return c<0x80 && t->delim[c]; | |
70 } | |
71 +static int fts3_isalnum(int x){ | |
72 + return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z'); | |
73 +} | |
74 | |
75 /* | |
76 ** Create a new tokenizer instance. | |
77 @@ -89,7 +91,7 @@ static int simpleCreate( | |
78 /* Mark non-alphanumeric ASCII characters as delimiters */ | |
79 int i; | |
80 for(i=1; i<0x80; i++){ | |
81 - t->delim[i] = !isalnum(i); | |
82 + t->delim[i] = !fts3_isalnum(i); | |
83 } | |
84 } | |
85 | |
86 @@ -191,7 +193,7 @@ static int simpleNext( | |
87 ** case-insensitivity. | |
88 */ | |
89 unsigned char ch = p[iStartOffset+i]; | |
90 - c->pToken[i] = ch<0x80 ? tolower(ch) : ch; | |
91 + c->pToken[i] = (ch>='A' && ch<='Z') ? ch-'A'+'a' : ch; | |
92 } | |
93 *ppToken = c->pToken; | |
94 *pnBytes = n; | |
95 Index: ext/fts2/fts2.c | |
96 =================================================================== | |
97 --- ext/fts2/fts2.c 2009-09-04 13:37:41.000000000 -0700 | |
98 +++ ext/fts2/fts2.c 2009-09-14 18:17:02.000000000 -0700 | |
99 @@ -372,7 +372,7 @@ | |
100 return (c&0x80)==0 ? isspace(c) : 0; | |
101 } | |
102 static int safe_tolower(char c){ | |
103 - return (c&0x80)==0 ? tolower(c) : c; | |
104 + return (c>='A' && c<='Z') ? (c-'A'+'a') : c; | |
105 } | |
106 static int safe_isalnum(char c){ | |
107 return (c&0x80)==0 ? isalnum(c) : 0; | |
108 Index: ext/fts2/fts2_tokenizer1.c | |
109 =================================================================== | |
110 --- ext/fts2/fts2_tokenizer1.c 2009-09-03 13:32:06.000000000 -0700 | |
111 +++ ext/fts2/fts2_tokenizer1.c 2009-09-02 11:40:21.000000000 -0700 | |
112 @@ -191,7 +191,7 @@ | |
113 ** case-insensitivity. | |
114 */ | |
115 unsigned char ch = p[iStartOffset+i]; | |
116 - c->pToken[i] = ch<0x80 ? tolower(ch) : ch; | |
117 + c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch; | |
118 } | |
119 *ppToken = c->pToken; | |
120 *pnBytes = n; | |
OLD | NEW |