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 Index: ext/fts3/fts3.c |
| 8 =================================================================== |
| 9 --- ext/fts3/fts3.c (revision 24387) |
| 10 +++ ext/fts3/fts3.c (working copy) |
| 11 @@ -330,7 +330,7 @@ |
| 12 return (c&0x80)==0 ? isspace(c) : 0; |
| 13 } |
| 14 static int safe_tolower(char c){ |
| 15 - return (c&0x80)==0 ? tolower(c) : c; |
| 16 + return (c>='A' && c<='Z') ? (c-'A'+'a') : c; |
| 17 } |
| 18 static int safe_isalnum(char c){ |
| 19 return (c&0x80)==0 ? isalnum(c) : 0; |
| 20 Index: ext/fts3/fts3_tokenizer1.c |
| 21 =================================================================== |
| 22 --- ext/fts3/fts3_tokenizer1.c (revision 24387) |
| 23 +++ ext/fts3/fts3_tokenizer1.c (working copy) |
| 24 @@ -191,7 +191,7 @@ |
| 25 ** case-insensitivity. |
| 26 */ |
| 27 unsigned char ch = p[iStartOffset+i]; |
| 28 - c->pToken[i] = ch<0x80 ? tolower(ch) : ch; |
| 29 + c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch; |
| 30 } |
| 31 *ppToken = c->pToken; |
| 32 *pnBytes = n; |
| 33 Index: ext/fts1/simple_tokenizer.c |
| 34 =================================================================== |
| 35 --- ext/fts1/simple_tokenizer.c (revision 24387) |
| 36 +++ ext/fts1/simple_tokenizer.c (working copy) |
| 37 @@ -138,7 +138,7 @@ |
| 38 ** case-insensitivity. |
| 39 */ |
| 40 char ch = c->pCurrent[ii]; |
| 41 - c->zToken[ii] = (unsigned char)ch<0x80 ? tolower(ch) : ch; |
| 42 + c->zToken[ii] = ((ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch); |
| 43 } |
| 44 c->zToken[n] = '\0'; |
| 45 *ppToken = c->zToken; |
| 46 Index: ext/fts1/fts1_tokenizer1.c |
| 47 =================================================================== |
| 48 --- ext/fts1/fts1_tokenizer1.c (revision 24387) |
| 49 +++ ext/fts1/fts1_tokenizer1.c (working copy) |
| 50 @@ -182,7 +182,7 @@ |
| 51 ** case-insensitivity. |
| 52 */ |
| 53 unsigned char ch = p[iStartOffset+i]; |
| 54 - c->pToken[i] = ch<0x80 ? tolower(ch) : ch; |
| 55 + c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch; |
| 56 } |
| 57 *ppToken = c->pToken; |
| 58 *pnBytes = n; |
| 59 Index: ext/fts1/fts1.c |
| 60 =================================================================== |
| 61 --- ext/fts1/fts1.c (revision 24387) |
| 62 +++ ext/fts1/fts1.c (working copy) |
| 63 @@ -208,7 +208,7 @@ |
| 64 return (c&0x80)==0 ? isspace(c) : 0; |
| 65 } |
| 66 static int safe_tolower(char c){ |
| 67 - return (c&0x80)==0 ? tolower(c) : c; |
| 68 + return (c>='A' && c<='Z') ? (c-'A'+'a') : c; |
| 69 } |
| 70 static int safe_isalnum(char c){ |
| 71 return (c&0x80)==0 ? isalnum(c) : 0; |
| 72 Index: ext/fts2/fts2.c |
| 73 =================================================================== |
| 74 --- ext/fts2/fts2.c (revision 24387) |
| 75 +++ ext/fts2/fts2.c (working copy) |
| 76 @@ -372,7 +372,7 @@ |
| 77 return (c&0x80)==0 ? isspace(c) : 0; |
| 78 } |
| 79 static int safe_tolower(char c){ |
| 80 - return (c&0x80)==0 ? tolower(c) : c; |
| 81 + return (c>='A' && c<='Z') ? (c-'A'+'a') : c; |
| 82 } |
| 83 static int safe_isalnum(char c){ |
| 84 return (c&0x80)==0 ? isalnum(c) : 0; |
| 85 Index: ext/fts2/fts2_tokenizer1.c |
| 86 =================================================================== |
| 87 --- ext/fts2/fts2_tokenizer1.c (revision 24387) |
| 88 +++ ext/fts2/fts2_tokenizer1.c (working copy) |
| 89 @@ -191,7 +191,7 @@ |
| 90 ** case-insensitivity. |
| 91 */ |
| 92 unsigned char ch = p[iStartOffset+i]; |
| 93 - c->pToken[i] = ch<0x80 ? tolower(ch) : ch; |
| 94 + c->pToken[i] = (ch>='A' && ch<='Z') ? (ch-'A'+'a') : ch; |
| 95 } |
| 96 *ppToken = c->pToken; |
| 97 *pnBytes = n; |
OLD | NEW |