diff --git a/src/sbbs3/exec.cpp b/src/sbbs3/exec.cpp index 715e0a149435bb2413b05a30ce7a4acb5df704fc..5406fcfba903eae8ba1aa2e55f45f90885716c31 100644 --- a/src/sbbs3/exec.cpp +++ b/src/sbbs3/exec.cpp @@ -553,7 +553,7 @@ js_BranchCallback(JSContext *cx, JSScript *script) return(js_CommonBranchCallback(cx,&sbbs->js_branch)); } -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 static JSBool js_OperationCallback(JSContext *cx) { @@ -665,7 +665,7 @@ long sbbs_t::js_execfile(const char *cmd, const char* startup_dir, JSObject* sco if(scope==NULL) { js_branch.counter=0; // Reset loop counter -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(js_cx, js_OperationCallback); #else JS_SetBranchCallback(js_cx, js_BranchCallback); diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index efcbae5fbc0a855af5f787db9af48725ff5c9860..b112b5a64b34e97d48fc42646affade68c3b9922 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -166,7 +166,7 @@ static JSBool js_BranchCallback(JSContext *cx, JSScript* script) return js_CommonBranchCallback(cx,&bg->branch); } -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 static JSBool js_OperationCallback(JSContext *cx) { @@ -311,7 +311,7 @@ js_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) /* Set our branch callback (which calls the generic branch callback) */ JS_SetContextPrivate(bg->cx, bg); -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(bg->cx, js_OperationCallback); #else JS_SetBranchCallback(bg->cx, js_BranchCallback); diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c index cc9ece4ccf86a04e44d6544ea15bd771007102f1..835c2c952bc2a950798559ec04c65a8108f35678 100644 --- a/src/sbbs3/js_internal.c +++ b/src/sbbs3/js_internal.c @@ -278,14 +278,14 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv #ifdef EVAL_BRANCH_CALLBACK JS_SetContextPrivate(cx, JS_GetPrivate(parent_cx, parent_obj)); -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(cx, js_OperationCallback); #else JS_SetBranchCallback(cx, js_BranchCallback); #endif #else /* Use the branch callback from the parent context */ JS_SetContextPrivate(cx, JS_GetContextPrivate(parent_cx)); -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(cx, JS_GetOperationCallback(parent_cx)); #else callback=JS_SetBranchCallback(parent_cx,NULL); @@ -429,6 +429,23 @@ static JSClass js_internal_class = { ,JS_FinalizeStub /* finalize */ }; +#if JS_VERSION >= 185 +char* DLLCALL js_getstring(JSContext *cx, JSString *str) +{ + size_t len; + const jschar *val; + char *ret; + + if(!(val=JS_GetStringCharsAndLength(cx, str, &len))) + return NULL; + if(!(ret=malloc(len+1)) + return NULL; + memcpy(ret, val, len); + ret[len]=0; + return ret; +} +#endif + void DLLCALL js_EvalOnExit(JSContext *cx, JSObject *obj, js_branch_t* branch) { char* p; diff --git a/src/sbbs3/js_rtpool.c b/src/sbbs3/js_rtpool.c index a4df254f78a3123c30a72e68a23ebb8f0ba10ee8..e87650e4a3f2e0c4447644205be5526a99454897 100644 --- a/src/sbbs3/js_rtpool.c +++ b/src/sbbs3/js_rtpool.c @@ -129,7 +129,7 @@ void DLLCALL jsrt_Release(JSRuntime *rt) void DLLCALL jsrt_TriggerAll(void) { -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 int i; int j; JSContext *iterp,*cx; diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index 61cdcc27dc91a36b65dc1468dc8b1bb0946a59af..f864482a307780b0edae12acce345b23518a909e 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -615,7 +615,7 @@ js_BranchCallback(JSContext *cx, JSScript *script) return(js_CommonBranchCallback(cx,&branch)); } -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 static JSBool js_OperationCallback(JSContext *cx) { @@ -814,7 +814,7 @@ long js_exec(const char *fname, char** args) branch.terminated=&terminated; -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(js_cx, js_OperationCallback); #else JS_SetBranchCallback(js_cx, js_BranchCallback); diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index f015b6a5d8f454d9d1fde630ed50fecfa97e59f3..be82d900b84ca87382d28d4cc7fe41c30a889f53 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -105,10 +105,23 @@ extern int thread_suid_broken; /* NPTL is no longer broken */ #define XP_PC #define XP_WIN #endif - #define JS_THREADSAFE /* Required! */ +#ifndef __cplusplus + #include <stdbool.h> + #include <inttypes.h> +#endif + #include <jsconfig.h> +#if JS_VERSION < 185 + #define JS_THREADSAFE +#endif #include <jsapi.h> +#if (JS_VERSION < 185) || (defined __cplusplus) #include <jsprf.h> /* JS-safe sprintf functions */ #include <jsnum.h> /* JSDOUBLE_IS_NaN() */ +#endif +#if JS_VERSION >= 185 + #define JSScript JSObject + #define JS_DestroyScript(cx,script) +#endif #endif @@ -1036,6 +1049,7 @@ extern "C" { DLLEXPORT JSBool DLLCALL js_CommonBranchCallback(JSContext*, js_branch_t*); DLLEXPORT void DLLCALL js_EvalOnExit(JSContext*, JSObject*, js_branch_t*); DLLEXPORT void DLLCALL js_PrepareToExecute(JSContext*, JSObject*, const char *filename, const char* startup_dir); + DLLEXPORT char* DLLCALL js_getstring(JSContext *cx, JSString *str); /* js_system.c */ DLLEXPORT JSObject* DLLCALL js_CreateSystemObject(JSContext* cx, JSObject* parent diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 330eeb3b336dcb55254c96727a311f180af11d4b..259dc6be9664b0dc62041ff9cceac763aad3d0af 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -949,7 +949,7 @@ js_BranchCallback(JSContext *cx, JSScript *script) return js_CommonBranchCallback(cx,&client->branch); } -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 static JSBool js_OperationCallback(JSContext *cx) { @@ -1153,7 +1153,7 @@ static void js_service_thread(void* arg) lprintf(LOG_ERR,"%04d !JavaScript FAILED to compile script (%s)",socket,spath); else { js_PrepareToExecute(js_cx, js_glob, spath, /* startup_dir */NULL); -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(js_cx, js_OperationCallback); #else JS_SetBranchCallback(js_cx, js_BranchCallback); @@ -1256,7 +1256,7 @@ static void js_static_service_thread(void* arg) val = BOOLEAN_TO_JSVAL(JS_FALSE); JS_SetProperty(js_cx, js_glob, "logged_in", &val); -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(js_cx, js_OperationCallback); #else JS_SetBranchCallback(js_cx, js_BranchCallback); diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index 60533bab3381ade03388c88cd4e328fb9ff9c58b..5866e96813f051483810848de8ba100ec71be71b 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -4430,7 +4430,7 @@ js_BranchCallback(JSContext *cx, JSScript *script) return(js_CommonBranchCallback(cx,&session->js_branch)); } -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 static JSBool js_OperationCallback(JSContext *cx) { @@ -4459,7 +4459,7 @@ js_initcx(http_session_t *session) JS_SetErrorReporter(js_cx, js_ErrorReporter); -#ifdef USE_JS_OPERATION_CALLBACK +#if JS_VERSION>180 JS_SetOperationCallback(js_cx, js_OperationCallback); #else JS_SetBranchCallback(js_cx, js_BranchCallback);