/* Methods for the fuzzer module */ static int fuzzerConnect( sqlite3 db, object pAux, int argc, string[] argv, out sqlite3_vtab ppVtab, out string pzErr ) { fuzzer_vtab pNew; int n; if (!argv[1].StartsWith("temp", StringComparison.CurrentCultureIgnoreCase)) { pzErr = sqlite3_mprintf("%s virtual tables must be TEMP", argv[0]); ppVtab = null; return(SQLITE_ERROR); } //n = strlen(argv[0]) + 1; pNew = new fuzzer_vtab();//sqlite3_malloc( sizeof(pNew) + n ); //if( pNew==0 ) return SQLITE_NOMEM; //pNew.zClassName = (char*)&pNew[1]; pNew.zClassName = argv[0];//memcpy(pNew.zClassName, argv[0], n); sqlite3_declare_vtab(db, "CREATE TABLE x(word,distance,cFrom,cTo,cost)"); //memset(pNew, 0, sizeof(pNew)); pzErr = ""; ppVtab = pNew; return(SQLITE_OK); }
/* Note that for this virtual table, the xCreate and xConnect ** methods are identical. */ static int fuzzerDisconnect(ref object pVtab) { fuzzer_vtab p = (fuzzer_vtab)pVtab; Debug.Assert(p.nCursor == 0); do { while (p.pRule != null) { fuzzer_rule pRule = p.pRule; p.pRule = pRule.pNext; pRule = null;//sqlite3_free(pRule); } p.pRule = p.pNewRule; p.pNewRule = null; } while (p.pRule != null); pVtab = null;//sqlite3_free(p); return(SQLITE_OK); }
/* ** Open a new fuzzer cursor. */ static int fuzzerOpen(sqlite3_vtab pVTab, out sqlite3_vtab_cursor ppCursor) { fuzzer_vtab p = (fuzzer_vtab)pVTab; fuzzer_cursor pCur; pCur = new fuzzer_cursor();//= sqlite3_malloc( sizeof(pCur) ); ///if( pCur==0 ) return SQLITE_NOMEM; //memset(pCur, 0, sizeof(pCur)); pCur.pVtab = p; ppCursor = pCur; if (p.nCursor == 0 && p.pNewRule != null) { uint i; fuzzer_rule pX; fuzzer_rule[] a = new fuzzer_rule[15]; //for(i=0; i<sizeof(a)/sizeof(a[0]); i++) a[i] = 0; while ((pX = p.pNewRule) != null) { p.pNewRule = pX.pNext; pX.pNext = null; for (i = 0; a[i] != null && i < a.Length; i++)//<sizeof(a)/sizeof(a[0])-1; i++) { pX = fuzzerMergeRules(a[i], pX); a[i] = null; } a[i] = fuzzerMergeRules(a[i], pX); } for (pX = a[0], i = 1; i < a.Length; i++)//sizeof(a)/sizeof(a[0]); i++) { pX = fuzzerMergeRules(a[i], pX); } p.pRule = fuzzerMergeRules(p.pRule, pX); } p.nCursor++; return(SQLITE_OK); }
/* Methods for the fuzzer module */ static int fuzzerConnect( sqlite3 db, object pAux, int argc, string[] argv, out sqlite3_vtab ppVtab, out string pzErr ) { fuzzer_vtab pNew; int n; if ( !argv[1].StartsWith( "temp", StringComparison.CurrentCultureIgnoreCase ) ) { pzErr = sqlite3_mprintf( "%s virtual tables must be TEMP", argv[0] ); ppVtab = null; return SQLITE_ERROR; } //n = strlen(argv[0]) + 1; pNew = new fuzzer_vtab();//sqlite3_malloc( sizeof(pNew) + n ); //if( pNew==0 ) return SQLITE_NOMEM; //pNew.zClassName = (char*)&pNew[1]; pNew.zClassName = argv[0];//memcpy(pNew.zClassName, argv[0], n); sqlite3_declare_vtab( db, "CREATE TABLE x(word,distance,cFrom,cTo,cost)" ); //memset(pNew, 0, sizeof(pNew)); pzErr = ""; ppVtab = pNew; return SQLITE_OK; }