Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, libarchive.org for more info) to build successfully.

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)