Commit 110cc8ac authored by rswindell's avatar rswindell

No longer dynamically allocate compiled access requirment (AR) strings for configuration items.

SCFG for Win32 is linked against a load_cfg lib that builds withOUT SCFG defined, so these compiled AR elements were allocated and then many SCFG operations (e.g. copy/paste, create new) would copy the allocated ARs to another configuration and then be subjected to double-free upon exit/clean-up (resulting in exception or crash).
Just get rid of this cruft and some other related RAM-byte-saving hold-overs from the MS-DOS days.
parent 24b4a34b
......@@ -37,8 +37,6 @@
#include "sbbs.h"
const uchar* nular=(uchar*)""; /* AR_NULL */
static BOOL ar_string_arg(int artype)
{
switch(artype) {
......@@ -58,12 +56,12 @@ static BOOL ar_string_arg(int artype)
#ifdef __BORLANDC__ /* Eliminate warning when buildling Baja */
#pragma argsused
#endif
uchar* arstr(ushort* count, const char* str, scfg_t* cfg)
uchar* arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf)
{
const char* p;
const char* np;
char ch;
uchar ar[1024],*ar_buf;
uchar ar[1024];
int artype=AR_INVALID;
uint i,j,n,not=0,equal=0;
uint maxlen;
......@@ -721,22 +719,14 @@ uchar* arstr(ushort* count, const char* str, scfg_t* cfg)
break;
}
}
if(!j) {
if(count)
(*count)=0;
return((uchar*)nular); /* Save memory */
}
ar[j++]=AR_NULL;
/** DEBUG stuff
for(i=0;i<j;i++)
lprintf(LOG_DEBUG,"%02X ",(uint)ar[i]);
lputs("\r\n");
***/
if((ar_buf=(uchar *)calloc(j+4,1))==NULL) { /* Padded for ushort dereferencing */
if(count)
(*count)=0;
return(NULL);
if(ar_buf == NULL) {
if((ar_buf=(uchar *)calloc(j+4,1))==NULL) { /* Padded for ushort dereferencing */
if(count)
(*count)=0;
return(NULL);
}
}
memcpy(ar_buf,ar,j);
if(count)
......
......@@ -54,7 +54,7 @@
#ifdef __cplusplus
extern "C"
#endif
uchar *arstr(ushort* count, const char* str, scfg_t* cfg);
uchar *arstr(ushort* count, const char* str, scfg_t* cfg, uchar* ar_buf);
#define AR_INVALID -1 /* Unspecified keyword */
......
......@@ -591,9 +591,12 @@ void compile(char *src)
if(!stricmp(p,"COMPARE_ARS")) {
if(!(*arg)) break;
strupr(arg);
ar=arstr(&i,arg,NULL);
fprintf(out,"%c%c",CS_COMPARE_ARS,(uchar)i);
fwrite(ar,i,1,out);
ar=arstr(&i,arg,NULL,NULL);
if(ar != NULL) {
fprintf(out,"%c%c",CS_COMPARE_ARS,(uchar)i);
fwrite(ar,i,1,out);
free(ar);
}
continue; }
if(!stricmp(p,"CHKSYSPASS")) {
......
......@@ -127,7 +127,7 @@ bool sbbs_t::bulkmail(uchar *ar)
j=lastuser(&cfg);
if(*ar)
if(ar && *ar)
for(i=1;i<=j;i++) {
user.number=i;
if(getuserdat(&cfg, &user)!=0)
......
......@@ -1869,10 +1869,9 @@ bool sbbs_t::guruexp(char **ptrptr, char *line)
(*ptrptr)++;
cp=strchr(str,']');
if(cp) *cp=0;
ar=arstr(NULL,str,&cfg);
ar=arstr(NULL,str,&cfg,NULL);
c=chk_ar(ar,&useron,&client);
if(ar[0]!=AR_NULL)
free(ar);
free(ar);
if(!c && _and) {
result=false;
break;
......
......@@ -217,12 +217,11 @@ int sbbs_t::exec_function(csi_t *csi)
return(0);
case CS_MAIL_SEND_BULK:
if(csi->str[0])
p=arstr(NULL,csi->str, &cfg);
p=arstr(NULL,csi->str, &cfg,NULL);
else
p=(uchar *)nulstr;
p=NULL;
bulkmail(p);
if(p && p[0])
free(p);
free(p);
return(0);
case CS_INC_MAIN_CMDS:
......
......@@ -2805,7 +2805,7 @@ static JSBool
js_bulkmail(JSContext *cx, uintN argc, jsval *arglist)
{
jsval *argv=JS_ARGV(cx, arglist);
uchar* ar=(uchar*)"";
uchar* ar = NULL;
sbbs_t* sbbs;
jsrefcount rc;
char *p;
......@@ -2819,13 +2819,12 @@ js_bulkmail(JSContext *cx, uintN argc, jsval *arglist)
JSVALUE_TO_MSTRING(cx, argv[0], p, NULL);
if(p==NULL)
return(JS_FALSE);
ar=arstr(NULL, p, &sbbs->cfg);
ar=arstr(NULL, p, &sbbs->cfg, NULL);
free(p);
}
rc=JS_SUSPENDREQUEST(cx);
sbbs->bulkmail(ar);
if(ar && ar[0])
free(ar);
free(ar);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
......@@ -4128,12 +4127,12 @@ js_chk_ar(JSContext *cx, uintN argc, jsval *arglist)
return JS_FALSE;
rc=JS_SUSPENDREQUEST(cx);
ar = arstr(NULL,p,&sbbs->cfg);
ar = arstr(NULL,p,&sbbs->cfg,NULL);
free(p);
JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(sbbs->chk_ar(ar,&sbbs->useron,&sbbs->client)));
if(ar!=NULL && ar!=nular)
if(ar!=NULL)
free(ar);
JS_RESUMEREQUEST(cx, rc);
......
......@@ -1514,7 +1514,6 @@ js_uselect(JSContext *cx, uintN argc, jsval *arglist)
int32 num=0;
char* title=NULL;
char* item=NULL;
char* ar_str=NULL;
uchar* ar=NULL;
sbbs_t* sbbs;
JSString* js_str;
......@@ -1558,24 +1557,24 @@ js_uselect(JSContext *cx, uintN argc, jsval *arglist)
return JS_FALSE;
}
}
else if(ar_str==NULL) {
else if(ar==NULL) {
char* ar_str=NULL;
JSSTRING_TO_MSTRING(cx, js_str, ar_str, NULL);
if(ar_str==NULL) {
free(item);
free(title);
return JS_FALSE;
}
ar=arstr(NULL,ar_str,&sbbs->cfg);
ar=arstr(NULL,ar_str,&sbbs->cfg,NULL);
free(ar_str);
}
}
rc=JS_SUSPENDREQUEST(cx);
JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(sbbs->uselect(1, num, title, item, ar)));
if(title)
free(title);
if(item)
free(item);
free(title);
free(item);
free(ar);
JS_RESUMEREQUEST(cx, rc);
return(JS_TRUE);
}
......
......@@ -990,14 +990,14 @@ js_chk_ar(JSContext *cx, uintN argc, jsval *arglist)
return JS_FALSE;
rc=JS_SUSPENDREQUEST(cx);
ar = arstr(NULL,ars,scfg);
ar = arstr(NULL,ars,scfg,NULL);
free(ars);
js_getuserdat(scfg,p);
JS_SET_RVAL(cx, arglist, BOOLEAN_TO_JSVAL(chk_ar(scfg,ar,p->user,p->client)));
if(ar!=NULL && ar!=nular)
if(ar!=NULL)
free(ar);
JS_RESUMEREQUEST(cx, rc);
......
......@@ -5857,7 +5857,7 @@ static void cleanup(int code)
if(mailproc_list!=NULL) {
for(i=0;i<mailproc_count;i++) {
if(mailproc_list[i].ar!=NULL && mailproc_list[i].ar!=nular)
if(mailproc_list[i].ar!=NULL)
free(mailproc_list[i].ar);
strListFree(&mailproc_list[i].to);
strListFree(&mailproc_list[i].from);
......@@ -6108,7 +6108,7 @@ void DLLCALL mail_server(void* arg)
mailproc_list[i].process_dnsbl =
iniReadBool(fp,sec_list[i],"ProcessDNSBL",TRUE);
mailproc_list[i].ar =
arstr(NULL,iniReadString(fp,sec_list[i],"AccessRequirements","",buf),&scfg);
arstr(NULL,iniReadString(fp,sec_list[i],"AccessRequirements","",buf),&scfg,NULL);
}
}
iniFreeStringList(sec_list);
......
......@@ -55,11 +55,11 @@ typedef struct { /* Message sub board info */
post_sem[LEN_DIR+1], /* Semaphore file for this sub */
tagline[81], /* Optional QWK net tag line */
newsgroup[LEN_DIR+1]; /* Newsgroup name */
uchar *ar,
*read_ar,
*post_ar,
*op_ar,
*mod_ar;
uchar ar[LEN_ARSTR+1],
read_ar[LEN_ARSTR+1],
post_ar[LEN_ARSTR+1],
op_ar[LEN_ARSTR+1],
mod_ar[LEN_ARSTR+1];
uint16_t grp, /* Which group this sub belongs to */
ptridx, /* Index into pointer file */
qwkconf, /* QWK conference number */
......@@ -79,7 +79,7 @@ typedef struct { /* Message group info */
sname[LEN_GSNAME+1], /* Short name */
arstr[LEN_ARSTR+1], /* Access requirements */
code_prefix[LEN_CODE+1]; /* Prefix for internal code */
uchar *ar;
uchar ar[LEN_ARSTR+1];
enum area_sort sort;
} grp_t;
......@@ -98,11 +98,11 @@ typedef struct { /* Transfer Directory Info */
exts[41], /* Extensions allowed */
upload_sem[LEN_DIR+1], /* Upload semaphore file */
data_dir[LEN_DIR+1]; /* Directory where data is stored */
uchar *ar,
*ul_ar,
*dl_ar,
*ex_ar,
*op_ar,
uchar ar[LEN_ARSTR+1],
ul_ar[LEN_ARSTR+1],
dl_ar[LEN_ARSTR+1],
ex_ar[LEN_ARSTR+1],
op_ar[LEN_ARSTR+1],
seqdev, /* Sequential access device number */
sort; /* Sort type */
uint16_t maxfiles, /* Max number of files allowed */
......@@ -121,7 +121,7 @@ typedef struct { /* Transfer Library Information */
arstr[LEN_ARSTR+1], /* Access Requirements */
code_prefix[LEN_CODE+1], /* Prefix for internal code */
parent_path[48]; /* Parent for dir paths */
uchar *ar;
uchar ar[LEN_ARSTR+1];
uint32_t offline_dir; /* Offline file directory */
uint32_t misc; /* Miscellaneous bits */
enum area_sort sort;
......@@ -132,7 +132,7 @@ typedef struct { /* Gfile Section Information */
char code[LEN_CODE+1]; /* Eight character code */
char name[41], /* Name of section */
arstr[LEN_ARSTR+1]; /* Access requirements */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} txtsec_t;
......@@ -140,7 +140,7 @@ typedef struct { /* External Section Information */
char code[LEN_CODE+1]; /* Eight character code */
char name[41], /* Name of section */
arstr[LEN_ARSTR+1]; /* Access requirements */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} xtrnsec_t;
......@@ -163,8 +163,8 @@ typedef struct { /* External Program Information */
cmd[LEN_CMD+1], /* Command line */
clean[LEN_CMD+1], /* Clean-up command line */
path[LEN_DIR+1]; /* Start-up path */
uchar *ar,
*run_ar;
uchar ar[LEN_ARSTR+1],
run_ar[LEN_ARSTR+1];
uchar type, /* What type of external program */
event, /* Execute upon what event */
textra, /* Extra time while in this program */
......@@ -178,7 +178,7 @@ typedef struct { /* External Program Information */
typedef struct { /* External Page program info */
char cmd[LEN_CMD+1], /* Command line */
arstr[LEN_ARSTR+1]; /* ARS for this chat page */
uchar *ar;
uchar ar[LEN_ARSTR+1];
uint32_t misc; /* Intercept I/O */
} page_t;
......@@ -200,7 +200,7 @@ typedef struct { /* Gurus */
char code[LEN_CODE+1];
char name[26],
arstr[LEN_ARSTR+1];
uchar *ar;
uchar ar[LEN_ARSTR+1];
} guru_t;
......@@ -208,7 +208,7 @@ typedef struct { /* Chat Channel Information */
char code[LEN_CODE+1];
char name[26]; /* Channel description */
char arstr[LEN_ARSTR+1]; /* Access requirements */
uchar *ar;
uchar ar[LEN_ARSTR+1];
uint16_t actset, /* Set of actions used in this chan */
guru; /* Guru file number */
uint32_t cost, /* Cost to join */
......@@ -234,7 +234,7 @@ typedef struct { /* Transfer Protocol information */
batdlcmd[LEN_CMD+1], /* Batch download command line */
blindcmd[LEN_CMD+1], /* Blind upload command line */
bicmd[LEN_CMD+1]; /* Bidirectional command line */
uchar *ar;
uchar ar[LEN_ARSTR+1];
uint32_t misc; /* Miscellaneous bits */
} prot_t;
......@@ -243,7 +243,7 @@ typedef struct { /* Extractable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access Requirements */
cmd[LEN_CMD+1]; /* Command line */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} fextr_t;
......@@ -251,7 +251,7 @@ typedef struct { /* Compressable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access Requirements */
cmd[LEN_CMD+1]; /* Command line */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} fcomp_t;
......@@ -259,7 +259,7 @@ typedef struct { /* Viewable file types */
char ext[4]; /* Extension */
char arstr[LEN_ARSTR+1], /* Access Requirements */
cmd[LEN_CMD+1]; /* Command line */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} fview_t;
......@@ -268,7 +268,7 @@ typedef struct { /* Testable file types */
char arstr[LEN_ARSTR+1], /* Access requirement */
cmd[LEN_CMD+1], /* Command line */
workstr[41]; /* String to display while working */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} ftest_t;
......@@ -277,7 +277,7 @@ typedef struct { /* Download events */
char arstr[LEN_ARSTR+1], /* Access requirement */
cmd[LEN_CMD+1], /* Command line */
workstr[41]; /* String to display while working */
uchar *ar;
uchar ar[LEN_ARSTR+1];
} dlevent_t;
......@@ -294,7 +294,7 @@ typedef struct { /* External Editors */
arstr[LEN_ARSTR+1], /* Access Requirement */
lcmd[LEN_CMD+1], /* Local command line */
rcmd[LEN_CMD+1]; /* Remote command line */
uchar *ar;
uchar ar[LEN_ARSTR+1];
uint32_t misc; /* Misc. bits */
uchar type; /* Drop file type */
uint16_t quotewrap_cols; /* When word-wrapping quoted text, use this width (if non-zero */
......@@ -352,7 +352,7 @@ typedef struct { /* Command Shells */
char code[LEN_CODE+1];
char name[41], /* Name (description) */
arstr[LEN_ARSTR+1]; /* Access Requirement */
uchar *ar;
uchar ar[LEN_ARSTR+1];
uint32_t misc;
} shell_t;
......@@ -467,7 +467,7 @@ typedef struct
uint16_t sys_lastnode; /* Last displayable node number */
uint16_t sys_autonode; /* First node number for autonode */
char sys_chat_arstr[LEN_ARSTR+1]; /* chat override */
uchar * sys_chat_ar;
uchar sys_chat_ar[LEN_ARSTR+1];
int32_t msg_misc; /* Global Message-Related Settings (upper 16-bits default to on) */
int32_t file_misc; /* File Misc Settings */
......@@ -489,7 +489,7 @@ typedef struct
char node_phone[13], /* Phone number of this node */
node_name[41]; /* Name of this node */
char node_arstr[LEN_ARSTR+1]; /* Node minimum requirements */
uchar *node_ar;
uchar node_ar[LEN_ARSTR+1];
uint32_t node_cost; /* Node cost to call - in credits */
uchar node_dollars_per_call; /* Billing Node Dollars Per Call */
uint16_t node_sem_check; /* Seconds between semaphore checks */
......
......@@ -50,18 +50,6 @@
extern "C" {
#endif
extern const char* scfgnulstr;
#if defined(SCFG) /* Don't compile AR strings for SCFG */
#define ARSTR(str,cfg) NULL
#define FREE_AR(x)
#else
extern const uchar* nular;
#define ARSTR(str,cfg) arstr(NULL,str,cfg)
/* allocated with arstr() */
#define FREE_AR(x) if(x!=NULL && x!=nular) { FREE(x); x=NULL; }
#endif
char* get_alloc(long *offset, char *outstr, int maxlen, FILE *instream);
BOOL allocerr(FILE*, char* error, long offset, char *fname, uint size);
char* readline(long *offset, char *str, int maxlen, FILE *stream);
......
......@@ -93,7 +93,7 @@ BOOL read_node_cfg(scfg_t* cfg, char* error)
get_int(cfg->node_valuser,instream);
get_int(cfg->node_minbps,instream);
get_str(cfg->node_arstr,instream);
cfg->node_ar=ARSTR(cfg->node_arstr, cfg);
arstr(NULL,cfg->node_arstr, cfg, cfg->node_ar);
get_int(cfg->node_dollars_per_call,instream);
get_str(cfg->node_editor,instream);
......@@ -239,7 +239,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error)
get_int(cfg->sys_def_stat,instream); /* default status line */
get_str(cfg->sys_chat_arstr,instream);
cfg->sys_chat_ar=ARSTR(cfg->sys_chat_arstr,cfg);
arstr(NULL,cfg->sys_chat_arstr,cfg,cfg->sys_chat_ar);
get_int(cfg->cdt_min_value,instream);
get_int(cfg->max_minutes,instream);
......@@ -411,7 +411,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error)
get_str(cfg->shell[i]->name,instream);
get_str(cfg->shell[i]->code,instream);
get_str(cfg->shell[i]->arstr,instream);
cfg->shell[i]->ar=ARSTR(cfg->shell[i]->arstr,cfg);
arstr(NULL,cfg->shell[i]->arstr,cfg,cfg->shell[i]->ar);
get_int(cfg->shell[i]->misc,instream);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -451,7 +451,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error)
get_int(cfg->mail_maxcrcs,instream);
get_int(cfg->mail_maxage,instream);
get_str(cfg->preqwk_arstr,instream);
cfg->preqwk_ar=ARSTR(cfg->preqwk_arstr,cfg);
arstr(NULL, cfg->preqwk_arstr, cfg, cfg->preqwk_ar);
get_int(cfg->smb_retry_time,instream); /* odd byte */
if(!cfg->smb_retry_time)
......@@ -487,7 +487,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error)
get_str(cfg->grp[i]->sname,instream);
get_str(cfg->grp[i]->arstr,instream);
cfg->grp[i]->ar=ARSTR(cfg->grp[i]->arstr,cfg);
arstr(NULL, cfg->grp[i]->arstr, cfg, cfg->grp[i]->ar);
get_str(cfg->grp[i]->code_prefix,instream);
......@@ -541,10 +541,10 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error)
get_str(cfg->sub[i]->post_arstr,instream);
get_str(cfg->sub[i]->op_arstr,instream);
cfg->sub[i]->ar=ARSTR(cfg->sub[i]->arstr,cfg);
cfg->sub[i]->read_ar=ARSTR(cfg->sub[i]->read_arstr,cfg);
cfg->sub[i]->post_ar=ARSTR(cfg->sub[i]->post_arstr,cfg);
cfg->sub[i]->op_ar=ARSTR(cfg->sub[i]->op_arstr,cfg);
arstr(NULL, cfg->sub[i]->arstr, cfg, cfg->sub[i]->ar);
arstr(NULL, cfg->sub[i]->read_arstr, cfg, cfg->sub[i]->read_ar);
arstr(NULL, cfg->sub[i]->post_arstr, cfg, cfg->sub[i]->post_ar);
arstr(NULL, cfg->sub[i]->op_arstr, cfg, cfg->sub[i]->op_ar);
get_int(cfg->sub[i]->misc,instream);
if((cfg->sub[i]->misc&(SUB_FIDO|SUB_INET)) && !(cfg->sub[i]->misc&SUB_QNET))
......@@ -578,7 +578,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error)
#endif
get_str(cfg->sub[i]->mod_arstr,instream);
cfg->sub[i]->mod_ar=ARSTR(cfg->sub[i]->mod_arstr,cfg);
arstr(NULL, cfg->sub[i]->mod_arstr, cfg,cfg->sub[i]->mod_ar);
get_int(cfg->sub[i]->qwkconf,instream);
get_int(c,instream); // unused
......@@ -735,8 +735,6 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error)
void free_node_cfg(scfg_t* cfg)
{
FREE_AR(cfg->node_ar);
if(cfg->mdm_result!=NULL) {
FREE_AND_NULL(cfg->mdm_result);
}
......@@ -746,17 +744,8 @@ void free_main_cfg(scfg_t* cfg)
{
int i;
FREE_AR(cfg->sys_chat_ar);
#if 0
if(cfg->node_path!=NULL) {
for(i=0;i<cfg->sys_nodes;i++)
FREE_AND_NULL(cfg->node_path[i]);
FREE_AND_NULL(cfg->node_path);
}
#endif
if(cfg->shell!=NULL) {
for(i=0;i<cfg->total_shells;i++) {
FREE_AR(cfg->shell[i]->ar);
FREE_AND_NULL(cfg->shell[i]);
}
FREE_AND_NULL(cfg->shell);
......@@ -768,10 +757,8 @@ void free_msgs_cfg(scfg_t* cfg)
{
int i;
FREE_AR(cfg->preqwk_ar);
if(cfg->grp!=NULL) {
for(i=0;i<cfg->total_grps;i++) {
FREE_AR(cfg->grp[i]->ar);
FREE_AND_NULL(cfg->grp[i]);
}
FREE_AND_NULL(cfg->grp);
......@@ -780,11 +767,6 @@ void free_msgs_cfg(scfg_t* cfg)
if(cfg->sub!=NULL) {
for(i=0;i<cfg->total_subs;i++) {
FREE_AR(cfg->sub[i]->ar);
FREE_AR(cfg->sub[i]->read_ar);
FREE_AR(cfg->sub[i]->post_ar);
FREE_AR(cfg->sub[i]->op_ar);
FREE_AR(cfg->sub[i]->mod_ar);
FREE_AND_NULL(cfg->sub[i]);
}
FREE_AND_NULL(cfg->sub);
......
......@@ -97,7 +97,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->fextr[i]->ext,instream);
get_str(cfg->fextr[i]->cmd,instream);
get_str(cfg->fextr[i]->arstr,instream);
cfg->fextr[i]->ar=ARSTR(cfg->fextr[i]->arstr,cfg);
arstr(NULL, cfg->fextr[i]->arstr, cfg, cfg->fextr[i]->ar);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -125,7 +125,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->fcomp[i]->ext,instream);
get_str(cfg->fcomp[i]->cmd,instream);
get_str(cfg->fcomp[i]->arstr,instream);
cfg->fcomp[i]->ar=ARSTR(cfg->fcomp[i]->arstr,cfg);
arstr(NULL, cfg->fcomp[i]->arstr, cfg, cfg->fcomp[i]->ar);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -152,7 +152,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->fview[i]->ext,instream);
get_str(cfg->fview[i]->cmd,instream);
get_str(cfg->fview[i]->arstr,instream);
cfg->fview[i]->ar=ARSTR(cfg->fview[i]->arstr,cfg);
arstr(NULL, cfg->fview[i]->arstr, cfg, cfg->fview[i]->ar);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -180,7 +180,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->ftest[i]->cmd,instream);
get_str(cfg->ftest[i]->workstr,instream);
get_str(cfg->ftest[i]->arstr,instream);
cfg->ftest[i]->ar=ARSTR(cfg->ftest[i]->arstr,cfg);
arstr(NULL, cfg->ftest[i]->arstr, cfg, cfg->ftest[i]->ar);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -209,7 +209,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->dlevent[i]->cmd,instream);
get_str(cfg->dlevent[i]->workstr,instream);
get_str(cfg->dlevent[i]->arstr,instream);
cfg->dlevent[i]->ar=ARSTR(cfg->dlevent[i]->arstr,cfg);
arstr(NULL, cfg->dlevent[i]->arstr, cfg, cfg->dlevent[i]->ar);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -245,7 +245,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->prot[i]->bicmd,instream);
get_int(cfg->prot[i]->misc,instream);
get_str(cfg->prot[i]->arstr,instream);
cfg->prot[i]->ar=ARSTR(cfg->prot[i]->arstr,cfg);
arstr(NULL, cfg->prot[i]->arstr, cfg, cfg->prot[i]->ar);
for(j=0;j<8;j++)
get_int(n,instream);
......@@ -304,7 +304,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->lib[i]->sname,instream);
get_str(cfg->lib[i]->arstr,instream);
cfg->lib[i]->ar=ARSTR(cfg->lib[i]->arstr,cfg);
arstr(NULL, cfg->lib[i]->arstr, cfg, cfg->lib[i]->ar);
get_str(cfg->lib[i]->parent_path,instream);
......@@ -366,10 +366,10 @@ BOOL read_file_cfg(scfg_t* cfg, char* error)
get_str(cfg->dir[i]->dl_arstr,instream);
get_str(cfg->dir[i]->op_arstr,instream);