aboutsummaryrefslogtreecommitdiff
path: root/src/printf.c
diff options
context:
space:
mode:
authordrh <>2023-02-25 12:50:54 +0000
committerdrh <>2023-02-25 12:50:54 +0000
commit0f8aebbfcf5b4d63208ff336bca5df7ed8f9bbb5 (patch)
tree651750b254819352512418024c905015fe5a3b3a /src/printf.c
parent96705c1d7a8d135dc2d9863d1cb2584d192c8e89 (diff)
downloadsqlite-0f8aebbfcf5b4d63208ff336bca5df7ed8f9bbb5.tar.gz
sqlite-0f8aebbfcf5b4d63208ff336bca5df7ed8f9bbb5.zip
Performance optimization on sqlite3_vsnprintf().
FossilOrigin-Name: 4430e6e96dbf3d0b464776c132838dd3e456716e0ae5972fc7e0ece13b56ea25
Diffstat (limited to 'src/printf.c')
-rw-r--r--src/printf.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/printf.c b/src/printf.c
index 45a31ec8d..b222cb214 100644
--- a/src/printf.c
+++ b/src/printf.c
@@ -1361,12 +1361,22 @@ char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
return zBuf;
}
char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){
- char *z;
+ StrAccum acc;
va_list ap;
+ if( n<=0 ) return zBuf;
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( zBuf==0 || zFormat==0 ) {
+ (void)SQLITE_MISUSE_BKPT;
+ if( zBuf ) zBuf[0] = 0;
+ return zBuf;
+ }
+#endif
+ sqlite3StrAccumInit(&acc, 0, zBuf, n, 0);
va_start(ap,zFormat);
- z = sqlite3_vsnprintf(n, zBuf, zFormat, ap);
+ sqlite3_str_vappendf(&acc, zFormat, ap);
va_end(ap);
- return z;
+ zBuf[acc.nChar] = 0;
+ return zBuf;
}
/*