Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix bugs in substr() for UTF-8. (CVS 406) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e9fd9e7b0fed445b48e7024ecde0354f |
User & Date: | drh 2002-02-28 04:00:12.000 |
Context
2002-02-28
| ||
04:10 | Bug fix when -DMEMORY_DEBUG is off. (CVS 407) (check-in: e14b0c82f3 user: drh tags: trunk) | |
04:00 | Fix bugs in substr() for UTF-8. (CVS 406) (check-in: e9fd9e7b0f user: drh tags: trunk) | |
03:31 | Remove unused opcodes from the VDBE and fix a bug in the substr() function. (CVS 405) (check-in: e8611e0c05 user: drh tags: trunk) | |
Changes
Changes to src/func.c.
︙ | ︙ | |||
12 13 14 15 16 17 18 | ** This file contains the C functions that implement various SQL ** functions of SQLite. ** ** There is only one exported symbol in this file - the function ** sqliteRegisterBuildinFunctions() found at the bottom of the file. ** All other code has file scope. ** | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ** This file contains the C functions that implement various SQL ** functions of SQLite. ** ** There is only one exported symbol in this file - the function ** sqliteRegisterBuildinFunctions() found at the bottom of the file. ** All other code has file scope. ** ** $Id: func.c,v 1.12 2002/02/28 04:00:12 drh Exp $ */ #include <ctype.h> #include <math.h> #include <stdlib.h> #include <assert.h> #include "sqliteInt.h" |
︙ | ︙ | |||
98 99 100 101 102 103 104 | int p1, p2, len; assert( argc==3 ); z = argv[0]; if( z==0 ) return; p1 = atoi(argv[1]?argv[1]:0); p2 = atoi(argv[2]?argv[2]:0); #ifdef SQLITE_UTF8 | | | > | > | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | int p1, p2, len; assert( argc==3 ); z = argv[0]; if( z==0 ) return; p1 = atoi(argv[1]?argv[1]:0); p2 = atoi(argv[2]?argv[2]:0); #ifdef SQLITE_UTF8 for(len=0, z2=z; *z2; z2++){ if( (0xc0&*z2)!=0x80 ) len++; } #else len = strlen(z); #endif if( p1<0 ){ p1 += len; if( p1<0 ){ p2 += p1; p1 = 0; } }else if( p1>0 ){ p1--; } if( p1+p2>len ){ p2 = len-p1; } #ifdef SQLITE_UTF8 for(i=0; i<p1; i++){ assert( z[i] ); if( (z[i]&0xc0)==0x80 ) p1++; } while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p1++; } for(; i<p1+p2; i++){ assert( z[i] ); if( (z[i]&0xc0)==0x80 ) p2++; } while( z[i] && (z[i]&0xc0)==0x80 ){ i++; p2++; } #endif if( p2<0 ) p2 = 0; sqlite_set_result_string(context, &z[p1], p2); } /* ** Implementation of the round() function |
︙ | ︙ |