From 4f93667c49c30415a39f577f60075c57acff02ba Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 2 Aug 2002 01:31:43 +0000 Subject: [PATCH] Global load() method can now (optionally) take additoinal arguments which are then used to change the values of the global argv and argc properties. --- src/sbbs3/js_global.c | 53 +++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index 52aacbdae3..22a9023e1d 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -83,29 +83,48 @@ js_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) JSBool ok; jsval result; scfg_t* cfg; + JSObject* js_argv; + + *rval=JSVAL_VOID; if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) return(JS_FALSE); - for (i=0;i<argc;i++) { - if((str=JS_ValueToString(cx, argv[i]))==NULL) - return(JS_FALSE); - if((filename=JS_GetStringBytes(str))==NULL) - return(JS_FALSE); - errno = 0; - if(!strchr(filename,BACKSLASH)) - sprintf(path,"%s%s",cfg->exec_dir,filename); - else - strcpy(path,filename); - if((script=JS_CompileFile(cx, obj, path))==NULL) - return(JS_FALSE); - ok = JS_ExecuteScript(cx, obj, script, &result); - JS_DestroyScript(cx, script); - if (!ok) + if(argc<1) + return(JS_TRUE); + + if(argc>1) { + + if((js_argv=JS_NewArrayObject(cx, 0, NULL)) == NULL) return(JS_FALSE); - } - *rval=JSVAL_VOID; + for(i=1; i<argc; i++) + JS_SetElement(cx, js_argv, i-1, &argv[i]); + + JS_DefineProperty(cx, obj, "argv", OBJECT_TO_JSVAL(js_argv) + ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); + JS_DefineProperty(cx, obj, "argc", INT_TO_JSVAL(argc-1) + ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); + } + + if((str=JS_ValueToString(cx, argv[0]))==NULL) + return(JS_FALSE); + if((filename=JS_GetStringBytes(str))==NULL) + return(JS_FALSE); + + errno = 0; + if(!strchr(filename,BACKSLASH)) + sprintf(path,"%s%s",cfg->exec_dir,filename); + else + strcpy(path,filename); + if((script=JS_CompileFile(cx, obj, path))==NULL) + return(JS_FALSE); + + ok = JS_ExecuteScript(cx, obj, script, &result); + JS_DestroyScript(cx, script); + if (!ok) + return(JS_FALSE); + return(JS_TRUE); } -- GitLab