Fossil SCM

minor generic cleanups in th1 before continuing on to real work...

stephan 2012-07-14 13:20 th1-query-api
Commit 1767603f23ab757ac54e8a9212461ca846065a0d
3 files changed +17 -7 +12 +108 -38
+17 -7
--- src/th.h
+++ src/th.h
@@ -23,23 +23,26 @@
2323
** (which may differ from len due to encoding and whatnot). On error
2424
** a negative value must be returned.
2525
*/
2626
typedef int (*Th_output_f)( char const * zData, int len, void * pState );
2727
28
+struct Th_Vtab_Output {
29
+ Th_output_f f; /* output handler */
30
+ void * pState; /* final argument for xOut() */
31
+ char enabled; /* if 0, Th_output() does nothing. */
32
+};
33
+typedef struct Th_Vtab_Output Th_Vtab_Output;
34
+
2835
/*
2936
** Before creating an interpreter, the application must allocate and
3037
** populate an instance of the following structure. It must remain valid
3138
** for the lifetime of the interpreter.
3239
*/
3340
struct Th_Vtab {
3441
void *(*xMalloc)(unsigned int);
3542
void (*xFree)(void *);
36
- struct {
37
- Th_output_f f; /* output handler */
38
- void * pState; /* final argument for xOut() */
39
- char enabled; /* if 0, Th_output() does nothing. */
40
- } out;
43
+ Th_Vtab_Output out;
4144
};
4245
typedef struct Th_Vtab Th_Vtab;
4346
4447
4548
/*
@@ -204,10 +207,16 @@
204207
205208
/*
206209
** Useful functions from th_lang.c.
207210
*/
208211
int Th_WrongNumArgs(Th_Interp *interp, const char *zMsg);
212
+/*
213
+** Works like Th_WrongNumArgs() but expects (zCmdName,zCmdLen) to be
214
+** the current command's (name,length), i.e. (argv[0],argl[0]).
215
+*/
216
+int Th_WrongNumArgs2(Th_Interp *interp, const char *zCmdName,
217
+ int zCmdLen, const char *zMsg);
209218
210219
typedef struct Th_SubCommand {char *zName; Th_CommandProc xProc;} Th_SubCommand;
211220
int Th_CallSubCommand(Th_Interp*,void*,int,const char**,int*,Th_SubCommand*);
212221
213222
/*
@@ -223,12 +232,13 @@
223232
** return value semantics.
224233
*/
225234
int Th_output( Th_Interp *pInterp, char const * zData, int len );
226235
227236
/*
228
-** Th_output_f() implementation which sends its output to either pState
229
-** (which must be NULL or a (FILE*)) or stdout (if pState is NULL).
237
+** Th_output_f() implementation which sends its output to either
238
+** pState (which must be NULL or a (FILE*)) or stdout (if pState is
239
+** NULL).
230240
*/
231241
int Th_output_f_FILE( char const * zData, int len, void * pState );
232242
233243
234244
#ifdef TH_USE_SQLITE
235245
--- src/th.h
+++ src/th.h
@@ -23,23 +23,26 @@
23 ** (which may differ from len due to encoding and whatnot). On error
24 ** a negative value must be returned.
25 */
26 typedef int (*Th_output_f)( char const * zData, int len, void * pState );
27
 
 
 
 
 
 
 
