static void tvfsExecTcl( Testvfs p, string zMethod, Tcl_Obj arg1, Tcl_Obj arg2, Tcl_Obj arg3 ){ int rc; /* Return code from Tcl_EvalObj() */ Tcl_Obj pEval; Debug.Assert( p.pScript!=null ); Debug.Assert( zMethod != null ); Debug.Assert( p != null ); Debug.Assert( arg2 == null || arg1 != null ); Debug.Assert( arg3 == null || arg2 != null ); pEval = TCL.Tcl_DuplicateObj(p.pScript); TCL.Tcl_IncrRefCount(p.pScript); TCL.Tcl_ListObjAppendElement( p.interp, pEval, TCL.Tcl_NewStringObj( zMethod, -1 ) ); if ( arg1!=null ) TCL.Tcl_ListObjAppendElement( p.interp, pEval, arg1 ); if ( arg2 !=null ) TCL.Tcl_ListObjAppendElement( p.interp, pEval, arg2 ); if ( arg3 != null ) TCL.Tcl_ListObjAppendElement( p.interp, pEval, arg3 ); rc = TCL.Tcl_EvalObjEx(p.interp, pEval, TCL.TCL_EVAL_GLOBAL); if ( rc != TCL.TCL_OK ) { TCL.Tcl_BackgroundError( p.interp ); TCL.Tcl_ResetResult( p.interp ); } }
static int tvfsInjectCantopenerr(Testvfs p){ return tvfsInjectFault(p.cantopen_err); }
static int tvfsInjectIoerr(Testvfs p){ return tvfsInjectFault(p.ioerr_err); }
static int tvfsInjectFullerr(Testvfs p){ return tvfsInjectFault(p.full_err); }
static int tvfsResultCode(Testvfs p, ref int pRc){ errcode[] aCode = new errcode[] { new errcode( SQLITE_OK, "SQLITE_OK" ), new errcode( SQLITE_ERROR, "SQLITE_ERROR" ), new errcode( SQLITE_IOERR, "SQLITE_IOERR" ), new errcode( SQLITE_LOCKED, "SQLITE_LOCKED" ), new errcode( SQLITE_BUSY, "SQLITE_BUSY" ) }; string z; int i; z = TCL.Tcl_GetStringResult(p.interp); for(i=0; i<ArraySize(aCode); i++){ if ( 0 == z.CompareTo( aCode[i].zCode ) ) { pRc = aCode[i].eCode; return 1; } } return 0; }