diff --git a/src/sbbs3/js_sqlite.c b/src/sbbs3/js_sqlite.c index 94c3c59b7015444d31a3497e1e36ea2b9aba2939..0d4fe5bdb950c27ec64d64f32a10b5517d0bf43d 100644 --- a/src/sbbs3/js_sqlite.c +++ b/src/sbbs3/js_sqlite.c @@ -49,6 +49,8 @@ typedef struct BOOL external; /* externally created, don't close */ BOOL debug; char* errormsg; /* last error message */ +// jsval * argv = JS_ARGV(cx, arglist); +// jsval rval = JSVAL_VOID; } private_t; @@ -73,15 +75,19 @@ static void dbprintf(BOOL error, private_t* p, char* fmt, ...) /* Sqlite Object Methods */ +//js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) static JSBool -js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +js_open(JSContext *cx, uintN argc, jsval *arglist) { int rc; - jsint bufsize=2*1024; - JSString* str; +// jsint bufsize=2*1024; +// JSString* str; private_t* p; +// jsval *rval; + JSObject * obj = JS_THIS_OBJECT(cx, arglist); - *rval = JSVAL_FALSE; +// *rval = JSVAL_FALSE; + JS_SET_RVAL(cx,arglist,JSVAL_FALSE); if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) { JS_ReportError(cx,getprivate_failure,WHERE); @@ -90,7 +96,8 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) if(p->db!=NULL) { dbprintf(FALSE,p, "db already open"); - *rval = JSVAL_TRUE; + // *rval = JSVAL_TRUE; + JS_SET_RVAL(cx,arglist,JSVAL_TRUE); return(JS_TRUE); } else { @@ -99,22 +106,27 @@ js_open(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) if( rc ) { sqlite3_close(p->db); - *rval = JSVAL_FALSE; + // *rval = JSVAL_FALSE; + JS_SET_RVAL(cx,arglist,JSVAL_FALSE); p->errormsg = "can't open the database (path/permissions incorrect?)"; dbprintf(FALSE, p, "can't open: %s",p->name); return (JS_TRUE); } } dbprintf(FALSE,p , "opened!"); - *rval = JSVAL_TRUE; + //*rval = JSVAL_TRUE; + JS_SET_RVAL(cx,arglist,JSVAL_TRUE); return(JS_TRUE); } +//js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) static JSBool -js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +js_close(JSContext *cx, uintN argc, jsval *arglist) { private_t* p; + // jsval *rval; + JSObject * obj = JS_THIS_OBJECT(cx, arglist); if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) { JS_ReportError(cx,getprivate_failure,WHERE); @@ -122,7 +134,8 @@ js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) } if(p->db==NULL) { - *rval = JSVAL_FALSE; + //*rval = JSVAL_FALSE; + JS_SET_RVAL(cx,arglist,JSVAL_FALSE); return(JS_TRUE); } sqlite3_close(p->db); @@ -130,11 +143,13 @@ js_close(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) dbprintf(FALSE, p, "closed: %s" , p->name); p->db=NULL; - *rval = JSVAL_TRUE; + //*rval = JSVAL_TRUE; + JS_SET_RVAL(cx,arglist,JSVAL_TRUE); return(JS_TRUE); } +//js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) static JSBool -js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) +js_exec(JSContext *cx, uintN argc, jsval *arglist) { int rc,i; private_t* p; @@ -144,8 +159,11 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) sqlite3_stmt *ppStmt; jsval val; jsuint idx; - char* column_name; // column name of Record +// char* column_name; // column name of Record size_t stmt_sz = 0; +// jsval *rval; + jsval * argv = JS_ARGV(cx, arglist); + JSObject * parent = JS_THIS_OBJECT(cx, arglist); if((p=(private_t*)JS_GetPrivate(cx,parent))==NULL) { JS_ReportError(cx,getprivate_failure,WHERE); @@ -155,7 +173,7 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) if (argc > 0) { dbprintf (FALSE, p, "exec has stmt"); str = JS_ValueToString(cx, argv[0]); - if( str != NULL) { + if(str != NULL) { // p->stmt = JS_GetStringBytes(str); JSSTRING_TO_RASTRING(cx, str, p->stmt, &stmt_sz, NULL); dbprintf (FALSE, p, "exec param: %s", p->stmt); @@ -163,7 +181,8 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) } if(p->db==NULL) { dbprintf(TRUE, p, "database is not opened"); - *rval = JSVAL_FALSE; + // *rval = JSVAL_FALSE; + JS_SET_RVAL(cx,arglist,JSVAL_FALSE); return(JS_TRUE); } @@ -174,7 +193,8 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) if (p->stmt == NULL) { dbprintf(FALSE, p, "empy statement"); p->errormsg = "empty statement"; - *rval = JSVAL_FALSE; + // *rval = JSVAL_FALSE; + JS_SET_RVAL(cx,arglist,JSVAL_FALSE); return(JS_TRUE); } @@ -195,7 +215,7 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) val = INT_TO_JSVAL(sqlite3_column_int(ppStmt,i)); break; case SQLITE_TEXT: - val = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, sqlite3_column_text(ppStmt,i))); + val = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, (const char *)sqlite3_column_text(ppStmt,i))); break; case SQLITE_BLOB: break; @@ -215,12 +235,14 @@ js_exec(JSContext *cx, JSObject *parent, uintN argc, jsval *argv, jsval *rval) return(JS_FALSE); } dbprintf(FALSE, p , "end prepare"); - *rval = OBJECT_TO_JSVAL(Result); + //*rval = OBJECT_TO_JSVAL(Result); + JS_SET_RVAL(cx,arglist,OBJECT_TO_JSVAL(Result)); return(JS_TRUE); } else { p->errormsg = (char* ) sqlite3_errmsg(p->db); - *rval = JSVAL_FALSE; + //*rval = JSVAL_FALSE; + JS_SET_RVAL(cx,arglist,JSVAL_FALSE); dbprintf(FALSE, p , "prepare error: %s", sqlite3_errmsg(p->db)); return(JS_TRUE); } @@ -235,7 +257,7 @@ enum { }; -static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp) { jsint tiny; private_t* p; @@ -278,7 +300,7 @@ static JSBool js_sqlite_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) return(JS_TRUE); } -static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +static JSBool js_sqlite_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { private_t* p; jsint tiny; @@ -341,18 +363,14 @@ static char* sqlite_prop_desc[] = { static jsSyncMethodSpec js_sqlite_functions[] = { {"open", js_open, 1, JSTYPE_BOOLEAN, JSDOCSTR("Open the database") - ,JSDOCSTR("open the sqlite3 database" - ) - ,310 - }, + ,JSDOCSTR("open the sqlite3 database") + ,310}, {"close", js_close, 0, JSTYPE_VOID, JSDOCSTR("") ,JSDOCSTR("close database") - ,310 - }, + ,310}, {"exec", js_exec, 0, JSTYPE_BOOLEAN, JSDOCSTR("") ,JSDOCSTR("exec the sql query on database") - ,310 - }, + ,310}, {0} }; @@ -394,22 +412,22 @@ static JSClass js_sqlite_class = { //js_sqlite_constructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv) static JSBool -js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist, jsval *rval) +js_sqlite_constructor(JSContext* cx, uintN argc, jsval *arglist) { JSString* str; private_t* p; - jsval* argv = JS_ARGV(cx, arglist); + jsval * argv = JS_ARGV(cx, arglist); + JSObject* obj; -// JSVALUE_TO_ASTRING(cx, argv[0], str, sizeof(argv[0]), NULL); -// if(str==NULL) { + obj = JS_NewObject(cx, &js_sqlite_class, NULL, NULL); + JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(obj)); + if((str = JS_ValueToString(cx, argv[0]))==NULL) { JS_ReportError(cx,"No filename specified"); return(JS_FALSE); } - *rval = JSVAL_VOID; - if((p=(private_t*)calloc(1,sizeof(private_t)))==NULL) { JS_ReportError(cx,"calloc failed"); return(JS_FALSE);