28 /*
29 ** Before creating an interpreter, the application must allocate and
30 ** populate an instance of the following structure. It must remain valid
31 ** for the lifetime of the interpreter.
32 */
33 struct Th_Vtab {
34 void *(*xMalloc)(unsigned int);
35 void (*xFree)(void *);
36 struct {
37 Th_output_f f; /* output handler */
38 void * pState; /* final argument for xOut() */
39 char enabled; /* if 0, Th_output() does nothing. */
40 } out;
41 };
42 typedef struct Th_Vtab Th_Vtab;
43
44
45 /*
@@ -204,10 +207,16 @@
204
205 /*
206 ** Useful functions from th_lang.c.
207 */
208 int Th_WrongNumArgs(Th_Interp *interp, const char *zMsg);
 
 
 
 
 
 
209
210 typedef struct Th_SubCommand {char *zName; Th_CommandProc xProc;} Th_SubCommand;
211 int Th_CallSubCommand(Th_Interp*,void*,int,const char**,int*,Th_SubCommand*);
212
213 /*
@@ -223,12 +232,13 @@
223 ** return value semantics.
224 */
225 int Th_output( Th_Interp *pInterp, char const * zData, int len );
226
227 /*
228 ** Th_output_f() implementation which sends its output to either pState
229 ** (which must be NULL or a (FILE*)) or stdout (if pState is NULL).
 
230 */
231 int Th_output_f_FILE( char const * zData, int len, void * pState );
232
233
234 #ifdef TH_USE_SQLITE
235
--- src/th.h
+++ src/th.h
@@ -23,23 +23,26 @@
23 ** (which may differ from len due to encoding and whatnot). On error
24 ** a negative value must be returned.
25 */
26 typedef int (*Th_output_f)( char const * zData, int len, void * pState );
27
28 struct Th_Vtab_Output {
29 Th_output_f f; /* output handler */
30 void * pState; /* final argument for xOut() */
31 char enabled; /* if 0, Th_output() does nothing. */
32 };
33 typedef struct Th_Vtab_Output Th_Vtab_Output;
34
35 /*
36 ** Before creating an interpreter, the application must allocate and
37 ** populate an instance of the following structure. It must remain valid
38 ** for the lifetime of the interpreter.
39 */
40 struct Th_Vtab {
41 void *(*xMalloc)(unsigned int);
42 void (*xFree)(void *);
43 Th_Vtab_Output out;
 
 
 
 
44 };
45 typedef struct Th_Vtab Th_Vtab;
46
47
48 /*
@@ -204,10 +207,16 @@
207
208 /*
209 ** Useful functions from th_lang.c.
210 */
211 int Th_WrongNumArgs(Th_Interp *interp, const char *zMsg);
212 /*
213 ** Works like Th_WrongNumArgs() but expects (zCmdName,zCmdLen) to be
214 ** the current command's (name,length), i.e. (argv[0],argl[0]).
215 */
216 int Th_WrongNumArgs2(Th_Interp *interp, const char *zCmdName,
217 int zCmdLen, const char *zMsg);
218
219 typedef struct Th_SubCommand {char *zName; Th_CommandProc xProc;} Th_SubCommand;
220 int Th_CallSubCommand(Th_Interp*,void*,int,const char**,int*,Th_SubCommand*);
221
222 /*
@@ -223,12 +232,13 @@
232 ** return value semantics.
233 */
234 int Th_output( Th_Interp *pInterp, char const * zData, int len );
235
236 /*
237 ** Th_output_f() implementation which sends its output to either
238 ** pState (which must be NULL or a (FILE*)) or stdout (if pState is
239 ** NULL).
240 */
241 int Th_output_f_FILE( char const * zData, int len, void * pState );
242
243
244 #ifdef TH_USE_SQLITE
245
--- src/th_lang.c
+++ src/th_lang.c
@@ -16,10 +16,22 @@
1616
1717
int Th_WrongNumArgs(Th_Interp *interp, const char *zMsg){
1818
Th_ErrorMessage(interp, "wrong # args: should be \"", zMsg, -1);
1919
return TH_ERROR;
2020
}
21
+
22
+int Th_WrongNumArgs2(Th_Interp *interp, const char *zCmdName,
23
+ int zCmdLen, const char *zMsg){
24
+ char * zBuf = 0;
25
+ int nBuf = 0;
26
+ Th_StringAppend(interp, &zBuf, &nBuf, zCmdName, zCmdLen);
27
+ Th_StringAppend(interp, &zBuf, &nBuf, ": wrong # args: expecting: ", -1);
28
+ Th_StringAppend(interp, &zBuf, &nBuf, zMsg, -1);
29
+ Th_ErrorMessage(interp, zBuf, NULL, 0);
30
+ Th_Free(interp, zBuf);
31
+ return TH_ERROR;
32
+}
2133
2234
/*
2335
** Syntax:
2436
**
2537
** catch script ?varname?
2638
--- src/th_lang.c
+++ src/th_lang.c
@@ -16,10 +16,22 @@
16
17 int Th_WrongNumArgs(Th_Interp *interp, const char *zMsg){
18 Th_ErrorMessage(interp, "wrong # args: should be \"", zMsg, -1);
19 return TH_ERROR;
20 }
 
 
 
 
 
 
 
 
 
 
 
 
21
22 /*
23 ** Syntax:
24 **
25 ** catch script ?varname?
26
--- src/th_lang.c
+++ src/th_lang.c
@@ -16,10 +16,22 @@
16
17 int Th_WrongNumArgs(Th_Interp *interp, const char *zMsg){
18 Th_ErrorMessage(interp, "wrong # args: should be \"", zMsg, -1);
19 return TH_ERROR;
20 }
21
22 int Th_WrongNumArgs2(Th_Interp *interp, const char *zCmdName,
23 int zCmdLen, const char *zMsg){
24 char * zBuf = 0;
25 int nBuf = 0;
26 Th_StringAppend(interp, &zBuf, &nBuf, zCmdName, zCmdLen);
27 Th_StringAppend(interp, &zBuf, &nBuf, ": wrong # args: expecting: ", -1);
28 Th_StringAppend(interp, &zBuf, &nBuf, zMsg, -1);
29 Th_ErrorMessage(interp, zBuf, NULL, 0);
30 Th_Free(interp, zBuf);
31 return TH_ERROR;
32 }
33
34 /*
35 ** Syntax:
36 **
37 ** catch script ?varname?
38
+108 -38
--- src/th_main.c
+++ src/th_main.c
@@ -43,13 +43,12 @@
4343
nOutstandingMalloc--;
4444
}
4545
free(p);
4646
}
4747
48
-
4948
static Th_Vtab vtab = { xMalloc, xFree, {
50
- Th_output_f_FILE,
49
+ NULL,
5150
NULL,
5251
1
5352
}
5453
};
5554
@@ -80,11 +79,13 @@
8079
int argc,
8180
const char **argv,
8281
int *argl
8382
){
8483
if( argc!=2 ){
85
- return Th_WrongNumArgs(interp, "enable_output BOOLEAN");
84
+ return Th_WrongNumArgs2(interp,
85
+ argv[0], argl[0],
86
+ "BOOLEAN");
8687
}else{
8788
int rc = Th_ToInt(interp, argv[1], argl[1], &enableOutput);
8889
vtab.out.enabled = enableOutput;
8990
return rc;
9091
}
@@ -138,11 +139,13 @@
138139
){
139140
PutsCmdData const * fmt = (PutsCmdData const *)pConvert;
140141
const int sepLen = fmt->sep ? strlen(fmt->sep) : 0;
141142
int i;
142143
if( argc<2 ){
143
- return Th_WrongNumArgs(interp, "puts STRING ...STRING_N");
144
+ return Th_WrongNumArgs2(interp,
145
+ argv[0], argl[0],
146
+ "STRING ...STRING_N");
144147
}
145148
for( i = 1; i < argc; ++i ){
146149
if(sepLen && (i>1)){
147150
sendText(interp, fmt->sep, sepLen, 0);
148151
}
@@ -165,11 +168,13 @@
165168
int argc,
166169
const char **argv,
167170
int *argl
168171
){
169172
if( argc!=2 ){
170
- return Th_WrongNumArgs(interp, "wiki STRING");
173
+ return Th_WrongNumArgs2(interp,
174
+ argv[0], argl[0],
175
+ "STRING");
171176
}
172177
if( enableOutput ){
173178
Blob src;
174179
blob_init(&src, (char*)argv[1], argl[1]);
175180
wiki_convert(&src, 0, WIKI_INLINE);
@@ -191,11 +196,13 @@
191196
const char **argv,
192197
int *argl
193198
){
194199
char *zOut;
195200
if( argc!=2 ){
196
- return Th_WrongNumArgs(interp, "htmlize STRING");
201
+ return Th_WrongNumArgs2(interp,
202
+ argv[0], argl[0],
203
+ "STRING");
197204
}
198205
zOut = htmlize((char*)argv[1], argl[1]);
199206
Th_SetResult(interp, zOut, -1);
200207
free(zOut);
201208
return TH_OK;
@@ -238,11 +245,13 @@
238245
const char **argv,
239246
int *argl
240247
){
241248
int rc;
242249
if( argc!=2 ){
243
- return Th_WrongNumArgs(interp, "hascap STRING");
250
+ return Th_WrongNumArgs2(interp,
251
+ argv[0], argl[0],
252
+ "STRING");
244253
}
245254
rc = login_has_capability((char*)argv[1],argl[1]);
246255
if( g.thTrace ){
247256
Th_Trace("[hascap %#h] => %d<br />\n", argl[1], argv[1], rc);
248257
}
@@ -269,11 +278,13 @@
269278
int *argl
270279
){
271280
int rc = 0;
272281
char const * zArg;
273282
if( argc!=2 ){
274
- return Th_WrongNumArgs(interp, "hasfeature STRING");
283
+ return Th_WrongNumArgs2(interp,
284
+ argv[0], argl[0],
285
+ "STRING");
275286
}
276287
zArg = (char const*)argv[1];
277288
if(NULL==zArg){
278289
/* placeholder for following ifdefs... */
279290
}
@@ -313,11 +324,13 @@
313324
int *argl
314325
){
315326
int rc = 0;
316327
int i;
317328
if( argc!=2 ){
318
- return Th_WrongNumArgs(interp, "anycap STRING");
329
+ return Th_WrongNumArgs2(interp,
330
+ argv[0], argl[0],
331
+ "STRING");
319332
}
320333
for(i=0; rc==0 && i<argl[1]; i++){
321334
rc = login_has_capability((char*)&argv[1][i],1);
322335
}
323336
if( g.thTrace ){
@@ -343,11 +356,13 @@
343356
int argc,
344357
const char **argv,
345358
int *argl
346359
){
347360
if( argc!=4 ){
348
- return Th_WrongNumArgs(interp, "combobox NAME TEXT-LIST NUMLINES");
361
+ return Th_WrongNumArgs2(interp,
362
+ argv[0], argl[0],
363
+ "NAME TEXT-LIST NUMLINES");
349364
}
350365
if( enableOutput ){
351366
int height;
352367
Blob name;
353368
int nValue;
@@ -401,11 +416,13 @@
401416
){
402417
const char *z;
403418
int size, n, i;
404419
int iMin, iMax;
405420
if( argc!=4 ){
406
- return Th_WrongNumArgs(interp, "linecount STRING MAX MIN");
421
+ return Th_WrongNumArgs2(interp,
422
+ argv[0], argl[0],
423
+ "STRING MAX MIN");
407424
}
408425
if( Th_ToInt(interp, argv[2], argl[2], &iMax) ) return TH_ERROR;
409426
if( Th_ToInt(interp, argv[3], argl[3], &iMin) ) return TH_ERROR;
410427
z = argv[1];
411428
size = argl[1];
@@ -436,11 +453,13 @@
436453
int *argl
437454
){
438455
int openRepository;
439456
440457
if( argc!=1 && argc!=2 ){
441
- return Th_WrongNumArgs(interp, "repository ?BOOLEAN?");
458
+ return Th_WrongNumArgs2(interp,
459
+ argv[0], argl[0],
460
+ "?BOOLEAN?");
442461
}
443462
if( argc==2 ){
444463
if( Th_ToInt(interp, argv[1], argl[1], &openRepository) ){
445464
return TH_ERROR;
446465
}
@@ -489,11 +508,13 @@
489508
int *argl
490509
){
491510
char const * zVal;
492511
int pos = 0;
493512
if( argc != 2 ){
494
- return Th_WrongNumArgs(interp, "argv_get Index");
513
+ return Th_WrongNumArgs2(interp,
514
+ argv[0], argl[0],
515
+ "Index");
495516
}
496517
if( TH_OK != Th_ToInt(interp, argv[1], argl[1], &pos) ){
497518
return TH_ERROR;
498519
}
499520
if( pos < 0 || pos >= g.argc ){
@@ -540,24 +561,29 @@
540561
char zShort[BufLen] = {0};
541562
char aBuf[BufLen] = {0};
542563
int hasArg;
543564
char const * zVal = NULL;
544565
char const * zDefault = NULL;
566
+ int check;
545567
if( 1 < argc ){
546568
assert( argl[1] < BufLen );
547
- snprintf( zLong, BufLen, "%s", argv[1] );
569
+ check = snprintf( zLong, BufLen, "%s", argv[1] );
570
+ assert( check <= BufLen );
548571
}
549572
if( (2 < argc) && (0 < argl[2]) ){
550573
assert( argl[2] < BufLen );
551
- snprintf( zShort, BufLen, "%s", argv[2] );
574
+ check = snprintf( zShort, BufLen, "%s", argv[2] );
575
+ assert( check <= BufLen );
552576
}
553577
if( 3 < argc){
554578
zDefault = argv[3];
555579
}
556580
557581
if(0 == zLong[0]){
558
- return Th_WrongNumArgs(interp, "argv_getstr longName ?shortName? ?defaultVal?");
582
+ return Th_WrongNumArgs2(interp,
583
+ argv[0], argl[0],
584
+ "longName ?shortName? ?defaultVal?");
559585
}
560586
zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 );
561587
if(!zVal){
562588
zVal = zDefault;
563589
if(!zVal){
@@ -593,24 +619,29 @@
593619
int hasArg;
594620
char const * zVal = NULL;
595621
char const * zDefault = NULL;
596622
int val;
597623
int rc;
624
+ int check;
598625
if( 1 < argc ){
599626
assert( argl[1] < BufLen );
600
- snprintf( zLong, BufLen, "%s", argv[1] );
627
+ check = snprintf( zLong, BufLen, "%s", argv[1] );
628
+ assert( check <= BufLen );
601629
}
602630
if( (2 < argc) && (0 < argl[2]) ){
603631
assert( argl[2] < BufLen );
604
- snprintf( zShort, BufLen, "%s", argv[2] );
632
+ check = snprintf( zShort, BufLen, "%s", argv[2] );
633
+ assert( check <= BufLen );
605634
}
606635
if( 3 < argc){
607636
zDefault = argv[3];
608637
}
609638
610639
if(0 == zLong[0]){
611
- return Th_WrongNumArgs(interp, "argv_getbool longName ?shortName? ?defaultVal?");
640
+ return Th_WrongNumArgs2(interp,
641
+ argv[0], argl[0],
642
+ "longName ?shortName? ?defaultVal?");
612643
}
613644
zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 );
614645
if(zVal && !*zVal){
615646
zVal = "1";
616647
}
@@ -647,24 +678,29 @@
647678
char aBuf[BufLen] = {0};
648679
int hasArg;
649680
char const * zVal = NULL;
650681
char const * zDefault = NULL;
651682
int val = 0;
683
+ int check;
652684
if( 1 < argc ){
653685
assert( argl[1] < BufLen );
654
- snprintf( zLong, BufLen, "%s", argv[1] );
686
+ check = snprintf( zLong, BufLen, "%s", argv[1] );
687
+ assert( check <= BufLen );
655688
}
656689
if( (2 < argc) && (0 < argl[2]) ){
657690
assert( argl[2] < BufLen );
658
- snprintf( zShort, BufLen, "%s", argv[2] );
691
+ check = snprintf( zShort, BufLen, "%s", argv[2] );
692
+ assert( check <= BufLen );
659693
}
660694
if( 3 < argc){
661695
zDefault = argv[3];
662696
}
663697
664698
if(0 == zLong[0]){
665
- return Th_WrongNumArgs(interp, "argv_getint longName ?shortName? ?defaultVal?");
699
+ return Th_WrongNumArgs2(interp,
700
+ argv[0], argl[0],
701
+ "longName ?shortName? ?defaultVal?");
666702
}
667703
zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 );
668704
if(!zVal){
669705
zVal = zDefault;
670706
if(!zVal){
@@ -697,11 +733,13 @@
697733
char const * zSql;
698734
sqlite3_stmt * pStmt = NULL;
699735
int rc;
700736
char const * errMsg = NULL;
701737
if( argc!=2 ){
702
- return Th_WrongNumArgs(interp, "query_prepare STRING");
738
+ return Th_WrongNumArgs2(interp,
739
+ argv[0], argl[0],
740
+ "STRING");
703741
}
704742
zSql = argv[1];
705743
rc = sqlite3_prepare( g.db, zSql, strlen(zSql), &pStmt, NULL );
706744
if(SQLITE_OK==rc){
707745
if(sqlite3_column_count( pStmt ) < 1){
@@ -768,11 +806,13 @@
768806
char * zSql;
769807
sqlite3_stmt * pStmt = NULL;
770808
int rc = 0;
771809
char const * arg;
772810
if( argc!=2 ){
773
- return Th_WrongNumArgs(interp, "query_finalize StmtHandle");
811
+ return Th_WrongNumArgs2(interp,
812
+ argv[0], argl[0],
813
+ "StmtHandle");
774814
}
775815
arg = argv[1];
776816
pStmt = queryStmtHandle(interp, arg, argl[1], &rc);
777817
if( rc < 1 ){
778818
return TH_ERROR;
@@ -814,15 +854,19 @@
814854
int * pIndex ){
815855
int index = 0;
816856
sqlite3_stmt * stmt;
817857
if( !pIndex ){
818858
if(argc<2){
819
- return Th_WrongNumArgs(interp, "StmtHandle");
859
+ return Th_WrongNumArgs2(interp,
860
+ argv[0], argl[0],
861
+ "StmtHandle");
820862
}
821863
}else{
822864
if( argc<3 ){
823
- return Th_WrongNumArgs(interp, "StmtHandle, Index");
865
+ return Th_WrongNumArgs2(interp,
866
+ argv[0], argl[0],
867
+ "StmtHandle Index");
824868
}
825869
if( 0 != Th_ToInt( interp, argv[2], argl[2], &index ) ){
826870
return TH_ERROR;
827871
}
828872
}
@@ -854,11 +898,13 @@
854898
int *argl
855899
){
856900
sqlite3_stmt * pStmt = NULL;
857901
int rc = 0;
858902
if( argc!=2 ){
859
- return Th_WrongNumArgs(interp, "query_step StmtHandle");
903
+ return Th_WrongNumArgs2(interp,
904
+ argv[0], argl[0],
905
+ "StmtHandle");
860906
}
861907
if(0 != queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, NULL)){
862908
return TH_ERROR;
863909
}
864910
assert(NULL != pStmt);
@@ -894,11 +940,13 @@
894940
sqlite3_stmt * pStmt = NULL;
895941
char const * val;
896942
int index = -1;
897943
int valLen;
898944
if( argc!=3 ){
899
- return Th_WrongNumArgs(interp, "query_col_string StmtHandle Index");
945
+ return Th_WrongNumArgs2(interp,
946
+ argv[0], argl[0],
947
+ "StmtHandle Index");
900948
}
901949
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
902950
if(index < 0){
903951
return TH_ERROR;
904952
}
@@ -924,11 +972,13 @@
924972
){
925973
sqlite3_stmt * pStmt = NULL;
926974
int rc = 0;
927975
int index = -1;
928976
if( argc!=3 ){
929
- return Th_WrongNumArgs(interp, "query_col_int StmtHandle Index");
977
+ return Th_WrongNumArgs2(interp,
978
+ argv[0], argl[0],
979
+ "StmtHandle Index");
930980
}
931981
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
932982
if(index < 0){
933983
return TH_ERROR;
934984
}
@@ -952,11 +1002,13 @@
9521002
){
9531003
sqlite3_stmt * pStmt = NULL;
9541004
double rc = 0;
9551005
int index = -1;
9561006
if( argc!=3 ){
957
- return Th_WrongNumArgs(interp, "query_col_double StmtHandle Index");
1007
+ return Th_WrongNumArgs2(interp,
1008
+ argv[0], argl[0],
1009
+ "StmtHandle Index");
9581010
}
9591011
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
9601012
if(index < 0){
9611013
return TH_ERROR;
9621014
}
@@ -981,11 +1033,13 @@
9811033
){
9821034
sqlite3_stmt * pStmt = NULL;
9831035
double rc = 0;
9841036
int index = -1;
9851037
if( argc!=3 ){
986
- return Th_WrongNumArgs(interp, "query_col_is_null StmtHandle Index");
1038
+ return Th_WrongNumArgs2(interp,
1039
+ argv[0], argl[0],
1040
+ "StmtHandle Index");
9871041
}
9881042
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
9891043
if(index < 0){
9901044
return TH_ERROR;
9911045
}
@@ -1013,11 +1067,13 @@
10131067
){
10141068
sqlite3_stmt * pStmt = NULL;
10151069
double rc = 0;
10161070
int index = -1;
10171071
if( argc!=3 ){
1018
- return Th_WrongNumArgs(interp, "query_col_type StmtHandle Index");
1072
+ return Th_WrongNumArgs2(interp,
1073
+ argv[0], argl[0],
1074
+ "StmtHandle Index");
10191075
}
10201076
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
10211077
if(index < 0){
10221078
return TH_ERROR;
10231079
}
@@ -1040,11 +1096,13 @@
10401096
int *argl
10411097
){
10421098
int rc;
10431099
sqlite3_stmt * pStmt = NULL;
10441100
if( argc!=2 ){
1045
- return Th_WrongNumArgs(interp, "query_col_count StmtHandle");
1101
+ return Th_WrongNumArgs2(interp,
1102
+ argv[0], argl[0],
1103
+ "StmtHandle");
10461104
}
10471105
pStmt = queryStmtHandle(interp, argv[1], argl[1], NULL);
10481106
if( NULL == pStmt ){
10491107
return TH_ERROR;
10501108
}
@@ -1071,11 +1129,13 @@
10711129
char const * val;
10721130
int index;
10731131
int rc = 0;
10741132
int valLen;
10751133
if( argc!=3 ){
1076
- return Th_WrongNumArgs(interp, "query_col_name StmtHandle Index");
1134
+ return Th_WrongNumArgs2(interp,
1135
+ argv[0], argl[0],
1136
+ "StmtHandle Index");
10771137
}
10781138
pStmt = queryStmtHandle(interp, argv[1], argl[1], &rc);
10791139
if( rc < 1 ){
10801140
return TH_ERROR;
10811141
}
@@ -1108,11 +1168,13 @@
11081168
){
11091169
sqlite3_stmt * pStmt = NULL;
11101170
int rc;
11111171
int index = 0;
11121172
if( argc!=3 ){
1113
- return Th_WrongNumArgs(interp, "query_bind_null StmtHandle Index");
1173
+ return Th_WrongNumArgs2(interp,
1174
+ argv[0], argl[0],
1175
+ "StmtHandle Index");
11141176
}
11151177
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
11161178
if(index < 1){
11171179
return TH_ERROR;
11181180
}
@@ -1141,11 +1203,13 @@
11411203
){
11421204
sqlite3_stmt * pStmt = NULL;
11431205
int rc;
11441206
int index = 0;
11451207
if( argc!=4 ){
1146
- return Th_WrongNumArgs(interp, "query_bind_string StmtHandle Index val");
1208
+ return Th_WrongNumArgs2(interp,
1209
+ argv[0], argl[0],
1210
+ "StmtHandle Index Value");
11471211
}
11481212
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
11491213
if(index < 1){
11501214
return TH_ERROR;
11511215
}
@@ -1174,11 +1238,13 @@
11741238
sqlite3_stmt * pStmt = NULL;
11751239
int rc;
11761240
int val;
11771241
int index = 0;
11781242
if( argc!=4 ){
1179
- return Th_WrongNumArgs(interp, "query_bind_int StmtHandle Index val");
1243
+ return Th_WrongNumArgs2(interp,
1244
+ argv[0], argl[0],
1245
+ "StmtHandle Index Value");
11801246
}
11811247
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
11821248
if(index < 1){
11831249
return TH_ERROR;
11841250
}
@@ -1211,11 +1277,13 @@
12111277
sqlite3_stmt * pStmt = NULL;
12121278
int rc;
12131279
double val;
12141280
int index = 0;
12151281
if( argc!=4 ){
1216
- return Th_WrongNumArgs(interp, "query_bind_double StmtHandle Index val");
1282
+ return Th_WrongNumArgs2(interp,
1283
+ argv[0], argl[0],
1284
+ "StmtHandle Index Value");
12171285
}
12181286
queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
12191287
if(index < 1){
12201288
return TH_ERROR;
12211289
}
@@ -1231,10 +1299,12 @@
12311299
return TH_OK;
12321300
}
12331301
12341302
#endif
12351303
/* end TH_USE_SQLITE */
1304
+
1305
+
12361306
12371307
/*
12381308
** Make sure the interpreter has been initialized. Initialize it if
12391309
** it has not been already.
12401310
**
12411311
--- src/th_main.c
+++ src/th_main.c
@@ -43,13 +43,12 @@
43 nOutstandingMalloc--;
44 }
45 free(p);
46 }
47
48
49 static Th_Vtab vtab = { xMalloc, xFree, {
50 Th_output_f_FILE,
51 NULL,
52 1
53 }
54 };
55
@@ -80,11 +79,13 @@
80 int argc,
81 const char **argv,
82 int *argl
83 ){
84 if( argc!=2 ){
85 return Th_WrongNumArgs(interp, "enable_output BOOLEAN");
 
 
86 }else{
87 int rc = Th_ToInt(interp, argv[1], argl[1], &enableOutput);
88 vtab.out.enabled = enableOutput;
89 return rc;
90 }
@@ -138,11 +139,13 @@
138 ){
139 PutsCmdData const * fmt = (PutsCmdData const *)pConvert;
140 const int sepLen = fmt->sep ? strlen(fmt->sep) : 0;
141 int i;
142 if( argc<2 ){
143 return Th_WrongNumArgs(interp, "puts STRING ...STRING_N");
 
 
144 }
145 for( i = 1; i < argc; ++i ){
146 if(sepLen && (i>1)){
147 sendText(interp, fmt->sep, sepLen, 0);
148 }
@@ -165,11 +168,13 @@
165 int argc,
166 const char **argv,
167 int *argl
168 ){
169 if( argc!=2 ){
170 return Th_WrongNumArgs(interp, "wiki STRING");
 
 
171 }
172 if( enableOutput ){
173 Blob src;
174 blob_init(&src, (char*)argv[1], argl[1]);
175 wiki_convert(&src, 0, WIKI_INLINE);
@@ -191,11 +196,13 @@
191 const char **argv,
192 int *argl
193 ){
194 char *zOut;
195 if( argc!=2 ){
196 return Th_WrongNumArgs(interp, "htmlize STRING");
 
 
197 }
198 zOut = htmlize((char*)argv[1], argl[1]);
199 Th_SetResult(interp, zOut, -1);
200 free(zOut);
201 return TH_OK;
@@ -238,11 +245,13 @@
238 const char **argv,
239 int *argl
240 ){
241 int rc;
242 if( argc!=2 ){
243 return Th_WrongNumArgs(interp, "hascap STRING");
 
 
244 }
245 rc = login_has_capability((char*)argv[1],argl[1]);
246 if( g.thTrace ){
247 Th_Trace("[hascap %#h] => %d<br />\n", argl[1], argv[1], rc);
248 }
@@ -269,11 +278,13 @@
269 int *argl
270 ){
271 int rc = 0;
272 char const * zArg;
273 if( argc!=2 ){
274 return Th_WrongNumArgs(interp, "hasfeature STRING");
 
 
275 }
276 zArg = (char const*)argv[1];
277 if(NULL==zArg){
278 /* placeholder for following ifdefs... */
279 }
@@ -313,11 +324,13 @@
313 int *argl
314 ){
315 int rc = 0;
316 int i;
317 if( argc!=2 ){
318 return Th_WrongNumArgs(interp, "anycap STRING");
 
 
319 }
320 for(i=0; rc==0 && i<argl[1]; i++){
321 rc = login_has_capability((char*)&argv[1][i],1);
322 }
323 if( g.thTrace ){
@@ -343,11 +356,13 @@
343 int argc,
344 const char **argv,
345 int *argl
346 ){
347 if( argc!=4 ){
348 return Th_WrongNumArgs(interp, "combobox NAME TEXT-LIST NUMLINES");
 
 
349 }
350 if( enableOutput ){
351 int height;
352 Blob name;
353 int nValue;
@@ -401,11 +416,13 @@
401 ){
402 const char *z;
403 int size, n, i;
404 int iMin, iMax;
405 if( argc!=4 ){
406 return Th_WrongNumArgs(interp, "linecount STRING MAX MIN");
 
 
407 }
408 if( Th_ToInt(interp, argv[2], argl[2], &iMax) ) return TH_ERROR;
409 if( Th_ToInt(interp, argv[3], argl[3], &iMin) ) return TH_ERROR;
410 z = argv[1];
411 size = argl[1];
@@ -436,11 +453,13 @@
436 int *argl
437 ){
438 int openRepository;
439
440 if( argc!=1 && argc!=2 ){
441 return Th_WrongNumArgs(interp, "repository ?BOOLEAN?");
 
 
442 }
443 if( argc==2 ){
444 if( Th_ToInt(interp, argv[1], argl[1], &openRepository) ){
445 return TH_ERROR;
446 }
@@ -489,11 +508,13 @@
489 int *argl
490 ){
491 char const * zVal;
492 int pos = 0;
493 if( argc != 2 ){
494 return Th_WrongNumArgs(interp, "argv_get Index");
 
 
495 }
496 if( TH_OK != Th_ToInt(interp, argv[1], argl[1], &pos) ){
497 return TH_ERROR;
498 }
499 if( pos < 0 || pos >= g.argc ){
@@ -540,24 +561,29 @@
540 char zShort[BufLen] = {0};
541 char aBuf[BufLen] = {0};
542 int hasArg;
543 char const * zVal = NULL;
544 char const * zDefault = NULL;
 
545 if( 1 < argc ){
546 assert( argl[1] < BufLen );
547 snprintf( zLong, BufLen, "%s", argv[1] );
 
548 }
549 if( (2 < argc) && (0 < argl[2]) ){
550 assert( argl[2] < BufLen );
551 snprintf( zShort, BufLen, "%s", argv[2] );
 
552 }
553 if( 3 < argc){
554 zDefault = argv[3];
555 }
556
557 if(0 == zLong[0]){
558 return Th_WrongNumArgs(interp, "argv_getstr longName ?shortName? ?defaultVal?");
 
 
559 }
560 zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 );
561 if(!zVal){
562 zVal = zDefault;
563 if(!zVal){
@@ -593,24 +619,29 @@
593 int hasArg;
594 char const * zVal = NULL;
595 char const * zDefault = NULL;
596 int val;
597 int rc;
 
598 if( 1 < argc ){
599 assert( argl[1] < BufLen );
600 snprintf( zLong, BufLen, "%s", argv[1] );
 
601 }
602 if( (2 < argc) && (0 < argl[2]) ){
603 assert( argl[2] < BufLen );
604 snprintf( zShort, BufLen, "%s", argv[2] );
 
605 }
606 if( 3 < argc){
607 zDefault = argv[3];
608 }
609
610 if(0 == zLong[0]){
611 return Th_WrongNumArgs(interp, "argv_getbool longName ?shortName? ?defaultVal?");
 
 
612 }
613 zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 );
614 if(zVal && !*zVal){
615 zVal = "1";
616 }
@@ -647,24 +678,29 @@
647 char aBuf[BufLen] = {0};
648 int hasArg;
649 char const * zVal = NULL;
650 char const * zDefault = NULL;
651 int val = 0;
 
652 if( 1 < argc ){
653 assert( argl[1] < BufLen );
654 snprintf( zLong, BufLen, "%s", argv[1] );
 
655 }
656 if( (2 < argc) && (0 < argl[2]) ){
657 assert( argl[2] < BufLen );
658 snprintf( zShort, BufLen, "%s", argv[2] );
 
659 }
660 if( 3 < argc){
661 zDefault = argv[3];
662 }
663
664 if(0 == zLong[0]){
665 return Th_WrongNumArgs(interp, "argv_getint longName ?shortName? ?defaultVal?");
 
 
666 }
667 zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 );
668 if(!zVal){
669 zVal = zDefault;
670 if(!zVal){
@@ -697,11 +733,13 @@
697 char const * zSql;
698 sqlite3_stmt * pStmt = NULL;
699 int rc;
700 char const * errMsg = NULL;
701 if( argc!=2 ){
702 return Th_WrongNumArgs(interp, "query_prepare STRING");
 
 
703 }
704 zSql = argv[1];
705 rc = sqlite3_prepare( g.db, zSql, strlen(zSql), &pStmt, NULL );
706 if(SQLITE_OK==rc){
707 if(sqlite3_column_count( pStmt ) < 1){
@@ -768,11 +806,13 @@
768 char * zSql;
769 sqlite3_stmt * pStmt = NULL;
770 int rc = 0;
771 char const * arg;
772 if( argc!=2 ){
773 return Th_WrongNumArgs(interp, "query_finalize StmtHandle");
 
 
774 }
775 arg = argv[1];
776 pStmt = queryStmtHandle(interp, arg, argl[1], &rc);
777 if( rc < 1 ){
778 return TH_ERROR;
@@ -814,15 +854,19 @@
814 int * pIndex ){
815 int index = 0;
816 sqlite3_stmt * stmt;
817 if( !pIndex ){
818 if(argc<2){
819 return Th_WrongNumArgs(interp, "StmtHandle");
 
 
820 }
821 }else{
822 if( argc<3 ){
823 return Th_WrongNumArgs(interp, "StmtHandle, Index");
 
 
824 }
825 if( 0 != Th_ToInt( interp, argv[2], argl[2], &index ) ){
826 return TH_ERROR;
827 }
828 }
@@ -854,11 +898,13 @@
854 int *argl
855 ){
856 sqlite3_stmt * pStmt = NULL;
857 int rc = 0;
858 if( argc!=2 ){
859 return Th_WrongNumArgs(interp, "query_step StmtHandle");
 
 
860 }
861 if(0 != queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, NULL)){
862 return TH_ERROR;
863 }
864 assert(NULL != pStmt);
@@ -894,11 +940,13 @@
894 sqlite3_stmt * pStmt = NULL;
895 char const * val;
896 int index = -1;
897 int valLen;
898 if( argc!=3 ){
899 return Th_WrongNumArgs(interp, "query_col_string StmtHandle Index");
 
 
900 }
901 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
902 if(index < 0){
903 return TH_ERROR;
904 }
@@ -924,11 +972,13 @@
924 ){
925 sqlite3_stmt * pStmt = NULL;
926 int rc = 0;
927 int index = -1;
928 if( argc!=3 ){
929 return Th_WrongNumArgs(interp, "query_col_int StmtHandle Index");
 
 
930 }
931 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
932 if(index < 0){
933 return TH_ERROR;
934 }
@@ -952,11 +1002,13 @@
952 ){
953 sqlite3_stmt * pStmt = NULL;
954 double rc = 0;
955 int index = -1;
956 if( argc!=3 ){
957 return Th_WrongNumArgs(interp, "query_col_double StmtHandle Index");
 
 
958 }
959 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
960 if(index < 0){
961 return TH_ERROR;
962 }
@@ -981,11 +1033,13 @@
981 ){
982 sqlite3_stmt * pStmt = NULL;
983 double rc = 0;
984 int index = -1;
985 if( argc!=3 ){
986 return Th_WrongNumArgs(interp, "query_col_is_null StmtHandle Index");
 
 
987 }
988 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
989 if(index < 0){
990 return TH_ERROR;
991 }
@@ -1013,11 +1067,13 @@
1013 ){
1014 sqlite3_stmt * pStmt = NULL;
1015 double rc = 0;
1016 int index = -1;
1017 if( argc!=3 ){
1018 return Th_WrongNumArgs(interp, "query_col_type StmtHandle Index");
 
 
1019 }
1020 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1021 if(index < 0){
1022 return TH_ERROR;
1023 }
@@ -1040,11 +1096,13 @@
1040 int *argl
1041 ){
1042 int rc;
1043 sqlite3_stmt * pStmt = NULL;
1044 if( argc!=2 ){
1045 return Th_WrongNumArgs(interp, "query_col_count StmtHandle");
 
 
1046 }
1047 pStmt = queryStmtHandle(interp, argv[1], argl[1], NULL);
1048 if( NULL == pStmt ){
1049 return TH_ERROR;
1050 }
@@ -1071,11 +1129,13 @@
1071 char const * val;
1072 int index;
1073 int rc = 0;
1074 int valLen;
1075 if( argc!=3 ){
1076 return Th_WrongNumArgs(interp, "query_col_name StmtHandle Index");
 
 
1077 }
1078 pStmt = queryStmtHandle(interp, argv[1], argl[1], &rc);
1079 if( rc < 1 ){
1080 return TH_ERROR;
1081 }
@@ -1108,11 +1168,13 @@
1108 ){
1109 sqlite3_stmt * pStmt = NULL;
1110 int rc;
1111 int index = 0;
1112 if( argc!=3 ){
1113 return Th_WrongNumArgs(interp, "query_bind_null StmtHandle Index");
 
 
1114 }
1115 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1116 if(index < 1){
1117 return TH_ERROR;
1118 }
@@ -1141,11 +1203,13 @@
1141 ){
1142 sqlite3_stmt * pStmt = NULL;
1143 int rc;
1144 int index = 0;
1145 if( argc!=4 ){
1146 return Th_WrongNumArgs(interp, "query_bind_string StmtHandle Index val");
 
 
1147 }
1148 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1149 if(index < 1){
1150 return TH_ERROR;
1151 }
@@ -1174,11 +1238,13 @@
1174 sqlite3_stmt * pStmt = NULL;
1175 int rc;
1176 int val;
1177 int index = 0;
1178 if( argc!=4 ){
1179 return Th_WrongNumArgs(interp, "query_bind_int StmtHandle Index val");
 
 
1180 }
1181 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1182 if(index < 1){
1183 return TH_ERROR;
1184 }
@@ -1211,11 +1277,13 @@
1211 sqlite3_stmt * pStmt = NULL;
1212 int rc;
1213 double val;
1214 int index = 0;
1215 if( argc!=4 ){
1216 return Th_WrongNumArgs(interp, "query_bind_double StmtHandle Index val");
 
 
1217 }
1218 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1219 if(index < 1){
1220 return TH_ERROR;
1221 }
@@ -1231,10 +1299,12 @@
1231 return TH_OK;
1232 }
1233
1234 #endif
1235 /* end TH_USE_SQLITE */
 
 
1236
1237 /*
1238 ** Make sure the interpreter has been initialized. Initialize it if
1239 ** it has not been already.
1240 **
1241
--- src/th_main.c
+++ src/th_main.c
@@ -43,13 +43,12 @@
43 nOutstandingMalloc--;
44 }
45 free(p);
46 }
47
 
48 static Th_Vtab vtab = { xMalloc, xFree, {
49 NULL,
50 NULL,
51 1
52 }
53 };
54
@@ -80,11 +79,13 @@
79 int argc,
80 const char **argv,
81 int *argl
82 ){
83 if( argc!=2 ){
84 return Th_WrongNumArgs2(interp,
85 argv[0], argl[0],
86 "BOOLEAN");
87 }else{
88 int rc = Th_ToInt(interp, argv[1], argl[1], &enableOutput);
89 vtab.out.enabled = enableOutput;
90 return rc;
91 }
@@ -138,11 +139,13 @@
139 ){
140 PutsCmdData const * fmt = (PutsCmdData const *)pConvert;
141 const int sepLen = fmt->sep ? strlen(fmt->sep) : 0;
142 int i;
143 if( argc<2 ){
144 return Th_WrongNumArgs2(interp,
145 argv[0], argl[0],
146 "STRING ...STRING_N");
147 }
148 for( i = 1; i < argc; ++i ){
149 if(sepLen && (i>1)){
150 sendText(interp, fmt->sep, sepLen, 0);
151 }
@@ -165,11 +168,13 @@
168 int argc,
169 const char **argv,
170 int *argl
171 ){
172 if( argc!=2 ){
173 return Th_WrongNumArgs2(interp,
174 argv[0], argl[0],
175 "STRING");
176 }
177 if( enableOutput ){
178 Blob src;
179 blob_init(&src, (char*)argv[1], argl[1]);
180 wiki_convert(&src, 0, WIKI_INLINE);
@@ -191,11 +196,13 @@
196 const char **argv,
197 int *argl
198 ){
199 char *zOut;
200 if( argc!=2 ){
201 return Th_WrongNumArgs2(interp,
202 argv[0], argl[0],
203 "STRING");
204 }
205 zOut = htmlize((char*)argv[1], argl[1]);
206 Th_SetResult(interp, zOut, -1);
207 free(zOut);
208 return TH_OK;
@@ -238,11 +245,13 @@
245 const char **argv,
246 int *argl
247 ){
248 int rc;
249 if( argc!=2 ){
250 return Th_WrongNumArgs2(interp,
251 argv[0], argl[0],
252 "STRING");
253 }
254 rc = login_has_capability((char*)argv[1],argl[1]);
255 if( g.thTrace ){
256 Th_Trace("[hascap %#h] => %d<br />\n", argl[1], argv[1], rc);
257 }
@@ -269,11 +278,13 @@
278 int *argl
279 ){
280 int rc = 0;
281 char const * zArg;
282 if( argc!=2 ){
283 return Th_WrongNumArgs2(interp,
284 argv[0], argl[0],
285 "STRING");
286 }
287 zArg = (char const*)argv[1];
288 if(NULL==zArg){
289 /* placeholder for following ifdefs... */
290 }
@@ -313,11 +324,13 @@
324 int *argl
325 ){
326 int rc = 0;
327 int i;
328 if( argc!=2 ){
329 return Th_WrongNumArgs2(interp,
330 argv[0], argl[0],
331 "STRING");
332 }
333 for(i=0; rc==0 && i<argl[1]; i++){
334 rc = login_has_capability((char*)&argv[1][i],1);
335 }
336 if( g.thTrace ){
@@ -343,11 +356,13 @@
356 int argc,
357 const char **argv,
358 int *argl
359 ){
360 if( argc!=4 ){
361 return Th_WrongNumArgs2(interp,
362 argv[0], argl[0],
363 "NAME TEXT-LIST NUMLINES");
364 }
365 if( enableOutput ){
366 int height;
367 Blob name;
368 int nValue;
@@ -401,11 +416,13 @@
416 ){
417 const char *z;
418 int size, n, i;
419 int iMin, iMax;
420 if( argc!=4 ){
421 return Th_WrongNumArgs2(interp,
422 argv[0], argl[0],
423 "STRING MAX MIN");
424 }
425 if( Th_ToInt(interp, argv[2], argl[2], &iMax) ) return TH_ERROR;
426 if( Th_ToInt(interp, argv[3], argl[3], &iMin) ) return TH_ERROR;
427 z = argv[1];
428 size = argl[1];
@@ -436,11 +453,13 @@
453 int *argl
454 ){
455 int openRepository;
456
457 if( argc!=1 && argc!=2 ){
458 return Th_WrongNumArgs2(interp,
459 argv[0], argl[0],
460 "?BOOLEAN?");
461 }
462 if( argc==2 ){
463 if( Th_ToInt(interp, argv[1], argl[1], &openRepository) ){
464 return TH_ERROR;
465 }
@@ -489,11 +508,13 @@
508 int *argl
509 ){
510 char const * zVal;
511 int pos = 0;
512 if( argc != 2 ){
513 return Th_WrongNumArgs2(interp,
514 argv[0], argl[0],
515 "Index");
516 }
517 if( TH_OK != Th_ToInt(interp, argv[1], argl[1], &pos) ){
518 return TH_ERROR;
519 }
520 if( pos < 0 || pos >= g.argc ){
@@ -540,24 +561,29 @@
561 char zShort[BufLen] = {0};
562 char aBuf[BufLen] = {0};
563 int hasArg;
564 char const * zVal = NULL;
565 char const * zDefault = NULL;
566 int check;
567 if( 1 < argc ){
568 assert( argl[1] < BufLen );
569 check = snprintf( zLong, BufLen, "%s", argv[1] );
570 assert( check <= BufLen );
571 }
572 if( (2 < argc) && (0 < argl[2]) ){
573 assert( argl[2] < BufLen );
574 check = snprintf( zShort, BufLen, "%s", argv[2] );
575 assert( check <= BufLen );
576 }
577 if( 3 < argc){
578 zDefault = argv[3];
579 }
580
581 if(0 == zLong[0]){
582 return Th_WrongNumArgs2(interp,
583 argv[0], argl[0],
584 "longName ?shortName? ?defaultVal?");
585 }
586 zVal = find_option( zLong, zShort[0] ? zShort : NULL, 1 );
587 if(!zVal){
588 zVal = zDefault;
589 if(!zVal){
@@ -593,24 +619,29 @@
619 int hasArg;
620 char const * zVal = NULL;
621 char const * zDefault = NULL;
622 int val;
623 int rc;
624 int check;
625 if( 1 < argc ){
626 assert( argl[1] < BufLen );
627 check = snprintf( zLong, BufLen, "%s", argv[1] );
628 assert( check <= BufLen );
629 }
630 if( (2 < argc) && (0 < argl[2]) ){
631 assert( argl[2] < BufLen );
632 check = snprintf( zShort, BufLen, "%s", argv[2] );
633 assert( check <= BufLen );
634 }
635 if( 3 < argc){
636 zDefault = argv[3];
637 }
638
639 if(0 == zLong[0]){
640 return Th_WrongNumArgs2(interp,
641 argv[0], argl[0],
642 "longName ?shortName? ?defaultVal?");
643 }
644 zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 );
645 if(zVal && !*zVal){
646 zVal = "1";
647 }
@@ -647,24 +678,29 @@
678 char aBuf[BufLen] = {0};
679 int hasArg;
680 char const * zVal = NULL;
681 char const * zDefault = NULL;
682 int val = 0;
683 int check;
684 if( 1 < argc ){
685 assert( argl[1] < BufLen );
686 check = snprintf( zLong, BufLen, "%s", argv[1] );
687 assert( check <= BufLen );
688 }
689 if( (2 < argc) && (0 < argl[2]) ){
690 assert( argl[2] < BufLen );
691 check = snprintf( zShort, BufLen, "%s", argv[2] );
692 assert( check <= BufLen );
693 }
694 if( 3 < argc){
695 zDefault = argv[3];
696 }
697
698 if(0 == zLong[0]){
699 return Th_WrongNumArgs2(interp,
700 argv[0], argl[0],
701 "longName ?shortName? ?defaultVal?");
702 }
703 zVal = find_option( zLong, zShort[0] ? zShort : NULL, 0 );
704 if(!zVal){
705 zVal = zDefault;
706 if(!zVal){
@@ -697,11 +733,13 @@
733 char const * zSql;
734 sqlite3_stmt * pStmt = NULL;
735 int rc;
736 char const * errMsg = NULL;
737 if( argc!=2 ){
738 return Th_WrongNumArgs2(interp,
739 argv[0], argl[0],
740 "STRING");
741 }
742 zSql = argv[1];
743 rc = sqlite3_prepare( g.db, zSql, strlen(zSql), &pStmt, NULL );
744 if(SQLITE_OK==rc){
745 if(sqlite3_column_count( pStmt ) < 1){
@@ -768,11 +806,13 @@
806 char * zSql;
807 sqlite3_stmt * pStmt = NULL;
808 int rc = 0;
809 char const * arg;
810 if( argc!=2 ){
811 return Th_WrongNumArgs2(interp,
812 argv[0], argl[0],
813 "StmtHandle");
814 }
815 arg = argv[1];
816 pStmt = queryStmtHandle(interp, arg, argl[1], &rc);
817 if( rc < 1 ){
818 return TH_ERROR;
@@ -814,15 +854,19 @@
854 int * pIndex ){
855 int index = 0;
856 sqlite3_stmt * stmt;
857 if( !pIndex ){
858 if(argc<2){
859 return Th_WrongNumArgs2(interp,
860 argv[0], argl[0],
861 "StmtHandle");
862 }
863 }else{
864 if( argc<3 ){
865 return Th_WrongNumArgs2(interp,
866 argv[0], argl[0],
867 "StmtHandle Index");
868 }
869 if( 0 != Th_ToInt( interp, argv[2], argl[2], &index ) ){
870 return TH_ERROR;
871 }
872 }
@@ -854,11 +898,13 @@
898 int *argl
899 ){
900 sqlite3_stmt * pStmt = NULL;
901 int rc = 0;
902 if( argc!=2 ){
903 return Th_WrongNumArgs2(interp,
904 argv[0], argl[0],
905 "StmtHandle");
906 }
907 if(0 != queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, NULL)){
908 return TH_ERROR;
909 }
910 assert(NULL != pStmt);
@@ -894,11 +940,13 @@
940 sqlite3_stmt * pStmt = NULL;
941 char const * val;
942 int index = -1;
943 int valLen;
944 if( argc!=3 ){
945 return Th_WrongNumArgs2(interp,
946 argv[0], argl[0],
947 "StmtHandle Index");
948 }
949 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
950 if(index < 0){
951 return TH_ERROR;
952 }
@@ -924,11 +972,13 @@
972 ){
973 sqlite3_stmt * pStmt = NULL;
974 int rc = 0;
975 int index = -1;
976 if( argc!=3 ){
977 return Th_WrongNumArgs2(interp,
978 argv[0], argl[0],
979 "StmtHandle Index");
980 }
981 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
982 if(index < 0){
983 return TH_ERROR;
984 }
@@ -952,11 +1002,13 @@
1002 ){
1003 sqlite3_stmt * pStmt = NULL;
1004 double rc = 0;
1005 int index = -1;
1006 if( argc!=3 ){
1007 return Th_WrongNumArgs2(interp,
1008 argv[0], argl[0],
1009 "StmtHandle Index");
1010 }
1011 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1012 if(index < 0){
1013 return TH_ERROR;
1014 }
@@ -981,11 +1033,13 @@
1033 ){
1034 sqlite3_stmt * pStmt = NULL;
1035 double rc = 0;
1036 int index = -1;
1037 if( argc!=3 ){
1038 return Th_WrongNumArgs2(interp,
1039 argv[0], argl[0],
1040 "StmtHandle Index");
1041 }
1042 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1043 if(index < 0){
1044 return TH_ERROR;
1045 }
@@ -1013,11 +1067,13 @@
1067 ){
1068 sqlite3_stmt * pStmt = NULL;
1069 double rc = 0;
1070 int index = -1;
1071 if( argc!=3 ){
1072 return Th_WrongNumArgs2(interp,
1073 argv[0], argl[0],
1074 "StmtHandle Index");
1075 }
1076 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1077 if(index < 0){
1078 return TH_ERROR;
1079 }
@@ -1040,11 +1096,13 @@
1096 int *argl
1097 ){
1098 int rc;
1099 sqlite3_stmt * pStmt = NULL;
1100 if( argc!=2 ){
1101 return Th_WrongNumArgs2(interp,
1102 argv[0], argl[0],
1103 "StmtHandle");
1104 }
1105 pStmt = queryStmtHandle(interp, argv[1], argl[1], NULL);
1106 if( NULL == pStmt ){
1107 return TH_ERROR;
1108 }
@@ -1071,11 +1129,13 @@
1129 char const * val;
1130 int index;
1131 int rc = 0;
1132 int valLen;
1133 if( argc!=3 ){
1134 return Th_WrongNumArgs2(interp,
1135 argv[0], argl[0],
1136 "StmtHandle Index");
1137 }
1138 pStmt = queryStmtHandle(interp, argv[1], argl[1], &rc);
1139 if( rc < 1 ){
1140 return TH_ERROR;
1141 }
@@ -1108,11 +1168,13 @@
1168 ){
1169 sqlite3_stmt * pStmt = NULL;
1170 int rc;
1171 int index = 0;
1172 if( argc!=3 ){
1173 return Th_WrongNumArgs2(interp,
1174 argv[0], argl[0],
1175 "StmtHandle Index");
1176 }
1177 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1178 if(index < 1){
1179 return TH_ERROR;
1180 }
@@ -1141,11 +1203,13 @@
1203 ){
1204 sqlite3_stmt * pStmt = NULL;
1205 int rc;
1206 int index = 0;
1207 if( argc!=4 ){
1208 return Th_WrongNumArgs2(interp,
1209 argv[0], argl[0],
1210 "StmtHandle Index Value");
1211 }
1212 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1213 if(index < 1){
1214 return TH_ERROR;
1215 }
@@ -1174,11 +1238,13 @@
1238 sqlite3_stmt * pStmt = NULL;
1239 int rc;
1240 int val;
1241 int index = 0;
1242 if( argc!=4 ){
1243 return Th_WrongNumArgs2(interp,
1244 argv[0], argl[0],
1245 "StmtHandle Index Value");
1246 }
1247 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1248 if(index < 1){
1249 return TH_ERROR;
1250 }
@@ -1211,11 +1277,13 @@
1277 sqlite3_stmt * pStmt = NULL;
1278 int rc;
1279 double val;
1280 int index = 0;
1281 if( argc!=4 ){
1282 return Th_WrongNumArgs2(interp,
1283 argv[0], argl[0],
1284 "StmtHandle Index Value");
1285 }
1286 queryStmtIndexArgs(interp, argc, argv, argl, &pStmt, &index);
1287 if(index < 1){
1288 return TH_ERROR;
1289 }
@@ -1231,10 +1299,12 @@
1299 return TH_OK;
1300 }
1301
1302 #endif
1303 /* end TH_USE_SQLITE */
1304
1305
1306
1307 /*
1308 ** Make sure the interpreter has been initialized. Initialize it if
1309 ** it has not been already.
1310 **
1311

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button