My function static JSBool chan_dbget(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { int res = 0; char tmp[256]; JSString *str = NULL; char *family, *key; *rval = BOOLEAN_TO_JSVAL ( JS_FALSE); if (!(( str = JS_ValueToString(cx, argv[0])) && ( family = JS_GetStringBytes(str) ))) { *rval = STRING_TO_JSVAL ( JS_NewStringCopyZ(cx, res )); return JS_FALSE; } if (!(( str = JS_ValueToString(cx, argv[1])) && ( key = JS_GetStringBytes(str) ))) { *rval = STRING_TO_JSVAL ( JS_NewStringCopyZ(cx, res )); return JS_FALSE; } res = opbx_db_get(family, key, tmp, sizeof(tmp)); if ( res == 0 && !opbx_strlen_zero(tmp) ) { printf("RETURNING TRUE!\n"); *rval = STRING_TO_JSVAL ( JS_NewStringCopyZ(cx, tmp)); return JS_TRUE; } printf ("RETURNING FALSE!\n"); return JS_FALSE; } corelib/db.c int opbx_db_get(const char *family, const char *keys, char *value, int valuelen) { char *sql; char *zErr = 0; int res = 0; struct opbx_frame dframe; sqlite3 *db; sanity_check(); if (!(db = sqlite_open_db(globals.dbfile))) { return -1; } if (!family || opbx_strlen_zero(family)) { family = "_undef_"; } dframe.data = value; dframe.datalen = valuelen; if ((sql = sqlite3_mprintf("select value from %q where family='%q' and keys='%q'", globals.tablename, family, keys))) { opbx_log(LOG_DEBUG, "SQL [%s]\n", sql); res = sqlite3_exec(db, sql, get_callback, &dframe, &zErr ); if (zErr) { opbx_log(LOG_ERROR, "SQL ERR [%s] [%s]\n", sql, zErr); res = -1; } else { res = 0; } if (dframe.datalen <= 0 ) { res = -1; } } else { opbx_log(LOG_ERROR, "Memory Error!\n"); } if (sql) { sqlite3_free(sql); sql = NULL; } return res; }