diff --git a/src/sbbs3/js_system.c b/src/sbbs3/js_system.c index e3f6c5c4f40c515d12c41a79df2ffbf7f4170b96..b523603b6f1b89bb30a395af47cfc5700eacc8eb 100644 --- a/src/sbbs3/js_system.c +++ b/src/sbbs3/js_system.c @@ -39,7 +39,14 @@ #ifdef JAVASCRIPT -/* System Object Properites */ +typedef struct { + scfg_t* cfg; + int nodefile; +} js_system_private_t; + +extern JSClass js_system_class; + +/* System Object Properties */ enum { SYS_PROP_NAME ,SYS_PROP_OP @@ -120,11 +127,12 @@ static JSBool js_system_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) jsint tiny; JSString* js_str; ulong val; - scfg_t* cfg; jsrefcount rc; - if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; + scfg_t* cfg = sys->cfg; JS_IdToValue(cx, id, &idval); tiny = JSVAL_TO_INT(idval); @@ -337,10 +345,10 @@ static JSBool js_system_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict { jsval idval; jsint tiny; - scfg_t* cfg; - if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; JS_IdToValue(cx, id, &idval); tiny = JSVAL_TO_INT(idval); @@ -348,7 +356,7 @@ static JSBool js_system_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict #ifndef JSDOOR switch(tiny) { case SYS_PROP_MISC: - JS_ValueToInt32(cx, *vp, &cfg->sys_misc); + JS_ValueToInt32(cx, *vp, &sys->cfg->sys_misc); break; } #endif @@ -558,21 +566,20 @@ enum { ,SYSSTAT_PROP_FEEDBACK }; -extern JSClass js_system_class; - #ifndef JSDOOR static JSBool js_sysstats_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { jsval idval; jsint tiny; - scfg_t* cfg; stats_t stats; uint i; ulong l; jsrefcount rc; - if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)JS_GetPrivate(cx,obj))==NULL) + return JS_FALSE; + scfg_t* cfg = sys->cfg; JS_IdToValue(cx, id, &idval); tiny = JSVAL_TO_INT(idval); @@ -753,13 +760,13 @@ js_alias(JSContext *cx, uintN argc, jsval *arglist) char* p; char buf[128]; JSString* js_str; - scfg_t* cfg; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if((js_str=JS_ValueToString(cx, argv[0]))==NULL) { JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(0)); @@ -773,7 +780,7 @@ js_alias(JSContext *cx, uintN argc, jsval *arglist) } rc=JS_SUSPENDREQUEST(cx); - p=alias(cfg,p,buf); + p=alias(sys->cfg,p,buf); JS_RESUMEREQUEST(cx, rc); if((js_str = JS_NewStringCopyZ(cx, p))==NULL) @@ -791,20 +798,20 @@ js_username(JSContext *cx, uintN argc, jsval *arglist) int32 val; char buf[128]; JSString* js_str; - scfg_t* cfg; char* cstr; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; val=0; JS_ValueToInt32(cx,argv[0],&val); rc=JS_SUSPENDREQUEST(cx); - cstr=username(cfg,val,buf); + cstr=username(sys->cfg,val,buf); JS_RESUMEREQUEST(cx, rc); if((js_str = JS_NewStringCopyZ(cx, cstr))==NULL) return(JS_FALSE); @@ -820,14 +827,14 @@ js_matchuser(JSContext *cx, uintN argc, jsval *arglist) jsval *argv=JS_ARGV(cx, arglist); char* p; JSString* js_str; - scfg_t* cfg; BOOL sysop_alias=TRUE; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if((js_str=JS_ValueToString(cx, argv[0]))==NULL) { JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(0)); @@ -844,7 +851,7 @@ js_matchuser(JSContext *cx, uintN argc, jsval *arglist) } rc=JS_SUSPENDREQUEST(cx); - JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(matchuser(cfg,p,sysop_alias))); + JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(matchuser(sys->cfg,p,sysop_alias))); JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); } @@ -859,15 +866,15 @@ js_matchuserdata(JSContext *cx, uintN argc, jsval *arglist) int32 offset=0; int32 usernumber=0; int len; - scfg_t* cfg; jsrefcount rc; BOOL match_next=FALSE; int argnum=2; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; JS_ValueToInt32(cx,argv[0],&offset); rc=JS_SUSPENDREQUEST(cx); @@ -895,7 +902,7 @@ js_matchuserdata(JSContext *cx, uintN argc, jsval *arglist) } rc=JS_SUSPENDREQUEST(cx); - JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(userdatdupe(cfg,usernumber,offset,len,p,FALSE,match_next,NULL,NULL))); + JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(userdatdupe(sys->cfg,usernumber,offset,len,p,FALSE,match_next,NULL,NULL))); JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); } @@ -910,14 +917,14 @@ js_trashcan(JSContext *cx, uintN argc, jsval *arglist) char* can = NULL; JSString* js_str; JSString* js_can; - scfg_t* cfg; jsrefcount rc; BOOL ret; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if((js_can=JS_ValueToString(cx, argv[0]))==NULL) { JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(JS_FALSE)); @@ -949,7 +956,7 @@ js_trashcan(JSContext *cx, uintN argc, jsval *arglist) } rc=JS_SUSPENDREQUEST(cx); - ret=trashcan(cfg,str,can); + ret=trashcan(sys->cfg,str,can); free(can); free(str); JS_RESUMEREQUEST(cx, rc); @@ -1014,17 +1021,17 @@ js_zonestr(JSContext *cx, uintN argc, jsval *arglist) JSString* js_str; short zone; int32 val=0; - scfg_t* cfg; jsrefcount rc; char* cstr; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if(argc<1) - zone=sys_timezone(cfg); + zone=sys_timezone(sys->cfg); else { JS_ValueToInt32(cx,argv[0],&val); zone=(short)val; @@ -1049,20 +1056,20 @@ js_timestr(JSContext *cx, uintN argc, jsval *arglist) char str[128]; jsdouble ti; JSString* js_str; - scfg_t* cfg; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if(argc<1) ti=(jsdouble)time(NULL); /* use current time */ else JS_ValueToNumber(cx,argv[0],&ti); rc=JS_SUSPENDREQUEST(cx); - timestr(cfg,(time32_t)ti,str); + timestr(sys->cfg,(time32_t)ti,str); JS_RESUMEREQUEST(cx, rc); if((js_str = JS_NewStringCopyZ(cx, str))==NULL) return(JS_FALSE); @@ -1080,25 +1087,25 @@ js_datestr(JSContext *cx, uintN argc, jsval *arglist) char str[128]; time32_t t; JSString* js_str; - scfg_t* cfg; char *p; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if(argc<1) t=time32(NULL); /* use current time */ else { if(JSVAL_IS_STRING(argv[0])) { /* convert from string to time_t? */ JSVALUE_TO_ASTRING(cx, argv[0], p, 10, NULL); - JS_SET_RVAL(cx, arglist, DOUBLE_TO_JSVAL((double)dstrtounix(cfg, p))); + JS_SET_RVAL(cx, arglist, DOUBLE_TO_JSVAL((double)dstrtounix(sys->cfg, p))); return(JS_TRUE); } JS_ValueToInt32(cx,argv[0],&t); } - unixtodstr(cfg,t,str); + unixtodstr(sys->cfg,t,str); if((js_str = JS_NewStringCopyZ(cx, str))==NULL) return(JS_FALSE); @@ -1143,14 +1150,14 @@ js_spamlog(JSContext *cx, uintN argc, jsval *arglist) char* ip_addr=NULL; char* to=NULL; char* from=NULL; - scfg_t* cfg; jsrefcount rc; BOOL ret; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; for(i=0;i<argc;i++) { if(!JSVAL_IS_STRING(argv[i])) @@ -1197,7 +1204,7 @@ js_spamlog(JSContext *cx, uintN argc, jsval *arglist) } } rc=JS_SUSPENDREQUEST(cx); - ret=spamlog(cfg,prot,action,reason,host,ip_addr,to,from); + ret=spamlog(sys->cfg,prot,action,reason,host,ip_addr,to,from); if(prot) free(prot); if(action) @@ -1230,14 +1237,14 @@ js_hacklog(JSContext *cx, uintN argc, jsval *arglist) char* text=NULL; char* host=NULL; union xp_sockaddr addr; - scfg_t* cfg; jsrefcount rc; BOOL ret; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; memset(&addr,0,sizeof(addr)); for(i=0;i<argc;i++) { @@ -1279,7 +1286,7 @@ js_hacklog(JSContext *cx, uintN argc, jsval *arglist) host=p; } rc=JS_SUSPENDREQUEST(cx); - ret=hacklog(cfg,prot,user,text,host,&addr); + ret=hacklog(sys->cfg,prot,user,text,host,&addr); if(prot) free(prot); if(user) @@ -1306,14 +1313,14 @@ js_filter_ip(JSContext *cx, uintN argc, jsval *arglist) char* ip_addr=NULL; char* from=NULL; char* fname=NULL; - scfg_t* cfg; jsrefcount rc; BOOL ret; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; for(i=0;i<argc;i++) { if(!JSVAL_IS_STRING(argv[i])) @@ -1354,7 +1361,7 @@ js_filter_ip(JSContext *cx, uintN argc, jsval *arglist) fname=p; } rc=JS_SUSPENDREQUEST(cx); - ret=filter_ip(cfg,prot,reason,host,ip_addr,from,fname); + ret=filter_ip(sys->cfg,prot,reason,host,ip_addr,from,fname); if(prot) free(prot); if(reason) @@ -1380,13 +1387,14 @@ js_get_node_message(JSContext *cx, uintN argc, jsval *arglist) char* buf; int32 node_num; JSString* js_str; - scfg_t* cfg; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_NULL); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; + scfg_t* cfg = sys->cfg; node_num=cfg->node_num; if(argc) @@ -1395,7 +1403,7 @@ js_get_node_message(JSContext *cx, uintN argc, jsval *arglist) node_num=1; rc=JS_SUSPENDREQUEST(cx); - buf=getnmsg(cfg,node_num); + buf=getnmsg(sys->cfg,node_num); JS_RESUMEREQUEST(cx, rc); if(buf==NULL) return(JS_TRUE); @@ -1417,14 +1425,14 @@ js_put_node_message(JSContext *cx, uintN argc, jsval *arglist) int32 node=1; JSString* js_msg; char* msg = NULL; - scfg_t* cfg; jsrefcount rc; BOOL ret; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; JS_ValueToInt32(cx,argv[0],&node); if(node<1) @@ -1439,7 +1447,7 @@ js_put_node_message(JSContext *cx, uintN argc, jsval *arglist) return(JS_TRUE); rc=JS_SUSPENDREQUEST(cx); - ret=putnmsg(cfg,node,msg)==0; + ret=putnmsg(sys->cfg,node,msg)==0; free(msg); JS_RESUMEREQUEST(cx, rc); JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(ret)); @@ -1455,20 +1463,20 @@ js_get_telegram(JSContext *cx, uintN argc, jsval *arglist) char* buf; int32 usernumber=1; JSString* js_str; - scfg_t* cfg; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_NULL); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; JS_ValueToInt32(cx,argv[0],&usernumber); if(usernumber<1) usernumber=1; rc=JS_SUSPENDREQUEST(cx); - buf=getsmsg(cfg,usernumber); + buf=getsmsg(sys->cfg,usernumber); JS_RESUMEREQUEST(cx, rc); if(buf==NULL) return(JS_TRUE); @@ -1490,14 +1498,14 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist) int32 usernumber=1; JSString* js_msg; char* msg = NULL; - scfg_t* cfg; jsrefcount rc; BOOL ret; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; JS_ValueToInt32(cx,argv[0],&usernumber); if(usernumber<1) @@ -1512,7 +1520,7 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist) return(JS_TRUE); rc=JS_SUSPENDREQUEST(cx); - ret=putsmsg(cfg,usernumber,msg)==0; + ret=putsmsg(sys->cfg,usernumber,msg)==0; free(msg); JS_RESUMEREQUEST(cx, rc); JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(ret)); @@ -1528,7 +1536,6 @@ js_new_user(JSContext *cx, uintN argc, jsval *arglist) char* alias; int i; uintN n; - scfg_t* cfg; user_t user; JSObject* userobj; JSObject* objarg; @@ -1539,8 +1546,10 @@ js_new_user(JSContext *cx, uintN argc, jsval *arglist) JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; + scfg_t* cfg = sys->cfg; if(argc<1 || JSVAL_NULL_OR_VOID(argv[0])) { JS_ReportError(cx,"Missing or invalid argument"); @@ -1639,21 +1648,21 @@ js_del_user(JSContext *cx, uintN argc, jsval *arglist) jsval *argv=JS_ARGV(cx, arglist); jsrefcount rc; int32 n; - scfg_t* cfg; user_t user; char str[128]; - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if(!JS_ValueToInt32(cx,argv[0],&n)) return(JS_FALSE); user.number=n; rc=JS_SUSPENDREQUEST(cx); JS_SET_RVAL(cx, arglist, JSVAL_FALSE); /* fail, by default */ - if(getuserdat(cfg, &user)==0 - && putuserrec(cfg,n,U_MISC,8,ultoa(user.misc|DELETED,str,16))==0 - && putusername(cfg,n,nulstr)==0) + if(getuserdat(sys->cfg, &user)==0 + && putuserrec(sys->cfg,n,U_MISC,8,ultoa(user.misc|DELETED,str,16))==0 + && putusername(sys->cfg,n,nulstr)==0) JS_SET_RVAL(cx, arglist, JSVAL_TRUE); /* success */ JS_RESUMEREQUEST(cx, rc); @@ -1752,16 +1761,16 @@ js_chksyspass(JSContext *cx, uintN argc, jsval *arglist) { JSObject *obj=JS_THIS_OBJECT(cx, arglist); jsval *argv=JS_ARGV(cx, arglist); - scfg_t* cfg; char *pass; JS_SET_RVAL(cx, arglist, JSVAL_VOID); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; JSVALUE_TO_ASTRING(cx, argv[0], pass, LEN_PASS+2, NULL); // +2 is so overly long passwords fail. - JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(stricmp(pass,cfg->sys_pass)==0)); + JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(stricmp(pass,sys->cfg->sys_pass)==0)); return(JS_TRUE); } @@ -1772,17 +1781,18 @@ js_chkname(JSContext *cx, uintN argc, jsval *arglist) JSObject *obj=JS_THIS_OBJECT(cx, arglist); jsval *argv=JS_ARGV(cx, arglist); char* str; - scfg_t* cfg; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_VOID); JSVALUE_TO_ASTRING(cx, argv[0], str, (LEN_ALIAS > LEN_NAME)?LEN_ALIAS+2:LEN_NAME+2, NULL); - if((cfg=(scfg_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) - return(JS_FALSE); + + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; rc=JS_SUSPENDREQUEST(cx); - JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(check_name(cfg,str))); + JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(check_name(sys->cfg,str))); JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); @@ -1992,7 +2002,6 @@ static JSBool js_node_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) uint node_num; jsint tiny; node_t node; - scfg_t* cfg; JSObject* sysobj; JSObject* node_list; jsrefcount rc; @@ -2007,14 +2016,15 @@ static JSBool js_node_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) if((sysobj=JS_GetParent(cx, node_list))==NULL) return(JS_FALSE); - if((cfg=(scfg_t*)JS_GetPrivate(cx,sysobj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,sysobj,&js_system_class))==NULL) + return JS_FALSE; node_num=(uintptr_t)JS_GetPrivate(cx,obj)>>1; rc=JS_SUSPENDREQUEST(cx); memset(&node,0,sizeof(node)); - if(getnodedat(cfg, node_num, &node, /* lockit: */FALSE, &cfg->nodefile)) { + if(getnodedat(sys->cfg, node_num, &node, /* lockit: */FALSE, &sys->nodefile)) { JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); } @@ -2046,7 +2056,7 @@ static JSBool js_node_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) *vp=UINT_TO_JSVAL(node.extaux); break; case NODE_PROP_DIR: - if((js_str=JS_NewStringCopyZ(cx, cfg->node_path[node_num-1]))==NULL) + if((js_str=JS_NewStringCopyZ(cx, sys->cfg->node_path[node_num-1]))==NULL) return(JS_FALSE); *vp = STRING_TO_JSVAL(js_str); break; @@ -2061,7 +2071,6 @@ static JSBool js_node_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsint val=0; jsint tiny; node_t node; - scfg_t* cfg; JSObject* sysobj; JSObject* node_list; jsrefcount rc; @@ -2072,14 +2081,15 @@ static JSBool js_node_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, if((sysobj=JS_GetParent(cx, node_list))==NULL) return(JS_FALSE); - if((cfg=(scfg_t*)JS_GetPrivate(cx,sysobj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,sysobj,&js_system_class))==NULL) + return JS_FALSE; node_num=(uintptr_t)JS_GetPrivate(cx,obj)>>1; rc=JS_SUSPENDREQUEST(cx); memset(&node,0,sizeof(node)); - if(getnodedat(cfg, node_num, &node, /* lockit: */TRUE, &cfg->nodefile)) { + if(getnodedat(sys->cfg, node_num, &node, /* lockit: */TRUE, &sys->nodefile)) { JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); } @@ -2118,7 +2128,7 @@ static JSBool js_node_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, node.extaux=val; break; } - putnodedat(cfg,node_num,&node, /* closeit: */FALSE, cfg->nodefile); + putnodedat(sys->cfg,node_num,&node, /* closeit: */FALSE, sys->nodefile); JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); @@ -2246,7 +2256,6 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) #ifndef JSDOOR JSObject* newobj; JSObject* nodeobj; - scfg_t* cfg; uint i; #endif @@ -2301,8 +2310,9 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) if(name==NULL || strcmp(name, "fido_addr_list")==0) { if(name) free(name); - if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if((newobj=JS_NewArrayObject(cx, 0, NULL))==NULL) return(JS_FALSE); @@ -2314,8 +2324,8 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) , NULL, NULL, JSPROP_ENUMERATE)) return(JS_FALSE); - for(i=0;i<cfg->total_faddrs;i++) { - val=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,smb_faddrtoa(&cfg->faddr[i],str))); + for(i=0;i<sys->cfg->total_faddrs;i++) { + val=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,smb_faddrtoa(&sys->cfg->faddr[i],str))); JS_SetElement(cx, newobj, i, &val); } if(name) return(JS_TRUE); @@ -2324,8 +2334,9 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) if(name==NULL || strcmp(name, "stats")==0) { if(name) free(name); - if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; newobj = JS_DefineObject(cx, obj, "stats", &js_sysstats_class, NULL ,JSPROP_ENUMERATE|JSPROP_READONLY); @@ -2333,7 +2344,7 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) if(newobj==NULL) return(JS_FALSE); - JS_SetPrivate(cx, newobj, cfg); /* Store a pointer to scfg_t */ + JS_SetPrivate(cx, newobj, sys); #ifdef BUILD_JSDOCS js_DescribeSyncObject(cx,newobj,"System statistics",310); js_CreateArrayOfStrings(cx, newobj, "_property_desc_list", sysstat_prop_desc, JSPROP_READONLY); @@ -2345,8 +2356,9 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) if(name==NULL || strcmp(name, "node_list")==0) { if(name) free(name); - if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL) - return(JS_FALSE); + js_system_private_t* sys; + if((sys = (js_system_private_t*)js_GetClassPrivate(cx,obj,&js_system_class))==NULL) + return JS_FALSE; if((newobj=JS_NewArrayObject(cx, 0, NULL))==NULL) return(JS_FALSE); @@ -2358,7 +2370,7 @@ static JSBool js_system_resolve(JSContext *cx, JSObject *obj, jsid id) , NULL, NULL, JSPROP_ENUMERATE)) return(JS_FALSE); - for(i=0;i<cfg->sys_nodes && i<cfg->sys_lastnode;i++) { + for(i=0;i<sys->cfg->sys_nodes && i<sys->cfg->sys_lastnode;i++) { nodeobj = JS_NewObject(cx, &js_node_class, NULL, newobj); @@ -2397,12 +2409,13 @@ static JSBool js_system_enumerate(JSContext *cx, JSObject *obj) static void js_system_finalize(JSContext *cx, JSObject *obj) { - scfg_t* cfg; - - if((cfg = (scfg_t*)JS_GetPrivate(cx, obj)) == NULL) + js_system_private_t* sys; + if((sys = (js_system_private_t*)JS_GetPrivate(cx, obj)) == NULL) return; - CLOSE_OPEN_FILE(cfg->nodefile); + CLOSE_OPEN_FILE(sys->nodefile); + free(sys); + JS_SetPrivate(cx, obj, NULL); } JSClass js_system_class = { @@ -2428,14 +2441,17 @@ JSObject* DLLCALL js_CreateSystemObject(JSContext* cx, JSObject* parent sysobj = JS_DefineObject(cx, parent, "system", &js_system_class, NULL ,JSPROP_ENUMERATE|JSPROP_READONLY); - if(sysobj==NULL) return(NULL); - if(cfg->nodefile < 1) // An initialized scfg_t is usually all 0's - cfg->nodefile = -1; + js_system_private_t* sys; + if((sys = calloc(sizeof(*sys), 1)) == NULL) + return NULL; + + sys->cfg = cfg; + sys->nodefile = -1; - if(!JS_SetPrivate(cx, sysobj, cfg)) /* Store a pointer to scfg_t */ + if(!JS_SetPrivate(cx, sysobj, sys)) return(NULL); /****************************/ diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h index f9f07e7d5808f44f218146b27c7dd92214e38b06..172a4661a5541ada14f8d5ce3670bffdd7f9436a 100644 --- a/src/sbbs3/scfgdefs.h +++ b/src/sbbs3/scfgdefs.h @@ -615,7 +615,6 @@ typedef struct // Run-time state information (not configuration) int tls_certificate; - int nodefile; } scfg_t;