summaryrefslogtreecommitdiff
path: root/ext/sqlite/libsqlite/src/util.c
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2004-07-10 12:27:51 +0000
committerWez Furlong <wez@php.net>2004-07-10 12:27:51 +0000
commite563b4eafa63ba8beb88defa1e36f037a7a97a60 (patch)
tree2e72dfa1c4b7fe62fde9ab326a67047ba2f4cc9e /ext/sqlite/libsqlite/src/util.c
parentcd732f1a3f5df97407797fe7ebb97830552479ad (diff)
downloadphp-git-e563b4eafa63ba8beb88defa1e36f037a7a97a60.tar.gz
Upgrade bundled library to 2.8.14 + misc fixes
(http://www.sqlite.org/cvstrac/chngview?cn=1742)
Diffstat (limited to 'ext/sqlite/libsqlite/src/util.c')
-rw-r--r--ext/sqlite/libsqlite/src/util.c122
1 files changed, 7 insertions, 115 deletions
diff --git a/ext/sqlite/libsqlite/src/util.c b/ext/sqlite/libsqlite/src/util.c
index 2e896ee8b6..21d7b15057 100644
--- a/ext/sqlite/libsqlite/src/util.c
+++ b/ext/sqlite/libsqlite/src/util.c
@@ -417,120 +417,11 @@ void sqliteSetNString(char **pz, ...){
*/
void sqliteErrorMsg(Parse *pParse, const char *zFormat, ...){
va_list ap;
- int nByte;
- int i, j;
- char *z;
- static char zNull[] = "NULL";
-
pParse->nErr++;
- nByte = 1 + strlen(zFormat);
- va_start(ap, zFormat);
- for(i=0; zFormat[i]; i++){
- if( zFormat[i]!='%' || zFormat[i+1]==0 ) continue;
- i++;
- switch( zFormat[i] ){
- case 'd': {
- (void)va_arg(ap, int);
- nByte += 20;
- break;
- }
- case 'z':
- case 's': {
- char *z2 = va_arg(ap, char*);
- if( z2==0 ) z2 = zNull;
- nByte += strlen(z2);
- break;
- }
- case 'T': {
- Token *p = va_arg(ap, Token*);
- nByte += p->n;
- break;
- }
- case 'S': {
- SrcList *p = va_arg(ap, SrcList*);
- int k = va_arg(ap, int);
- assert( p->nSrc>k && k>=0 );
- nByte += strlen(p->a[k].zName);
- if( p->a[k].zDatabase && p->a[k].zDatabase[0] ){
- nByte += strlen(p->a[k].zDatabase)+1;
- }
- break;
- }
- default: {
- nByte++;
- break;
- }
- }
- }
- va_end(ap);
- z = sqliteMalloc( nByte );
- if( z==0 ) return;
sqliteFree(pParse->zErrMsg);
- pParse->zErrMsg = z;
va_start(ap, zFormat);
- for(i=j=0; zFormat[i]; i++){
- if( zFormat[i]!='%' || zFormat[i+1]==0 ) continue;
- if( i>j ){
- memcpy(z, &zFormat[j], i-j);
- z += i-j;
- }
- j = i+2;
- i++;
- switch( zFormat[i] ){
- case 'd': {
- int x = va_arg(ap, int);
- sprintf(z, "%d", x);
- z += strlen(z);
- break;
- }
- case 'z':
- case 's': {
- int len;
- char *z2 = va_arg(ap, char*);
- if( z2==0 ) z2 = zNull;
- len = strlen(z2);
- memcpy(z, z2, len);
- z += len;
- if( zFormat[i]=='z' && z2!=zNull ){
- sqliteFree(z2);
- }
- break;
- }
- case 'T': {
- Token *p = va_arg(ap, Token*);
- memcpy(z, p->z, p->n);
- z += p->n;
- break;
- }
- case 'S': {
- int len;
- SrcList *p = va_arg(ap, SrcList*);
- int k = va_arg(ap, int);
- assert( p->nSrc>k && k>=0 );
- if( p->a[k].zDatabase && p->a[k].zDatabase[0] ){
- len = strlen(p->a[k].zDatabase);
- memcpy(z, p->a[k].zDatabase, len);
- z += len;
- *(z++) = '.';
- }
- len = strlen(p->a[k].zName);
- memcpy(z, p->a[k].zName, len);
- z += len;
- break;
- }
- default: {
- *(z++) = zFormat[i];
- break;
- }
- }
- }
+ pParse->zErrMsg = sqliteVMPrintf(zFormat, ap);
va_end(ap);
- if( i>j ){
- memcpy(z, &zFormat[j], i-j);
- z += i-j;
- }
- assert( (z - pParse->zErrMsg) < nByte );
- *z = 0;
}
/*
@@ -662,7 +553,7 @@ int sqliteIsNumber(const char *z){
** of "." depending on how locale is set. But that would cause problems
** for SQL. So this routine always uses "." regardless of locale.
*/
-double sqliteAtoF(const char *z){
+double sqliteAtoF(const char *z, const char **pzEnd){
int sign = 1;
LONGDOUBLE_TYPE v1 = 0.0;
if( *z=='-' ){
@@ -710,6 +601,7 @@ double sqliteAtoF(const char *z){
v1 *= scale;
}
}
+ if( pzEnd ) *pzEnd = z;
return sign<0 ? -v1 : v1;
}
@@ -759,8 +651,8 @@ int sqliteCompare(const char *atext, const char *btext){
result = -1;
}else{
double rA, rB;
- rA = sqliteAtoF(atext);
- rB = sqliteAtoF(btext);
+ rA = sqliteAtoF(atext, 0);
+ rB = sqliteAtoF(btext, 0);
if( rA<rB ){
result = -1;
}else if( rA>rB ){
@@ -852,8 +744,8 @@ int sqliteSortCompare(const char *a, const char *b){
res = -1;
break;
}
- rA = sqliteAtoF(&a[1]);
- rB = sqliteAtoF(&b[1]);
+ rA = sqliteAtoF(&a[1], 0);
+ rB = sqliteAtoF(&b[1], 0);
if( rA<rB ){
res = -1;
break;