diff options
author | Wez Furlong <wez@php.net> | 2004-07-10 12:27:51 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2004-07-10 12:27:51 +0000 |
commit | e563b4eafa63ba8beb88defa1e36f037a7a97a60 (patch) | |
tree | 2e72dfa1c4b7fe62fde9ab326a67047ba2f4cc9e /ext/sqlite/libsqlite/src/util.c | |
parent | cd732f1a3f5df97407797fe7ebb97830552479ad (diff) | |
download | php-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.c | 122 |
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; |