diff --git a/src/sbbs3/js_user.c b/src/sbbs3/js_user.c index 0bc0568696960743e66b445d5360242c0779b369..87e774dc58a5130d5955572f120589dd127c7902 100644 --- a/src/sbbs3/js_user.c +++ b/src/sbbs3/js_user.c @@ -574,9 +574,11 @@ static JSBool js_user_set(JSContext *cx, JSObject *obj, jsid id, JSBool strict, putuserstr(scfg, p->user->number, USER_CURXTRN, str); break; case USER_PROP_XEDIT: + p->user->xedit = getxeditnum(scfg, str); putuserstr(scfg, p->user->number, USER_XEDIT, str); break; case USER_PROP_SHELL: + p->user->shell = getshellnum(scfg, str); putuserstr(scfg, p->user->number, USER_SHELL, str); break; case USER_PROP_MISC: diff --git a/src/sbbs3/scfglib.h b/src/sbbs3/scfglib.h index 36df5f496491568ab853deb1430e02744fc1b9ac..aa3e089d076cffa62b96ce91264c9a6159932d0b 100644 --- a/src/sbbs3/scfglib.h +++ b/src/sbbs3/scfglib.h @@ -63,6 +63,8 @@ int getgrpnum_from_name(scfg_t*, const char* name); int getxtrnsec(scfg_t*, const char* code); int getgurunum(scfg_t*, const char* code); int getchatactset(scfg_t*, const char* name); +int getxeditnum(scfg_t*, const char* code); +int getshellnum(scfg_t*, const char* code); DLLEXPORT BOOL is_valid_dirnum(scfg_t*, int); DLLEXPORT BOOL is_valid_libnum(scfg_t*, int); diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index d0abdcb375aa5c971f62344d7dfff6c89f940ea9..2daba463ee589f0f5efe2c315ca35c62c1a1101d 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -791,6 +791,30 @@ int getchatactset(scfg_t* cfg, const char* name) return i; } +// Returns 0 (internal editor) or 1-based external editor index +int getxeditnum(scfg_t* cfg, const char* code) +{ + int i; + + for(i = 0; i < cfg->total_xedits; ++i) { + if(stricmp(cfg->xedit[i]->code, code) == 0) + return i + 1; + } + return 0; +} + +// Returns 0 (first shell) if shell code isn't valid +int getshellnum(scfg_t* cfg, const char* code) +{ + int i; + + for(i = 0; i < cfg->total_shells; ++i) { + if(stricmp(cfg->shell[i]->code, code) == 0) + return i; + } + return 0; +} + BOOL is_valid_dirnum(scfg_t* cfg, int dirnum) { return (dirnum >= 0) && (cfg != NULL) && (dirnum < cfg->total_dirs); diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index cbc10bd805178206d1416039e1d0cbc0e11242f4..81b1d7b0b83e039eadda71e0ce2cf31fa62e25fe 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -419,18 +419,8 @@ int parseuserdat(scfg_t* cfg, char *userdat, user_t *user, char* field[]) user->rows = strtoul(field[USER_ROWS], NULL, 0); user->cols = strtoul(field[USER_COLS], NULL, 0); - for(int i = 0; i < cfg->total_xedits; i++) { - if(stricmp(field[USER_XEDIT], cfg->xedit[i]->code) == 0) { - user->xedit = i + 1; - break; - } - } - for(int i=0; i < cfg->total_shells; i++) { - if(stricmp(field[USER_SHELL], cfg->shell[i]->code) == 0) { - user->shell = i; - break; - } - } + user->xedit = getxeditnum(cfg, field[USER_XEDIT]); + user->shell = getshellnum(cfg, field[USER_SHELL]); SAFECOPY(user->tmpext, field[USER_TMPEXT]); user->prot = *field[USER_PROT];