vdbe.o vdbeapi.o vdbeaux.o vdbeblob.o vdbefifo.o vdbemem.o \
where.o utf.o legacy.o vtab.o
-LIBOBJ += icu.o
-
# All of the source code files.
#
SRC = \
$(TOP)/ext/fts2/fts2_porter.c \
$(TOP)/ext/fts2/fts2_tokenizer.h \
$(TOP)/ext/fts2/fts2_tokenizer1.c
-SRC += \
- $(TOP)/ext/icu/icu.c
# Generated source code files
#
-C Add\sthe\sexperimental\screate_collation_x()\sapi.\s(CVS\s3934)
-D 2007-05-07T09:32:45
+C Change\ssqlite3_snprintf()\sso\sthat\sit\sdoes\snot\swrite\sa\szero-terminator\sif\nthe\sbuffer\ssize\sargument\sis\sless\sthan\s1.\s\sTicket\s#2341.\s\sAdded\sdocumentation\nabout\sthe\ssqlite3_snprintf()\sfunction.\s(CVS\s3935)
+D 2007-05-07T11:24:30
F Makefile.in ea8888bdcf53313d26576fcabcb6d0a10ecd35cd
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
F ext/icu/icu.c a30999ba467749ed6232d02cc8c4b5a0e62cd727
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
F ltmain.sh 56abb507100ed2d4261f6dd1653dec3cf4066387
-F main.mk 6298bd3fcbc590fe05354f7d962c57ac202d7bcd
+F main.mk 09c19ae05ac9e5654d5fd866a980b21ad9df8f30
F mkdll.sh ed62756baf44babf562a7843588790c02fee2106
F mkopcodec.awk bd46ad001c98dfbab07b1713cb8e692fa0e5415d
F mkopcodeh.awk cde995d269aa06c94adbf6455bea0acedb913fa5
F src/parse.y a5bdc301e970ceb3826b56a84898b8966d5353f8
F src/pragma.c 3f16c1274bc25afb630b61a3630ea19a2fd0b5dc
F src/prepare.c 03277063bc4f5860efbf23548fa0123ac0f6eaec
-F src/printf.c 0c6f40648770831341ac45ab32423a80b4c87f05
+F src/printf.c 67de0dcb40ef3297f4a047b434b81585c0f7062d
F src/random.c 6119474a6f6917f708c1dee25b9a8e519a620e88
F src/select.c a306d03fc7d8365055bef70c3563e8fca897460f
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
F src/sqliteInt.h 5e1cf645ef1bf8b43c5d020adbeed43746df24ed
F src/table.c a8de75bcedf84d4060d804264b067ab3b1a3561d
F src/tclsqlite.c f3414b2d6bc37e6760b49c9abd3504ff69f4441b
-F src/test1.c a91c84e903e3a59ad3bf6c10bd5b93e74d631ea2
+F src/test1.c 84e78efa05a6d36a1868912b84cc5009d990f49d
F src/test2.c 24458b17ab2f3c90cbc1c8446bd7ffe69be62f88
F src/test3.c 946ea9d1a8c928656e3c70f0a2fcb8e733a15e86
F src/test4.c 8b784cd82de158a2317cb4ac4bc86f91ad315e25
F test/pageropt.test b4b38eb3cf76be2be444326856248898bb0e3fc9
F test/pagesize.test e0a8b3fe80f8b8e808d94a00734c7a18c76c407e
F test/pragma.test fecb7085f58d9fb5172a5c0b63fd3b25c7bfb414
-F test/printf.test 483b9fe75ffae1fb27328bdce5560b452ba83577
+F test/printf.test 71047b5fe8e2adfbe514e0d56e10adf12d84deff
F test/progress.test 8b22b4974b0a95272566385f8cb8c341c7130df8 x
F test/ptrchng.test 1c712dd6516e1377471744fa765e41c79a357da6
F test/quick.test afa4339d08800d8aa3625df6cc2f059cc505f4c3
F www/autoinc.tcl b357f5ba954b046ee35392ce0f884a2fcfcdea06
F www/c_interface.tcl b51b08591554c16a0c3ef718364a508ac25abc7e
F www/capi3.tcl 88884dd743039d1a95aa57f4a5eb369de7744716
-F www/capi3ref.tcl 0d742d6bd59bc51bbb4be014e7ea47e97786d318
+F www/capi3ref.tcl be09756d8b9aebd2d7b597fb910eed66fb4480e6
F www/changes.tcl 550300b0ff00fc1b872f7802b2d5a1e7587d3e58
F www/common.tcl 2b793e5c31486c8a01dd27dc0a631ad93704438e
F www/compile.tcl 276546d7eb445add5a867193bbd80f6919a6b084
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 2d1348dda2cbdf958a15267432063f359550c303
-R cb3c4e9539473867932a2c5f74528890
-U danielk1977
-Z eaa2b3011ed3cbd2140fcff678e040f6
+P ff49d48f2f025898a0f4ace1fc227e1d367ea89f
+R d693f630962da031deefd4769c7a8268
+U drh
+Z ff527a494f455c458a9191e7c78f4220
-ff49d48f2f025898a0f4ace1fc227e1d367ea89f
\ No newline at end of file
+f3ae4ac5fe0bfa2f91e76a6def86c444e51fe80b
\ No newline at end of file
char *z;
va_list ap;
+ if( n<=0 ){
+ return zBuf;
+ }
+ zBuf[0] = 0;
va_start(ap,zFormat);
z = base_vprintf(0, 0, zBuf, n, zFormat, ap);
va_end(ap);
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
-** $Id: test1.c,v 1.248 2007/05/07 09:32:45 danielk1977 Exp $
+** $Id: test1.c,v 1.249 2007/05/07 11:24:30 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
return TCL_OK;
}
+/*
+** Usage: sqlite3_snprintf_int SIZE FORMAT INT
+**
+** Test the of sqlite3_snprintf() routine. SIZE is the size of the
+** output buffer in bytes. The maximum size is 100. FORMAT is the
+** format string. INT is a single integer argument. The FORMAT
+** string must require no more than this one integer argument. If
+** You pass in a format string that requires more than one argument,
+** bad things will happen.
+*/
+static int test_snprintf_int(
+ void *NotUsed,
+ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
+ int argc, /* Number of arguments */
+ char **argv /* Text of each argument */
+){
+ char zStr[100];
+ int n = atoi(argv[1]);
+ if( n>sizeof(zStr) ) n = sizeof(zStr);
+ const char *zFormat = argv[2];
+ int a1 = atoi(argv[3]);
+ strcpy(zStr, "abcdefghijklmnopqrstuvwxyz");
+ sqlite3_snprintf(n, zStr, zFormat, a1);
+ Tcl_AppendResult(interp, zStr, 0);
+ return TCL_OK;
+}
+
/*
** Usage: sqlite3_get_table_printf DB FORMAT STRING
**
{ "sqlite3_mprintf_hexdouble", (Tcl_CmdProc*)sqlite3_mprintf_hexdouble},
{ "sqlite3_mprintf_z_test", (Tcl_CmdProc*)test_mprintf_z },
{ "sqlite3_mprintf_n_test", (Tcl_CmdProc*)test_mprintf_n },
+ { "sqlite3_snprintf_int", (Tcl_CmdProc*)test_snprintf_int },
{ "sqlite3_last_insert_rowid", (Tcl_CmdProc*)test_last_rowid },
{ "sqlite3_exec_printf", (Tcl_CmdProc*)test_exec_printf },
{ "sqlite3_exec", (Tcl_CmdProc*)test_exec },
# This file implements regression tests for SQLite library. The
# focus of this file is testing the sqlite_*_printf() interface.
#
-# $Id: printf.test,v 1.22 2007/03/31 15:02:50 drh Exp $
+# $Id: printf.test,v 1.23 2007/05/07 11:24:31 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
sqlite3_mprintf_str {abc-%T-123} 0 0 {not used}
} {abc-}
+do_test printf-15.1 {
+ sqlite3_snprintf_int 5 {12345} 0
+} {1234}
+do_test printf-15.2 {
+ sqlite3_snprintf_int 5 {} 0
+} {}
+do_test printf-15.3 {
+ sqlite3_snprintf_int 0 {} 0
+} {abcdefghijklmnopqrstuvwxyz}
finish_test
-set rcsid {$Id: capi3ref.tcl,v 1.56 2007/04/27 17:16:22 drh Exp $}
+set rcsid {$Id: capi3ref.tcl,v 1.57 2007/05/07 11:24:31 drh Exp $}
source common.tcl
header {C/C++ Interface For SQLite Version 3}
puts {
literal.
} {}
+api {} {
+char *sqlite3_snprintf(int bufSize, char *buf, const char *zFormat, ...);
+} {
+ This routine works like "sprintf()", writing a formatted string into
+ the buf[]. However, no more than bufSize characters will be written
+ into buf[]. This routine returns a pointer to buf[]. If bufSize is
+ greater than zero, then buf[] is guaranteed to be zero-terminated.
+
+ This routine uses the same extended formatting options as
+ sqlite3_mprintf() and sqlite3_vmprintf().
+
+ Note these differences with the snprintf() function found in many
+ standard libraries: (1) sqlite3_snprintf() returns a pointer to the
+ buffer rather than the number of characters written. (It would,
+ arguably, be more useful to return the number of characters written,
+ but we discovered that after the interface had been published and
+ are unwilling to break backwards compatibility.) (2) The order
+ of the bufSize and buf parameter is reversed from snprintf().
+ And (3) sqlite3_snprintf() always writes a zero-terminator if bufSize
+ is positive.
+
+ Please do not use the return value of this routine. We may
+ decide to make the minor compatibility break and change this routine
+ to return the number of characters written rather than a pointer to
+ the buffer in a future minor version increment.
+}
+
api {} {
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */