diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c index ab6d3ccef7a353c57f503d93cb763e6d5547d6d3..736122e140df2d938ef1d8b384198e0856a9d873 100644 --- a/src/sbbs3/js_internal.c +++ b/src/sbbs3/js_internal.c @@ -455,6 +455,7 @@ JSObject* DLLCALL js_CreateInternalJsObject(JSContext* cx, JSObject* parent, js_ if(startup!=NULL) { JSObject* load_path_list; jsval val; + str_list_t load_path; if((load_path_list=JS_NewArrayObject(cx, 0, NULL))==NULL) return(NULL); @@ -462,17 +463,18 @@ JSObject* DLLCALL js_CreateInternalJsObject(JSContext* cx, JSObject* parent, js_ if(!JS_SetProperty(cx, obj, JAVASCRIPT_LOAD_PATH_LIST, &val)) return(NULL); - if(startup->load_path!=NULL) { + if((load_path=strListSplitCopy(NULL, startup->load_path, ",")) != NULL) { JSString* js_str; unsigned i; - for(i=0; startup->load_path[i]!=NULL; i++) { - if((js_str=JS_NewStringCopyZ(cx, startup->load_path[i]))==NULL) - return(NULL); + for(i=0; load_path[i]!=NULL; i++) { + if((js_str=JS_NewStringCopyZ(cx, load_path[i]))==NULL) + break; val=STRING_TO_JSVAL(js_str); if(!JS_SetElement(cx, load_path_list, i, &val)) - return(NULL); + break; } + strListFree(&load_path); } } diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index af22e9dbfe0a0de3338fc538ab4bd196ef6bfc32..a44fdd5b33313d859e3470cbbd01cef61727e75d 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -618,7 +618,7 @@ static BOOL js_init(char** environ) js_startup_t startup; memset(&startup,0,sizeof(startup)); - startup.load_path=strListSplitCopy(NULL, load_path_list, ","); + SAFECOPY(startup.load_path, load_path_list); fprintf(statfp,"%s\n",(char *)JS_GetImplementationVersion()); diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c index 9c493c937f9d6811c45043092d383a1f7269d1c3..830c2d4dbf0f673546b0c177fc1bd2c18588d8a4 100644 --- a/src/sbbs3/sbbs_ini.c +++ b/src/sbbs3/sbbs_ini.c @@ -126,7 +126,8 @@ void sbbs_get_js_settings( ,js_startup_t* js ,js_startup_t* defaults) { - str_list_t load_path; + char value[INI_MAX_VALUE_LEN]; + char* p; js->max_bytes = iniGetInteger(list,section,strJavaScriptMaxBytes ,defaults->max_bytes); js->cx_stack = iniGetInteger(list,section,strJavaScriptContextStack ,defaults->cx_stack); @@ -135,11 +136,12 @@ void sbbs_get_js_settings( js->gc_interval = iniGetInteger(list,section,strJavaScriptGcInterval ,defaults->gc_interval); js->yield_interval = iniGetInteger(list,section,strJavaScriptYieldInterval ,defaults->yield_interval); -// if(js->load_path != defaults->load_path) /* Memory leak, ToDo Fix! */ -// iniFreeStringList(js->load_path); - if((load_path = iniGetStringList(list, section,strJavaScriptLoadPath,",",NULL)) == NULL) - load_path = defaults->load_path; - js->load_path = load_path; + /* Get JavaScriptLoadPath, use default is key is missing, use blank if key value is blank */ + if((p=iniGetExistingString(list, section, strJavaScriptLoadPath, nulstr, value)) == NULL) { + if(defaults!=js) + SAFECOPY(js->load_path, defaults->load_path); + } else + SAFECOPY(js->load_path, p); sbbs_fix_js_settings(js); } @@ -159,8 +161,9 @@ BOOL sbbs_set_js_settings( ,JAVASCRIPT_BRANCH_LIMIT ,JAVASCRIPT_GC_INTERVAL ,JAVASCRIPT_YIELD_INTERVAL - ,NULL /* load_path */ + ,JAVASCRIPT_LOAD_PATH }; + SAFECOPY(global_defaults.load_path, JAVASCRIPT_LOAD_PATH); if(defaults==NULL) defaults=&global_defaults; @@ -197,10 +200,10 @@ BOOL sbbs_set_js_settings( else failure|=iniSetInteger(lp,section,strJavaScriptYieldInterval,js->yield_interval,style)==NULL; - if(js->load_path==defaults->load_path) - iniRemoveValue(lp,section,strJavaScriptLoadPath); + if(strcmp(js->load_path,defaults->load_path)==0) + iniRemoveKey(lp,section,strJavaScriptLoadPath); else - failure|=iniSetStringList(lp,section,strJavaScriptLoadPath,",",js->load_path,style)==NULL; + failure|=iniSetString(lp,section,strJavaScriptLoadPath,js->load_path,style)==NULL; return(!failure); } @@ -244,8 +247,7 @@ static void get_ini_globals(str_list_t list, global_startup_t* global) global->js.branch_limit = JAVASCRIPT_BRANCH_LIMIT; global->js.gc_interval = JAVASCRIPT_GC_INTERVAL; global->js.yield_interval = JAVASCRIPT_YIELD_INTERVAL; - if(global->js.load_path==NULL) - global->js.load_path = strListSplitCopy(NULL, JAVASCRIPT_LOAD_PATH, ","); + SAFECOPY(global->js.load_path, JAVASCRIPT_LOAD_PATH); /* Read .ini values here */ sbbs_get_js_settings(list, section, &global->js, &global->js); diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h index a191e1764caf577d8d646e0c92cd41a8f34eeb76..1d1c2459cb0cf5f1d68f21708e6ee38324b172c6 100644 --- a/src/sbbs3/startup.h +++ b/src/sbbs3/startup.h @@ -52,7 +52,7 @@ typedef struct { ulong branch_limit; /* maximum number of branches (for infinite loop detection) */ ulong gc_interval; /* number of branches between garbage collection attempts */ ulong yield_interval; /* number of branches between time-slice yields */ - str_list_t load_path; /* additional directories to search for load()ed scripts */ + char load_path[INI_MAX_VALUE_LEN]; /* additional (comma-separated) directories to search for load()ed scripts */ } js_startup_t; typedef struct {