diff --git a/manifest b/manifest index 83dfad92bf..f9ee0929e7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Combine\sthe\stwo\svery\ssimilar\sdefinitions\sof\s(crashsql)\sin\sthe\stest\sscripts.\s(CVS\s3694) -D 2007-03-17T07:22:43 +C Modifications\sto\scrash-test\sinfrastructure.\s(CVS\s3695) +D 2007-03-17T10:26:59 F Makefile.in 1fe3d0b46e40fd684e1e61f8e8056cefed16de9f F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -60,7 +60,7 @@ F src/attach.c fd286a9140a2df84b1482f052b67ff5fad9569a1 F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f F src/btree.c f5c1b3d88ad62ab4682de37229168a00b87fc948 F src/btree.h 066444ee25bd6e6accb997bfd2cf5ace14dbcd00 -F src/build.c f6b2616b60b19520b93cd26f21f76a8d2fbadc49 +F src/build.c f2edc786b5bf165a7d0949ed3a5872455a610c0e F src/callback.c 31d22b4919c7645cbcbb1591ce2453e8c677c558 F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675 F src/date.c 393c73fc027597e008dcd81454544659e978b05c @@ -106,7 +106,7 @@ F src/test2.c 59085c04e22a22bed9f1078ab318adc34c1229f3 F src/test3.c ed494a126221c4b9f66f8f0445554ad749764709 F src/test4.c 8b784cd82de158a2317cb4ac4bc86f91ad315e25 F src/test5.c 7162f8526affb771c4ed256826eee7bb9eca265f -F src/test6.c 60a02961ceb7b3edc25f5dc5c1ac2556622a76de +F src/test6.c edbd903a4886c171f199048af58c3aa5b2a86712 F src/test7.c 03fa8d787f6aebc6d1f72504d52f33013ad2c8e3 F src/test8.c 628ec89f9fbf3bfb9c58a503d845a0719595d0ad F src/test_async.c e3deaedd4d86a56391b81808fde9e44fbd92f1d3 @@ -133,7 +133,7 @@ F src/vtab.c 7fbda947e28cbe7adb3ba752a76ca9ef29936750 F src/where.c 1242dd545ffa7be8b2f539984d5f458ec731a937 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 -F test/all.test b62fcd122052efaff1b0979aefa2dd65cfc8ee52 +F test/all.test 7da67663cb5af0c95ecd4805d888459023fb8cfd F test/alter.test a2cc30e844cb3b5d203416962f56f78fc11b1978 F test/alter2.test 8b2d81eae944471d473de99ab25ba6d9cda73cd3 F test/alter3.test a6eec8f454be9b6ce73d8d7dc711453675a10ce7 @@ -183,7 +183,7 @@ F test/colmeta.test 6505c73ab58796afcb7c89ba9f429d573fbc6e53 F test/conflict.test 8a59399f61a14296a9bfed02e0570590a8a79cba F test/corrupt.test 18c7a995b1af76a8c8600b996257f2c7b7bff083 F test/corrupt2.test 572f8df0303d0ce63ddad5c5c9101a83a345ae46 -F test/crash.test 61bf6b1467e6308faeb24053731a53b9810d0ad1 +F test/crash.test 167eb4652eccbedb199b6f21850346c3f5d779fb F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2 F test/date.test 63cc718e1d209b10c6b7be8ce72b11addb9f1e04 F test/default.test 252298e42a680146b1dd64f563b95bdf088d94fb @@ -232,7 +232,7 @@ F test/insert3.test 09a532d5b6f3a788d91be0d4d368462f522685d1 F test/insert4.test 0bb119fea2868afdcf78e4e3e3bfed27bbdb2430 F test/interrupt.test c38b7f7c17914f0cd6a119beed5d03bc3f47f9eb F test/intpkey.test af4fd826c4784ec5c93b444de07adea0254d0d30 -F test/ioerr.test 053da63476d1b6a32ec61ac21c0391e614cb1d1a +F test/ioerr.test 491d42c49bbec598966d26b01ed7901f55e5ee2d F test/join.test af0443185378b64878750aa1cf4b83c216f246b4 F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 @@ -249,7 +249,7 @@ F test/lock.test 6825aea0b5885578b1b63a3b178803842c4ee9f1 F test/lock2.test d83ba79d3c4fffdb5b926c7d8ca7a36c34288a55 F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9 F test/main.test e7212ce1023957c7209778cc87fa932bd79ba89a -F test/malloc.test 0eb9fcffa8693bcbc47fd28f26616474da44f18b +F test/malloc.test 2f234703cd206fe441e21341dba2d554a7cf8e68 F test/malloc2.test 4ed7d719542c4570dec9c2ebe2bbdf3a9f3b0d05 F test/malloc3.test fd4186bee73c2a2638f4e2a05a684c06836f725b F test/malloc4.test 59cd02f71b363302a04c4e77b97c0a1572eaa210 @@ -276,7 +276,7 @@ F test/pagesize.test 05c74ea49f790734ec1e9ab765d9bf1cce79b8f2 F test/pragma.test 91739ef06ab9ecf91e90d25951858caba71d6fe7 F test/printf.test cdd8e20dd901382a385afcbaa777b9377815c2ad F test/progress.test 8b22b4974b0a95272566385f8cb8c341c7130df8 x -F test/quick.test 6bc0f7c7b905f7de5fe4d3f13239ced3e4e66fe7 +F test/quick.test 9c02be6cdc6ee2247a1b00486b162cfbd60a01ae F test/quote.test 5891f2338980916cf7415484b4ce785294044adb F test/reindex.test 38b138abe36bf9a08c791ed44d9f76cd6b97b78b F test/rollback.test 673cd8c44c685ad54987fe7f0eeba84efa09685d @@ -305,7 +305,7 @@ F test/table.test feea6a3eb08cf166f570255eea5447e42ef82498 F test/tableapi.test 036575a98dcce7c92e9f39056839bbad8a715412 F test/tclsqlite.test 51334389283c74bcbe28645a73159b17e239e9f3 F test/temptable.test c36f3e5a94507abb64f7ba23deeb4e1a8a8c3821 -F test/tester.tcl 4e062859b4a4597e23894b9afa2fbd320b9513a9 +F test/tester.tcl 3c7545cbd7fc80a986eda77145e18260dbf34c96 F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35 F test/thread2.test 6d7b30102d600f51b4055ee3a5a19228799049fb F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b @@ -392,7 +392,7 @@ F www/audit.tcl 90e09d580f79c7efec0c7d6f447b7ec5c2dce5c0 F www/autoinc.tcl b357f5ba954b046ee35392ce0f884a2fcfcdea06 F www/c_interface.tcl b51b08591554c16a0c3ef718364a508ac25abc7e F www/capi3.tcl 7a7cc225fe02eb7ab861a6019b08baa0014409e1 -F www/capi3ref.tcl 4e0df9c41ebc669a7d7e9b81b410d1f907d20e78 +F www/capi3ref.tcl 24fc13e145bdc07a77051d944534a97a957267ab F www/changes.tcl dba0e1f40192f79c7a887fa3efa56e6fdd54f85a F www/common.tcl 2b793e5c31486c8a01dd27dc0a631ad93704438e F www/compile.tcl 276546d7eb445add5a867193bbd80f6919a6b084 @@ -436,7 +436,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P fbc53da8c645935c74e49af2ab2cf447dc72ba4e -R 9f3ee429c1669bb49f23db6678a5b730 +P eaf434d5887bf75330e1cea12be810dfe667b62a +R 3e037a9ae48873c3a73dcd8bd26cfac6 U danielk1977 -Z be503f1e3c0d6d60b895890cf3d106d6 +Z 2681bb64cf477e20030d108b1c89215c diff --git a/manifest.uuid b/manifest.uuid index 0801472c05..fcaddc3ac8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -eaf434d5887bf75330e1cea12be810dfe667b62a \ No newline at end of file +c4be8d9949fc7b5e1bed757423c5195f38069048 \ No newline at end of file diff --git a/src/build.c b/src/build.c index 88e83d2d9f..1998b142a8 100644 --- a/src/build.c +++ b/src/build.c @@ -22,7 +22,7 @@ ** COMMIT ** ROLLBACK ** -** $Id: build.c,v 1.414 2007/03/13 16:32:25 danielk1977 Exp $ +** $Id: build.c,v 1.415 2007/03/17 10:26:59 danielk1977 Exp $ */ #include "sqliteInt.h" #include @@ -2362,12 +2362,12 @@ void sqlite3CreateIndex( goto exit_create_index; } } - if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){ - if( !ifNotExist ){ - sqlite3ErrorMsg(pParse, "index %s already exists", zName); - } - goto exit_create_index; + if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){ + if( !ifNotExist ){ + sqlite3ErrorMsg(pParse, "index %s already exists", zName); } + goto exit_create_index; + } }else{ char zBuf[30]; int n; diff --git a/src/test6.c b/src/test6.c index 32ee4762a7..1743342070 100644 --- a/src/test6.c +++ b/src/test6.c @@ -38,9 +38,9 @@ struct crashFile { }; /* -** Size of a simulated disk block +** Size of a simulated disk block. Default is 512 bytes. */ -#define BLOCKSIZE 512 +static int BLOCKSIZE = 512; #define BLOCK_OFFSET(x) ((x) * BLOCKSIZE) @@ -58,6 +58,11 @@ struct crashFile { static int iCrashDelay = 0; static char zCrashFile[500]; +/* +** A list of all open files. +*/ +static crashFile *pAllFiles = 0; + /* ** Set the value of the two crash parameters. */ @@ -69,6 +74,16 @@ static void setCrashParams(int iDelay, char const *zFile){ sqlite3OsLeaveMutex(); } +/* +** Set the value of the simulated disk block size. +*/ +static void setBlocksize(int iBlockSize){ + sqlite3OsEnterMutex(); + assert( !pAllFiles ); + BLOCKSIZE = iBlockSize; + sqlite3OsLeaveMutex(); +} + /* ** File zPath is being sync()ed. Return non-zero if this should ** cause a crash. @@ -94,11 +109,6 @@ static int crashRequired(char const *zPath){ return r; } -/* -** A list of all open files. -*/ -static crashFile *pAllFiles = 0; - /* Forward reference */ static void initFile(OsFile **pId, char const *zName, OsFile *pBase); @@ -510,7 +520,7 @@ static void initFile(OsFile **pId, char const *zName, OsFile *pBase){ /* -** tclcmd: sqlite_crashparams DELAY CRASHFILE +** tclcmd: sqlite_crashparams DELAY CRASHFILE ?BLOCKSIZE? ** ** This procedure implements a TCL command that enables crash testing ** in testfixture. Once enabled, crash testing cannot be disabled. @@ -521,20 +531,31 @@ static int crashParamsObjCmd( int objc, Tcl_Obj *CONST objv[] ){ - int delay; + int iDelay; const char *zFile; int nFile; - if( objc!=3 ){ - Tcl_WrongNumArgs(interp, 1, objv, "DELAY CRASHFILE"); + + if( objc!=3 && objc!=4 ){ + Tcl_WrongNumArgs(interp, 1, objv, "DELAY CRASHFILE ?BLOCKSIZE?"); return TCL_ERROR; } - if( Tcl_GetIntFromObj(interp, objv[1], &delay) ) return TCL_ERROR; + if( Tcl_GetIntFromObj(interp, objv[1], &iDelay) ) return TCL_ERROR; zFile = Tcl_GetStringFromObj(objv[2], &nFile); if( nFile>=sizeof(zCrashFile)-1 ){ Tcl_AppendResult(interp, "crash file name too big", 0); return TCL_ERROR; } - setCrashParams(delay, zFile); + setCrashParams(iDelay, zFile); + if( objc==4 ){ + int iBlockSize = 0; + if( Tcl_GetIntFromObj(interp, objv[3], &iBlockSize) ) return TCL_ERROR; + if( pAllFiles ){ + char *zErr = "Cannot modify blocksize after opening files"; + Tcl_SetResult(interp, zErr, TCL_STATIC); + return TCL_ERROR; + } + setBlocksize(iBlockSize); + } sqlite3CrashTestEnable = 1; return TCL_OK; } diff --git a/test/all.test b/test/all.test index e63fbf953c..17d950349e 100644 --- a/test/all.test +++ b/test/all.test @@ -10,7 +10,7 @@ #*********************************************************************** # This file runs all tests. # -# $Id: all.test,v 1.36 2006/11/23 21:09:11 drh Exp $ +# $Id: all.test,v 1.37 2007/03/17 10:26:59 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -51,6 +51,7 @@ set EXCLUDE { all.test async.test crash.test + crash2.test autovacuum_crash.test quick.test malloc.test diff --git a/test/crash.test b/test/crash.test index e088658822..80dd9f1df0 100644 --- a/test/crash.test +++ b/test/crash.test @@ -13,11 +13,11 @@ # The focus of this file is testing the ability of the database to # uses its rollback journal to recover intact (no database corruption) # from a power failure during the middle of a COMMIT. The OS interface -# modules are overloaded in a separate instance of testfixture using -# the modified I/O routines found in test6.c. These routines allow us -# to simulate the kind of file damage that occurs after a power failure. +# modules are overloaded using the modified I/O routines found in test6.c. +# These routines allow us to simulate the kind of file damage that +# occurs after a power failure. # -# $Id: crash.test,v 1.22 2007/03/17 07:22:43 danielk1977 Exp $ +# $Id: crash.test,v 1.23 2007/03/17 10:26:59 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -68,7 +68,7 @@ do_test crash-1.1 { expr 0 } {0} do_test crash-1.2 { - crashsql 1 test.db-journal { + crashsql -delay 1 -file test.db-journal { DELETE FROM abc WHERE a = 1; } } {1 {child process exited abnormally}} @@ -76,7 +76,7 @@ do_test crash-1.3 { signature } $::sig do_test crash-1.4 { - crashsql 1 test.db { + crashsql -delay 1 -file test.db { DELETE FROM abc WHERE a = 1; } } {1 {child process exited abnormally}} @@ -84,7 +84,7 @@ do_test crash-1.5 { signature } $::sig do_test crash-1.6 { - crashsql 2 test.db-journal { + crashsql -delay 2 -file test.db-journal { DELETE FROM abc WHERE a = 1; } } {1 {child process exited abnormally}} @@ -95,7 +95,7 @@ do_test crash-1.7 { } {0 {1 2 3 4 5 6}} do_test crash-1.8 { - crashsql 3 test.db-journal { + crashsql -delay 3 -file test.db-journal { DELETE FROM abc WHERE a = 1; } } {0 {}} @@ -105,7 +105,7 @@ do_test crash-1.9 { } } {0 {4 5 6}} do_test crash-1.10 { - crashsql 2 test.db { + crashsql -delay 2 -file test.db { DELETE FROM abc WHERE a = 4; } } {0 {}} @@ -143,7 +143,7 @@ do_test crash-2.2 { expr ([file size test.db] / 1024)>16 } {1} do_test crash-2.3 { - crashsql 2 test.db-journal { + crashsql -delay 2 -file test.db-journal { DELETE FROM abc WHERE a < 800; } } {1 {child process exited abnormally}} @@ -151,7 +151,7 @@ do_test crash-2.4 { signature } $sig do_test crash-2.5 { - crashsql 1 test.db { + crashsql -delay 1 -file test.db { DELETE FROM abc WHERE a<800; } } {1 {child process exited abnormally}} @@ -185,7 +185,7 @@ do_test crash-3.0 { for {set i 1} {$i < $repeats} {incr i} { set sig [signature] do_test crash-3.$i.1 { - crashsql [expr $i%5 + 1] test.db-journal " + crashsql -delay [expr $i%5 + 1] -file test.db-journal " BEGIN; SELECT random() FROM abc LIMIT $i; INSERT INTO abc VALUES(randstr(10,10), 0, 0); @@ -224,7 +224,7 @@ for {set i 1} {$i<$repeats} {incr i} { set sig [signature] set sig2 [signature2] do_test crash-4.1.$i.1 { - set c [crashsql $i test.db-journal " + set c [crashsql -delay $i -file test.db-journal " ATTACH 'test2.db' AS aux; BEGIN; SELECT random() FROM abc LIMIT $i; @@ -249,7 +249,7 @@ while {[incr i]} { set sig2 [signature2] set ::fin 0 do_test crash-4.2.$i.1 { - set c [crashsql $i test2.db-journal " + set c [crashsql -delay $i -file test2.db-journal " ATTACH 'test2.db' AS aux; BEGIN; SELECT random() FROM abc LIMIT $i; @@ -277,7 +277,7 @@ for {set i 1} {$i < 5} {incr i} { set sig [signature] set sig2 [signature2] do_test crash-4.3.$i.1 { - crashsql 1 test.db-mj* " + crashsql -delay 1 -file test.db-mj* " ATTACH 'test2.db' AS aux; BEGIN; SELECT random() FROM abc LIMIT $i; @@ -340,7 +340,7 @@ do_test crash-5.3 { # database file and the journal file does not contain trustworthy rollback # data for this page. # - crashsql 1 test.db-journal { + crashsql -delay 1 -file test.db-journal { BEGIN; -- 1 DELETE FROM abc WHERE oid = 1; -- 2 INSERT INTO abc VALUES(randstr(1500,1500), 0, 0); -- 3 @@ -361,7 +361,7 @@ do_test crash-5.5 { # journal file before truncation in an auto-vacuum database. # do_test crash-6.1 { - crashsql 1 test.db { + crashsql -delay 1 -file test.db { DROP TABLE abc; } } {1 {child process exited abnormally}} @@ -374,7 +374,7 @@ do_test crash-6.2 { # corrupted slightly so that the corruption has to be detected by the # checksum. do_test crash-7.1 { - crashsql 1 test.db { + crashsql -delay 1 -file test.db { ATTACH 'test2.db' AS aux; BEGIN; INSERT INTO abc VALUES(randstr(1500,1500), 0, 0); diff --git a/test/ioerr.test b/test/ioerr.test index c9513ab65a..4717b36c2c 100644 --- a/test/ioerr.test +++ b/test/ioerr.test @@ -15,7 +15,7 @@ # The tests in this file use special facilities that are only # available in the SQLite test fixture. # -# $Id: ioerr.test,v 1.30 2007/03/15 12:17:43 drh Exp $ +# $Id: ioerr.test,v 1.31 2007/03/17 10:26:59 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -141,7 +141,7 @@ ifcapable crashtest { CREATE TABLE tx(a, b); CREATE TABLE aux.ty(a, b); } - set rc [crashsql 2 test2.db-journal { + set rc [crashsql -delay 2 -file test2.db-journal { ATTACH 'test2.db' as aux; PRAGMA cache_size = 10; BEGIN; diff --git a/test/malloc.test b/test/malloc.test index f48e37e76e..8e592c8764 100644 --- a/test/malloc.test +++ b/test/malloc.test @@ -14,7 +14,7 @@ # special feature is used to see what happens in the library if a malloc # were to really fail due to an out-of-memory situation. # -# $Id: malloc.test,v 1.36 2006/10/18 23:26:39 drh Exp $ +# $Id: malloc.test,v 1.37 2007/03/17 10:26:59 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -359,7 +359,7 @@ do_malloc_test 12 -tclbody { # transaction. ifcapable crashtest { do_malloc_test 13 -tclprep { - set rc [crashsql 1 test2.db { + set rc [crashsql -delay 1 -file test2.db { ATTACH 'test2.db' as aux; PRAGMA cache_size = 10; BEGIN; diff --git a/test/quick.test b/test/quick.test index 937b60ef00..24162c6869 100644 --- a/test/quick.test +++ b/test/quick.test @@ -6,7 +6,7 @@ #*********************************************************************** # This file runs all tests. # -# $Id: quick.test,v 1.47 2006/11/23 21:09:11 drh Exp $ +# $Id: quick.test,v 1.48 2007/03/17 10:26:59 danielk1977 Exp $ proc lshift {lvar} { upvar $lvar l @@ -43,6 +43,7 @@ set EXCLUDE { btree6.test corrupt.test crash.test + crash2.test loadext.test malloc.test malloc2.test diff --git a/test/tester.tcl b/test/tester.tcl index ccce39fd15..37b60b0548 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -11,7 +11,7 @@ # This file implements some common TCL routines used for regression # testing the SQLite library # -# $Id: tester.tcl,v 1.74 2007/03/17 07:22:43 danielk1977 Exp $ +# $Id: tester.tcl,v 1.75 2007/03/17 10:26:59 danielk1977 Exp $ # Make sure tclsqlite3 was compiled correctly. Abort now with an # error message if not. @@ -309,14 +309,37 @@ proc ifcapable {expr code {else ""} {elsecode ""}} { # error message. This is "child process exited abnormally" if the crash # occured. # -proc crashsql {crashdelay crashfile sql} { +# crashsql -delay CRASHDELAY -file CRASHFILE ?-blocksize BLOCKSIZE $sql +# +proc crashsql {args} { if {$::tcl_platform(platform)!="unix"} { error "crashsql should only be used on unix" } + + set blocksize "" + set crashdelay 1 + set crashfile "" + set sql [lindex $args end] + + for {set ii 0} {$ii < [llength $args]-1} {incr ii 2} { + set z [lindex $args $ii] + set n [string length $z] + set z2 [lindex $args [expr $ii+1]] + + if {$n>1 && [string first $z -delay]==0} {set crashdelay $z2} \ + elseif {$n>1 && [string first $z -file]==0} {set crashfile $z2} \ + elseif {$n>1 && [string first $z -blocksize]==0} {set blocksize $z2} \ + else { error "Unrecognized option: $z" } + } + + if {$crashfile eq ""} { + error "Compulsory option -file missing" + } + set cfile [file join [pwd] $crashfile] set f [open crash.tcl w] - puts $f "sqlite3_crashparams $crashdelay $cfile" + puts $f "sqlite3_crashparams $crashdelay $cfile $blocksize" puts $f "set sqlite_pending_byte $::sqlite_pending_byte" puts $f "sqlite3 db test.db" diff --git a/www/capi3ref.tcl b/www/capi3ref.tcl index 9c93914794..635359c9b5 100644 --- a/www/capi3ref.tcl +++ b/www/capi3ref.tcl @@ -1,8 +1,8 @@ -set rcsid {$Id: capi3ref.tcl,v 1.52 2007/02/20 15:21:05 drh Exp $} +set rcsid {$Id: capi3ref.tcl,v 1.53 2007/03/17 10:26:59 danielk1977 Exp $} source common.tcl header {C/C++ Interface For SQLite Version 3} puts { -

C/C++ Interface For SQLite Version 3

+

C/C++ Interface For SQLite Version 3

} proc api {name prototype desc {notused x}} { @@ -1722,6 +1722,7 @@ foreach name [lsort [array names name_to_idx]] { #parray name_to_idx #parray sname incr n -1 +puts "
" puts {} set nrow [expr {($n+2)/3}] set i 0 @@ -1740,6 +1741,7 @@ for {set j 0} {$j<3} {incr j} { } puts "
" puts "" +puts "
" proc resolve_name {ignore_list name} { global name_to_idx @@ -1756,7 +1758,7 @@ foreach name [lsort [array names name_to_idx]] { set done($i) 1 foreach {namelist prototype desc} [lindex $apilist $i] break foreach name $namelist { - puts "" + puts "" } puts "


" puts "
"
@@ -1773,4 +1775,6 @@ foreach name [lsort [array names name_to_idx]] {
   puts "

$d3

" } +puts "
" footer $rcsid +puts "
"