|
|
1.1 ! root 1: /* scfglib2.c */ ! 2: ! 3: /* Synchronet configuration library routines */ ! 4: ! 5: /* $Id: scfglib2.c,v 1.39 2005/09/20 03:39:52 deuce Exp $ */ ! 6: ! 7: /**************************************************************************** ! 8: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 10: * * ! 11: * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html * ! 12: * * ! 13: * This program is free software; you can redistribute it and/or * ! 14: * modify it under the terms of the GNU General Public License * ! 15: * as published by the Free Software Foundation; either version 2 * ! 16: * of the License, or (at your option) any later version. * ! 17: * See the GNU General Public License for more details: gpl.txt or * ! 18: * http://www.fsf.org/copyleft/gpl.html * ! 19: * * ! 20: * Anonymous FTP access to the most recent released source is available at * ! 21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 22: * * ! 23: * Anonymous CVS access to the development source and modification history * ! 24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 26: * (just hit return, no password is necessary) * ! 27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 28: * * ! 29: * For Synchronet coding style and modification guidelines, see * ! 30: * http://www.synchro.net/source.html * ! 31: * * ! 32: * You are encouraged to submit any modifications (preferably in Unix diff * ! 33: * format) via e-mail to [email protected] * ! 34: * * ! 35: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 36: ****************************************************************************/ ! 37: ! 38: #include "sbbs.h" ! 39: #include "scfglib.h" ! 40: ! 41: /****************************************************************************/ ! 42: /* Reads in LIBS.CNF and initializes the associated variables */ ! 43: /****************************************************************************/ ! 44: BOOL read_file_cfg(scfg_t* cfg, char* error) ! 45: { ! 46: char str[MAX_PATH+1],fname[13],c,cmd[LEN_CMD+1]; ! 47: short i,j,n; ! 48: long offset=0,t; ! 49: FILE *instream; ! 50: ! 51: strcpy(fname,"file.cnf"); ! 52: sprintf(str,"%s%s",cfg->ctrl_dir,fname); ! 53: if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { ! 54: sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); ! 55: return(FALSE); ! 56: } ! 57: ! 58: get_int(cfg->min_dspace,instream); ! 59: get_int(cfg->max_batup,instream); ! 60: ! 61: get_int(cfg->max_batdn,instream); ! 62: ! 63: get_int(cfg->max_userxfer,instream); ! 64: ! 65: get_int(t,instream); /* unused - was cdt_byte_value */ ! 66: get_int(cfg->cdt_up_pct,instream); ! 67: get_int(cfg->cdt_dn_pct,instream); ! 68: get_int(t,instream); /* unused - was temp_ext */ ! 69: get_str(cmd,instream); /* unused - was temp_cmd */ ! 70: get_int(cfg->leech_pct,instream); ! 71: get_int(cfg->leech_sec,instream); ! 72: get_int(cfg->file_misc,instream); ! 73: ! 74: for(i=0;i<30;i++) ! 75: get_int(n,instream); ! 76: ! 77: /**************************/ ! 78: /* Extractable File Types */ ! 79: /**************************/ ! 80: ! 81: get_int(cfg->total_fextrs,instream); ! 82: ! 83: if(cfg->total_fextrs) { ! 84: if((cfg->fextr=(fextr_t **)malloc(sizeof(fextr_t *)*cfg->total_fextrs))==NULL) ! 85: return allocerr(instream,error,offset,fname,sizeof(fextr_t*)*cfg->total_fextrs); ! 86: } else ! 87: cfg->fextr=NULL; ! 88: ! 89: for(i=0; i<cfg->total_fextrs; i++) { ! 90: if(feof(instream)) ! 91: break; ! 92: if((cfg->fextr[i]=(fextr_t *)malloc(sizeof(fextr_t)))==NULL) ! 93: return allocerr(instream,error,offset,fname,sizeof(fextr_t)); ! 94: memset(cfg->fextr[i],0,sizeof(fextr_t)); ! 95: get_str(cfg->fextr[i]->ext,instream); ! 96: get_str(cfg->fextr[i]->cmd,instream); ! 97: get_str(cfg->fextr[i]->arstr,instream); ! 98: cfg->fextr[i]->ar=ARSTR(cfg->fextr[i]->arstr,cfg); ! 99: ! 100: for(j=0;j<8;j++) ! 101: get_int(n,instream); ! 102: } ! 103: cfg->total_fextrs=i; ! 104: ! 105: /***************************/ ! 106: /* Compressable File Types */ ! 107: /***************************/ ! 108: ! 109: get_int(cfg->total_fcomps,instream); ! 110: ! 111: if(cfg->total_fcomps) { ! 112: if((cfg->fcomp=(fcomp_t **)malloc(sizeof(fcomp_t *)*cfg->total_fcomps))==NULL) ! 113: return allocerr(instream,error,offset,fname,sizeof(fcomp_t*)*cfg->total_fcomps); ! 114: } else ! 115: cfg->fcomp=NULL; ! 116: ! 117: for(i=0; i<cfg->total_fcomps; i++) { ! 118: if(feof(instream)) ! 119: break; ! 120: if((cfg->fcomp[i]=(fcomp_t *)malloc(sizeof(fcomp_t)))==NULL) ! 121: return allocerr(instream,error,offset,fname,sizeof(fcomp_t)); ! 122: memset(cfg->fcomp[i],0,sizeof(fcomp_t)); ! 123: get_str(cfg->fcomp[i]->ext,instream); ! 124: get_str(cfg->fcomp[i]->cmd,instream); ! 125: get_str(cfg->fcomp[i]->arstr,instream); ! 126: cfg->fcomp[i]->ar=ARSTR(cfg->fcomp[i]->arstr,cfg); ! 127: ! 128: for(j=0;j<8;j++) ! 129: get_int(n,instream); ! 130: } ! 131: cfg->total_fcomps=i; ! 132: ! 133: /***********************/ ! 134: /* Viewable File Types */ ! 135: /***********************/ ! 136: ! 137: get_int(cfg->total_fviews,instream); ! 138: ! 139: if(cfg->total_fviews) { ! 140: if((cfg->fview=(fview_t **)malloc(sizeof(fview_t *)*cfg->total_fviews))==NULL) ! 141: return allocerr(instream,error,offset,fname,sizeof(fview_t*)*cfg->total_fviews); ! 142: } else ! 143: cfg->fview=NULL; ! 144: ! 145: for(i=0; i<cfg->total_fviews; i++) { ! 146: if(feof(instream)) break; ! 147: if((cfg->fview[i]=(fview_t *)malloc(sizeof(fview_t)))==NULL) ! 148: return allocerr(instream,error,offset,fname,sizeof(fview_t)); ! 149: memset(cfg->fview[i],0,sizeof(fview_t)); ! 150: get_str(cfg->fview[i]->ext,instream); ! 151: get_str(cfg->fview[i]->cmd,instream); ! 152: get_str(cfg->fview[i]->arstr,instream); ! 153: cfg->fview[i]->ar=ARSTR(cfg->fview[i]->arstr,cfg); ! 154: ! 155: for(j=0;j<8;j++) ! 156: get_int(n,instream); ! 157: } ! 158: cfg->total_fviews=i; ! 159: ! 160: /***********************/ ! 161: /* Testable File Types */ ! 162: /***********************/ ! 163: ! 164: get_int(cfg->total_ftests,instream); ! 165: ! 166: if(cfg->total_ftests) { ! 167: if((cfg->ftest=(ftest_t **)malloc(sizeof(ftest_t *)*cfg->total_ftests))==NULL) ! 168: return allocerr(instream,error,offset,fname,sizeof(ftest_t*)*cfg->total_ftests); ! 169: } else ! 170: cfg->ftest=NULL; ! 171: ! 172: for(i=0; i<cfg->total_ftests; i++) { ! 173: if(feof(instream)) break; ! 174: if((cfg->ftest[i]=(ftest_t *)malloc(sizeof(ftest_t)))==NULL) ! 175: return allocerr(instream,error,offset,fname,sizeof(ftest_t)); ! 176: memset(cfg->ftest[i],0,sizeof(ftest_t)); ! 177: get_str(cfg->ftest[i]->ext,instream); ! 178: get_str(cfg->ftest[i]->cmd,instream); ! 179: get_str(cfg->ftest[i]->workstr,instream); ! 180: get_str(cfg->ftest[i]->arstr,instream); ! 181: cfg->ftest[i]->ar=ARSTR(cfg->ftest[i]->arstr,cfg); ! 182: ! 183: for(j=0;j<8;j++) ! 184: get_int(n,instream); ! 185: } ! 186: cfg->total_ftests=i; ! 187: ! 188: /*******************/ ! 189: /* Download events */ ! 190: /*******************/ ! 191: ! 192: get_int(cfg->total_dlevents,instream); ! 193: ! 194: if(cfg->total_dlevents) { ! 195: if((cfg->dlevent=(dlevent_t **)malloc(sizeof(dlevent_t *)*cfg->total_dlevents)) ! 196: ==NULL) ! 197: return allocerr(instream,error,offset,fname,sizeof(dlevent_t*)*cfg->total_dlevents); ! 198: } else ! 199: cfg->dlevent=NULL; ! 200: ! 201: for(i=0; i<cfg->total_dlevents; i++) { ! 202: if(feof(instream)) break; ! 203: if((cfg->dlevent[i]=(dlevent_t *)malloc(sizeof(dlevent_t)))==NULL) ! 204: return allocerr(instream,error,offset,fname,sizeof(dlevent_t)); ! 205: memset(cfg->dlevent[i],0,sizeof(dlevent_t)); ! 206: get_str(cfg->dlevent[i]->ext,instream); ! 207: get_str(cfg->dlevent[i]->cmd,instream); ! 208: get_str(cfg->dlevent[i]->workstr,instream); ! 209: get_str(cfg->dlevent[i]->arstr,instream); ! 210: cfg->dlevent[i]->ar=ARSTR(cfg->dlevent[i]->arstr,cfg); ! 211: ! 212: for(j=0;j<8;j++) ! 213: get_int(n,instream); ! 214: } ! 215: cfg->total_dlevents=i; ! 216: ! 217: ! 218: /***************************/ ! 219: /* File Transfer Protocols */ ! 220: /***************************/ ! 221: ! 222: get_int(cfg->total_prots,instream); ! 223: ! 224: if(cfg->total_prots) { ! 225: if((cfg->prot=(prot_t **)malloc(sizeof(prot_t *)*cfg->total_prots))==NULL) ! 226: return allocerr(instream,error,offset,fname,sizeof(prot_t*)*cfg->total_prots); ! 227: } else ! 228: cfg->prot=NULL; ! 229: ! 230: for(i=0;i<cfg->total_prots;i++) { ! 231: if(feof(instream)) break; ! 232: if((cfg->prot[i]=(prot_t *)malloc(sizeof(prot_t)))==NULL) ! 233: return allocerr(instream,error,offset,fname,sizeof(prot_t)); ! 234: memset(cfg->prot[i],0,sizeof(prot_t)); ! 235: ! 236: get_int(cfg->prot[i]->mnemonic,instream); ! 237: get_str(cfg->prot[i]->name,instream); ! 238: get_str(cfg->prot[i]->ulcmd,instream); ! 239: get_str(cfg->prot[i]->dlcmd,instream); ! 240: get_str(cfg->prot[i]->batulcmd,instream); ! 241: get_str(cfg->prot[i]->batdlcmd,instream); ! 242: get_str(cfg->prot[i]->blindcmd,instream); ! 243: get_str(cfg->prot[i]->bicmd,instream); ! 244: get_int(cfg->prot[i]->misc,instream); ! 245: get_str(cfg->prot[i]->arstr,instream); ! 246: cfg->prot[i]->ar=ARSTR(cfg->prot[i]->arstr,cfg); ! 247: ! 248: for(j=0;j<8;j++) ! 249: get_int(n,instream); ! 250: } ! 251: cfg->total_prots=i; ! 252: ! 253: /************************/ ! 254: /* Alternate File Paths */ ! 255: /************************/ ! 256: ! 257: get_int(cfg->altpaths,instream); ! 258: ! 259: if(cfg->altpaths) { ! 260: if((cfg->altpath=(char **)malloc(sizeof(char *)*cfg->altpaths))==NULL) ! 261: return allocerr(instream,error,offset,fname,sizeof(char *)*cfg->altpaths); ! 262: } else ! 263: cfg->altpath=NULL; ! 264: ! 265: for(i=0;i<cfg->altpaths;i++) { ! 266: if(feof(instream)) break; ! 267: fread(str,LEN_DIR+1,1,instream); ! 268: offset+=LEN_DIR+1; ! 269: backslash(str); ! 270: j=LEN_DIR+1; ! 271: if((cfg->altpath[i]=(char *)malloc(j))==NULL) ! 272: return allocerr(instream,error,offset,fname,j); ! 273: memset(cfg->altpath[i],0,j); ! 274: strcpy(cfg->altpath[i],str); ! 275: for(j=0;j<8;j++) ! 276: get_int(n,instream); ! 277: } ! 278: ! 279: cfg->altpaths=i; ! 280: ! 281: /******************/ ! 282: /* File Libraries */ ! 283: /******************/ ! 284: ! 285: get_int(cfg->total_libs,instream); ! 286: ! 287: if(cfg->total_libs) { ! 288: if((cfg->lib=(lib_t **)malloc(sizeof(lib_t *)*cfg->total_libs))==NULL) ! 289: return allocerr(instream,error,offset,fname,sizeof(lib_t *)*cfg->total_libs); ! 290: } else ! 291: cfg->lib=NULL; ! 292: ! 293: for(i=0;i<cfg->total_libs;i++) { ! 294: if(feof(instream)) break; ! 295: if((cfg->lib[i]=(lib_t *)malloc(sizeof(lib_t)))==NULL) ! 296: return allocerr(instream,error,offset,fname,sizeof(lib_t)); ! 297: memset(cfg->lib[i],0,sizeof(lib_t)); ! 298: cfg->lib[i]->offline_dir=INVALID_DIR; ! 299: ! 300: get_str(cfg->lib[i]->lname,instream); ! 301: get_str(cfg->lib[i]->sname,instream); ! 302: ! 303: get_str(cfg->lib[i]->arstr,instream); ! 304: cfg->lib[i]->ar=ARSTR(cfg->lib[i]->arstr,cfg); ! 305: ! 306: get_str(cfg->lib[i]->parent_path,instream); ! 307: ! 308: get_str(cfg->lib[i]->code_prefix,instream); ! 309: ! 310: get_int(c,instream); ! 311: ! 312: for(j=0;j<3;j++) ! 313: get_int(n,instream); /* 0x0000 */ ! 314: ! 315: for(j=0;j<16;j++) ! 316: get_int(n,instream); /* 0xffff */ ! 317: } ! 318: cfg->total_libs=i; ! 319: ! 320: /********************/ ! 321: /* File Directories */ ! 322: /********************/ ! 323: ! 324: cfg->sysop_dir=cfg->user_dir=cfg->upload_dir=INVALID_DIR; ! 325: get_int(cfg->total_dirs,instream); ! 326: ! 327: if(cfg->total_dirs) { ! 328: if((cfg->dir=(dir_t **)malloc(sizeof(dir_t *)*(cfg->total_dirs+1)))==NULL) ! 329: return allocerr(instream,error,offset,fname,sizeof(dir_t *)*(cfg->total_dirs+1)); ! 330: } else ! 331: cfg->dir=NULL; ! 332: ! 333: for(i=0;i<cfg->total_dirs;i++) { ! 334: if(feof(instream)) break; ! 335: if((cfg->dir[i]=(dir_t *)malloc(sizeof(dir_t)))==NULL) ! 336: return allocerr(instream,error,offset,fname,sizeof(dir_t)); ! 337: memset(cfg->dir[i],0,sizeof(dir_t)); ! 338: ! 339: get_int(cfg->dir[i]->lib,instream); ! 340: get_str(cfg->dir[i]->lname,instream); ! 341: get_str(cfg->dir[i]->sname,instream); ! 342: ! 343: if(!stricmp(cfg->dir[i]->sname,"SYSOP")) /* Sysop upload directory */ ! 344: cfg->sysop_dir=i; ! 345: else if(!stricmp(cfg->dir[i]->sname,"USER")) /* User to User xfer dir */ ! 346: cfg->user_dir=i; ! 347: else if(!stricmp(cfg->dir[i]->sname,"UPLOADS")) /* Upload directory */ ! 348: cfg->upload_dir=i; ! 349: else if(!stricmp(cfg->dir[i]->sname,"OFFLINE")) /* Offline files dir */ ! 350: cfg->lib[cfg->dir[i]->lib]->offline_dir=i; ! 351: ! 352: get_str(cfg->dir[i]->code_suffix,instream); ! 353: ! 354: get_str(cfg->dir[i]->data_dir,instream); ! 355: ! 356: get_str(cfg->dir[i]->arstr,instream); ! 357: get_str(cfg->dir[i]->ul_arstr,instream); ! 358: get_str(cfg->dir[i]->dl_arstr,instream); ! 359: get_str(cfg->dir[i]->op_arstr,instream); ! 360: ! 361: cfg->dir[i]->ar=ARSTR(cfg->dir[i]->arstr,cfg); ! 362: cfg->dir[i]->ul_ar=ARSTR(cfg->dir[i]->ul_arstr,cfg); ! 363: cfg->dir[i]->dl_ar=ARSTR(cfg->dir[i]->dl_arstr,cfg); ! 364: cfg->dir[i]->op_ar=ARSTR(cfg->dir[i]->op_arstr,cfg); ! 365: ! 366: get_str(cfg->dir[i]->path,instream); ! 367: ! 368: get_str(cfg->dir[i]->upload_sem,instream); ! 369: ! 370: get_int(cfg->dir[i]->maxfiles,instream); ! 371: if(cfg->dir[i]->maxfiles>MAX_FILES) ! 372: cfg->dir[i]->maxfiles=MAX_FILES; ! 373: get_str(cfg->dir[i]->exts,instream); ! 374: get_int(cfg->dir[i]->misc,instream); ! 375: get_int(cfg->dir[i]->seqdev,instream); ! 376: get_int(cfg->dir[i]->sort,instream); ! 377: get_str(cfg->dir[i]->ex_arstr,instream); ! 378: cfg->dir[i]->ex_ar=ARSTR(cfg->dir[i]->ex_arstr,cfg); ! 379: ! 380: get_int(cfg->dir[i]->maxage,instream); ! 381: get_int(cfg->dir[i]->up_pct,instream); ! 382: get_int(cfg->dir[i]->dn_pct,instream); ! 383: get_int(c,instream); ! 384: for(j=0;j<24;j++) ! 385: get_int(n,instream); ! 386: } ! 387: ! 388: cfg->total_dirs=i; ! 389: ! 390: /**********************/ ! 391: /* Text File Sections */ ! 392: /**********************/ ! 393: ! 394: get_int(cfg->total_txtsecs,instream); ! 395: ! 396: ! 397: if(cfg->total_txtsecs) { ! 398: if((cfg->txtsec=(txtsec_t **)malloc(sizeof(txtsec_t *)*cfg->total_txtsecs))==NULL) ! 399: return allocerr(instream,error,offset,fname,sizeof(txtsec_t *)*cfg->total_txtsecs); ! 400: } else ! 401: cfg->txtsec=NULL; ! 402: ! 403: for(i=0;i<cfg->total_txtsecs;i++) { ! 404: if(feof(instream)) break; ! 405: if((cfg->txtsec[i]=(txtsec_t *)malloc(sizeof(txtsec_t)))==NULL) ! 406: return allocerr(instream,error,offset,fname,sizeof(txtsec_t)); ! 407: memset(cfg->txtsec[i],0,sizeof(txtsec_t)); ! 408: ! 409: get_str(cfg->txtsec[i]->name,instream); ! 410: get_str(cfg->txtsec[i]->code,instream); ! 411: get_str(cfg->txtsec[i]->arstr,instream); ! 412: cfg->txtsec[i]->ar=ARSTR(cfg->txtsec[i]->arstr,cfg); ! 413: ! 414: for(j=0;j<8;j++) ! 415: get_int(n,instream); ! 416: } ! 417: cfg->total_txtsecs=i; ! 418: ! 419: fclose(instream); ! 420: return(TRUE); ! 421: } ! 422: ! 423: /****************************************************************************/ ! 424: /* Reads in XTRN.CNF and initializes the associated variables */ ! 425: /****************************************************************************/ ! 426: BOOL read_xtrn_cfg(scfg_t* cfg, char* error) ! 427: { ! 428: char str[MAX_PATH+1],fname[13],c; ! 429: short i,j,n; ! 430: long offset=0; ! 431: FILE *instream; ! 432: ! 433: strcpy(fname,"xtrn.cnf"); ! 434: sprintf(str,"%s%s",cfg->ctrl_dir,fname); ! 435: if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { ! 436: sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); ! 437: return(FALSE); ! 438: } ! 439: ! 440: /*************/ ! 441: /* Swap list */ ! 442: /*************/ ! 443: ! 444: get_int(cfg->total_swaps,instream); ! 445: ! 446: if(cfg->total_swaps) { ! 447: if((cfg->swap=(swap_t **)malloc(sizeof(swap_t *)*cfg->total_swaps))==NULL) ! 448: return allocerr(instream,error,offset,fname,sizeof(swap_t *)*cfg->total_swaps); ! 449: } else ! 450: cfg->swap=NULL; ! 451: ! 452: for(i=0;i<cfg->total_swaps;i++) { ! 453: if(feof(instream)) break; ! 454: if((cfg->swap[i]=(swap_t *)malloc(sizeof(swap_t)))==NULL) ! 455: return allocerr(instream,error,offset,fname,sizeof(swap_t)); ! 456: get_str(cfg->swap[i]->cmd,instream); ! 457: } ! 458: cfg->total_swaps=i; ! 459: ! 460: /********************/ ! 461: /* External Editors */ ! 462: /********************/ ! 463: ! 464: get_int(cfg->total_xedits,instream); ! 465: ! 466: if(cfg->total_xedits) { ! 467: if((cfg->xedit=(xedit_t **)malloc(sizeof(xedit_t *)*cfg->total_xedits))==NULL) ! 468: return allocerr(instream,error,offset,fname,sizeof(xedit_t *)*cfg->total_xedits); ! 469: } else ! 470: cfg->xedit=NULL; ! 471: ! 472: for(i=0;i<cfg->total_xedits;i++) { ! 473: if(feof(instream)) break; ! 474: if((cfg->xedit[i]=(xedit_t *)malloc(sizeof(xedit_t)))==NULL) ! 475: return allocerr(instream,error,offset,fname,sizeof(xedit_t)); ! 476: memset(cfg->xedit[i],0,sizeof(xedit_t)); ! 477: ! 478: get_str(cfg->xedit[i]->name,instream); ! 479: get_str(cfg->xedit[i]->code,instream); ! 480: get_str(cfg->xedit[i]->lcmd,instream); ! 481: get_str(cfg->xedit[i]->rcmd,instream); ! 482: ! 483: get_int(cfg->xedit[i]->misc,instream); ! 484: get_str(cfg->xedit[i]->arstr,instream); ! 485: cfg->xedit[i]->ar=ARSTR(cfg->xedit[i]->arstr,cfg); ! 486: ! 487: get_int(cfg->xedit[i]->type,instream); ! 488: get_int(c,instream); ! 489: for(j=0;j<7;j++) ! 490: get_int(n,instream); ! 491: } ! 492: cfg->total_xedits=i; ! 493: ! 494: ! 495: /*****************************/ ! 496: /* External Program Sections */ ! 497: /*****************************/ ! 498: ! 499: get_int(cfg->total_xtrnsecs,instream); ! 500: ! 501: if(cfg->total_xtrnsecs) { ! 502: if((cfg->xtrnsec=(xtrnsec_t **)malloc(sizeof(xtrnsec_t *)*cfg->total_xtrnsecs)) ! 503: ==NULL) ! 504: return allocerr(instream,error,offset,fname,sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); ! 505: } else ! 506: cfg->xtrnsec=NULL; ! 507: ! 508: for(i=0;i<cfg->total_xtrnsecs;i++) { ! 509: if(feof(instream)) break; ! 510: if((cfg->xtrnsec[i]=(xtrnsec_t *)malloc(sizeof(xtrnsec_t)))==NULL) ! 511: return allocerr(instream,error,offset,fname,sizeof(xtrnsec_t)); ! 512: memset(cfg->xtrnsec[i],0,sizeof(xtrnsec_t)); ! 513: ! 514: get_str(cfg->xtrnsec[i]->name,instream); ! 515: get_str(cfg->xtrnsec[i]->code,instream); ! 516: get_str(cfg->xtrnsec[i]->arstr,instream); ! 517: cfg->xtrnsec[i]->ar=ARSTR(cfg->xtrnsec[i]->arstr,cfg); ! 518: ! 519: for(j=0;j<8;j++) ! 520: get_int(n,instream); ! 521: } ! 522: cfg->total_xtrnsecs=i; ! 523: ! 524: ! 525: /*********************/ ! 526: /* External Programs */ ! 527: /*********************/ ! 528: ! 529: get_int(cfg->total_xtrns,instream); ! 530: ! 531: if(cfg->total_xtrns) { ! 532: if((cfg->xtrn=(xtrn_t **)malloc(sizeof(xtrn_t *)*cfg->total_xtrns))==NULL) ! 533: return allocerr(instream,error,offset,fname,sizeof(xtrn_t *)*cfg->total_xtrns); ! 534: } else ! 535: cfg->xtrn=NULL; ! 536: ! 537: for(i=0;i<cfg->total_xtrns;i++) { ! 538: if(feof(instream)) break; ! 539: if((cfg->xtrn[i]=(xtrn_t *)malloc(sizeof(xtrn_t)))==NULL) ! 540: return allocerr(instream,error,offset,fname,sizeof(xtrn_t)); ! 541: memset(cfg->xtrn[i],0,sizeof(xtrn_t)); ! 542: ! 543: get_int(cfg->xtrn[i]->sec,instream); ! 544: get_str(cfg->xtrn[i]->name,instream); ! 545: get_str(cfg->xtrn[i]->code,instream); ! 546: get_str(cfg->xtrn[i]->arstr,instream); ! 547: get_str(cfg->xtrn[i]->run_arstr,instream); ! 548: cfg->xtrn[i]->ar=ARSTR(cfg->xtrn[i]->arstr,cfg); ! 549: cfg->xtrn[i]->run_ar=ARSTR(cfg->xtrn[i]->run_arstr,cfg); ! 550: ! 551: get_int(cfg->xtrn[i]->type,instream); ! 552: get_int(cfg->xtrn[i]->misc,instream); ! 553: get_int(cfg->xtrn[i]->event,instream); ! 554: get_int(cfg->xtrn[i]->cost,instream); ! 555: get_str(cfg->xtrn[i]->cmd,instream); ! 556: get_str(cfg->xtrn[i]->clean,instream); ! 557: get_str(cfg->xtrn[i]->path,instream); ! 558: get_int(cfg->xtrn[i]->textra,instream); ! 559: get_int(cfg->xtrn[i]->maxtime,instream); ! 560: for(j=0;j<7;j++) ! 561: get_int(n,instream); ! 562: } ! 563: cfg->total_xtrns=i; ! 564: ! 565: ! 566: /****************/ ! 567: /* Timed Events */ ! 568: /****************/ ! 569: ! 570: get_int(cfg->total_events,instream); ! 571: ! 572: if(cfg->total_events) { ! 573: if((cfg->event=(event_t **)malloc(sizeof(event_t *)*cfg->total_events))==NULL) ! 574: return allocerr(instream,error,offset,fname,sizeof(event_t *)*cfg->total_events); ! 575: } else ! 576: cfg->event=NULL; ! 577: ! 578: for(i=0;i<cfg->total_events;i++) { ! 579: if(feof(instream)) break; ! 580: if((cfg->event[i]=(event_t *)malloc(sizeof(event_t)))==NULL) ! 581: return allocerr(instream,error,offset,fname,sizeof(event_t)); ! 582: memset(cfg->event[i],0,sizeof(event_t)); ! 583: ! 584: get_str(cfg->event[i]->code,instream); ! 585: get_str(cfg->event[i]->cmd,instream); ! 586: get_int(cfg->event[i]->days,instream); ! 587: get_int(cfg->event[i]->time,instream); ! 588: get_int(cfg->event[i]->node,instream); ! 589: get_int(cfg->event[i]->misc,instream); ! 590: get_str(cfg->event[i]->dir,instream); ! 591: get_int(cfg->event[i]->freq,instream); ! 592: get_int(cfg->event[i]->mdays,instream); ! 593: ! 594: for(j=0;j<5;j++) ! 595: get_int(n,instream); ! 596: } ! 597: cfg->total_events=i; ! 598: ! 599: /********************************/ ! 600: /* Native (32-bit) Program list */ ! 601: /********************************/ ! 602: ! 603: get_int(cfg->total_natvpgms,instream); ! 604: ! 605: if(cfg->total_natvpgms) { ! 606: if((cfg->natvpgm=(natvpgm_t **)malloc(sizeof(natvpgm_t *)*cfg->total_natvpgms))==NULL) ! 607: return allocerr(instream,error,offset,fname,sizeof(natvpgm_t *)*cfg->total_natvpgms); ! 608: } else ! 609: cfg->natvpgm=NULL; ! 610: ! 611: for(i=0;i<cfg->total_natvpgms;i++) { ! 612: if(feof(instream)) break; ! 613: if((cfg->natvpgm[i]=(natvpgm_t *)malloc(sizeof(natvpgm_t)))==NULL) ! 614: return allocerr(instream,error,offset,fname,sizeof(natvpgm_t)); ! 615: get_str(cfg->natvpgm[i]->name,instream); ! 616: cfg->natvpgm[i]->misc=0; ! 617: } ! 618: cfg->total_natvpgms=i; ! 619: for(i=0;i<cfg->total_natvpgms;i++) { ! 620: if(feof(instream)) break; ! 621: get_int(cfg->natvpgm[i]->misc,instream); ! 622: } ! 623: ! 624: /*******************/ ! 625: /* Global Hot Keys */ ! 626: /*******************/ ! 627: ! 628: get_int(cfg->total_hotkeys,instream); ! 629: ! 630: if(cfg->total_hotkeys) { ! 631: if((cfg->hotkey=(hotkey_t **)malloc(sizeof(hotkey_t *)*cfg->total_hotkeys))==NULL) ! 632: return allocerr(instream,error,offset,fname,sizeof(hotkey_t *)*cfg->total_hotkeys); ! 633: } else ! 634: cfg->hotkey=NULL; ! 635: ! 636: for(i=0;i<cfg->total_hotkeys;i++) { ! 637: if(feof(instream)) break; ! 638: if((cfg->hotkey[i]=(hotkey_t *)malloc(sizeof(hotkey_t)))==NULL) ! 639: return allocerr(instream,error,offset,fname,sizeof(hotkey_t)); ! 640: memset(cfg->hotkey[i],0,sizeof(hotkey_t)); ! 641: ! 642: get_int(cfg->hotkey[i]->key,instream); ! 643: get_str(cfg->hotkey[i]->cmd,instream); ! 644: ! 645: for(j=0;j<8;j++) ! 646: get_int(n,instream); ! 647: } ! 648: cfg->total_hotkeys=i; ! 649: ! 650: /************************************/ ! 651: /* External Program-related Toggles */ ! 652: /************************************/ ! 653: get_int(cfg->xtrn_misc,instream); ! 654: ! 655: fclose(instream); ! 656: return(TRUE); ! 657: } ! 658: ! 659: /****************************************************************************/ ! 660: /* Reads in CHAT.CNF and initializes the associated variables */ ! 661: /****************************************************************************/ ! 662: BOOL read_chat_cfg(scfg_t* cfg, char* error) ! 663: { ! 664: char str[MAX_PATH+1],fname[13]; ! 665: short i,j,n; ! 666: long offset=0; ! 667: FILE *instream; ! 668: ! 669: strcpy(fname,"chat.cnf"); ! 670: sprintf(str,"%s%s",cfg->ctrl_dir,fname); ! 671: if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { ! 672: sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); ! 673: return(FALSE); ! 674: } ! 675: ! 676: /*********/ ! 677: /* Gurus */ ! 678: /*********/ ! 679: ! 680: get_int(cfg->total_gurus,instream); ! 681: ! 682: if(cfg->total_gurus) { ! 683: if((cfg->guru=(guru_t **)malloc(sizeof(guru_t *)*cfg->total_gurus))==NULL) ! 684: return allocerr(instream,error,offset,fname,sizeof(guru_t *)*cfg->total_gurus); ! 685: } else ! 686: cfg->guru=NULL; ! 687: ! 688: for(i=0;i<cfg->total_gurus;i++) { ! 689: if(feof(instream)) break; ! 690: if((cfg->guru[i]=(guru_t *)malloc(sizeof(guru_t)))==NULL) ! 691: return allocerr(instream,error,offset,fname,sizeof(guru_t)); ! 692: memset(cfg->guru[i],0,sizeof(guru_t)); ! 693: ! 694: get_str(cfg->guru[i]->name,instream); ! 695: get_str(cfg->guru[i]->code,instream); ! 696: ! 697: get_str(cfg->guru[i]->arstr,instream); ! 698: cfg->guru[i]->ar=ARSTR(cfg->guru[i]->arstr,cfg); ! 699: ! 700: for(j=0;j<8;j++) ! 701: get_int(n,instream); ! 702: } ! 703: cfg->total_chans=i; ! 704: ! 705: ! 706: /********************/ ! 707: /* Chat Action Sets */ ! 708: /********************/ ! 709: ! 710: get_int(cfg->total_actsets,instream); ! 711: ! 712: if(cfg->total_actsets) { ! 713: if((cfg->actset=(actset_t **)malloc(sizeof(actset_t *)*cfg->total_actsets))==NULL) ! 714: return allocerr(instream,error,offset,fname,sizeof(actset_t *)*cfg->total_actsets); ! 715: } else ! 716: cfg->actset=NULL; ! 717: ! 718: for(i=0;i<cfg->total_actsets;i++) { ! 719: if(feof(instream)) break; ! 720: if((cfg->actset[i]=(actset_t *)malloc(sizeof(actset_t)))==NULL) ! 721: return allocerr(instream,error,offset,fname,sizeof(actset_t)); ! 722: get_str(cfg->actset[i]->name,instream); ! 723: } ! 724: cfg->total_actsets=i; ! 725: ! 726: ! 727: /****************/ ! 728: /* Chat Actions */ ! 729: /****************/ ! 730: ! 731: get_int(cfg->total_chatacts,instream); ! 732: ! 733: if(cfg->total_chatacts) { ! 734: if((cfg->chatact=(chatact_t **)malloc(sizeof(chatact_t *)*cfg->total_chatacts)) ! 735: ==NULL) ! 736: return allocerr(instream,error,offset,fname,sizeof(chatact_t *)*cfg->total_chatacts); ! 737: } else ! 738: cfg->chatact=NULL; ! 739: ! 740: for(i=0;i<cfg->total_chatacts;i++) { ! 741: if(feof(instream)) break; ! 742: if((cfg->chatact[i]=(chatact_t *)malloc(sizeof(chatact_t)))==NULL) ! 743: return allocerr(instream,error,offset,fname,sizeof(chatact_t)); ! 744: memset(cfg->chatact[i],0,sizeof(chatact_t)); ! 745: ! 746: get_int(cfg->chatact[i]->actset,instream); ! 747: get_str(cfg->chatact[i]->cmd,instream); ! 748: get_str(cfg->chatact[i]->out,instream); ! 749: for(j=0;j<8;j++) ! 750: get_int(n,instream); ! 751: } ! 752: ! 753: cfg->total_chatacts=i; ! 754: ! 755: ! 756: /***************************/ ! 757: /* Multinode Chat Channels */ ! 758: /***************************/ ! 759: ! 760: get_int(cfg->total_chans,instream); ! 761: ! 762: if(cfg->total_chans) { ! 763: if((cfg->chan=(chan_t **)malloc(sizeof(chan_t *)*cfg->total_chans))==NULL) ! 764: return allocerr(instream,error,offset,fname,sizeof(chan_t *)*cfg->total_chans); ! 765: } else ! 766: cfg->chan=NULL; ! 767: ! 768: for(i=0;i<cfg->total_chans;i++) { ! 769: if(feof(instream)) break; ! 770: if((cfg->chan[i]=(chan_t *)malloc(sizeof(chan_t)))==NULL) ! 771: return allocerr(instream,error,offset,fname,sizeof(chan_t)); ! 772: memset(cfg->chan[i],0,sizeof(chan_t)); ! 773: ! 774: get_int(cfg->chan[i]->actset,instream); ! 775: get_str(cfg->chan[i]->name,instream); ! 776: ! 777: get_str(cfg->chan[i]->code,instream); ! 778: ! 779: get_str(cfg->chan[i]->arstr,instream); ! 780: cfg->chan[i]->ar=ARSTR(cfg->chan[i]->arstr,cfg); ! 781: ! 782: get_int(cfg->chan[i]->cost,instream); ! 783: get_int(cfg->chan[i]->guru,instream); ! 784: get_int(cfg->chan[i]->misc,instream); ! 785: for(j=0;j<8;j++) ! 786: get_int(n,instream); ! 787: } ! 788: cfg->total_chans=i; ! 789: ! 790: ! 791: /**************/ ! 792: /* Chat Pages */ ! 793: /**************/ ! 794: ! 795: get_int(cfg->total_pages,instream); ! 796: ! 797: if(cfg->total_pages) { ! 798: if((cfg->page=(page_t **)malloc(sizeof(page_t *)*cfg->total_pages))==NULL) ! 799: return allocerr(instream,error,offset,fname,sizeof(page_t *)*cfg->total_pages); ! 800: } else ! 801: cfg->page=NULL; ! 802: ! 803: for(i=0;i<cfg->total_pages;i++) { ! 804: if(feof(instream)) break; ! 805: if((cfg->page[i]=(page_t *)malloc(sizeof(page_t)))==NULL) ! 806: return allocerr(instream,error,offset,fname,sizeof(page_t)); ! 807: memset(cfg->page[i],0,sizeof(page_t)); ! 808: ! 809: get_str(cfg->page[i]->cmd,instream); ! 810: ! 811: get_str(cfg->page[i]->arstr,instream); ! 812: cfg->page[i]->ar=ARSTR(cfg->page[i]->arstr,cfg); ! 813: ! 814: get_int(cfg->page[i]->misc,instream); ! 815: for(j=0;j<8;j++) ! 816: get_int(n,instream); ! 817: } ! 818: cfg->total_pages=i; ! 819: ! 820: ! 821: fclose(instream); ! 822: return(TRUE); ! 823: } ! 824: ! 825: /****************************************************************************/ ! 826: /* Read one line of up to 256 characters from the file pointed to by */ ! 827: /* 'stream' and put upto 'maxlen' number of character into 'outstr' and */ ! 828: /* truncate spaces off end of 'outstr'. */ ! 829: /****************************************************************************/ ! 830: char *readline(long *offset, char *outstr, int maxlen, FILE *instream) ! 831: { ! 832: char str[257]; ! 833: ! 834: if(fgets(str,256,instream)==NULL) ! 835: return(NULL); ! 836: sprintf(outstr,"%.*s",maxlen,str); ! 837: truncsp(outstr); ! 838: (*offset)+=maxlen; ! 839: return(outstr); ! 840: } ! 841: ! 842: /****************************************************************************/ ! 843: /* Turns char string of flags into a long */ ! 844: /****************************************************************************/ ! 845: long aftol(char *str) ! 846: { ! 847: char ch; ! 848: size_t c=0; ! 849: ulong l=0UL; ! 850: ! 851: while(str[c]) { ! 852: ch=toupper(str[c]); ! 853: if(ch>='A' && ch<='Z') ! 854: l|=FLAG(ch); ! 855: c++; ! 856: } ! 857: return(l); ! 858: } ! 859: ! 860: /*****************************************************************************/ ! 861: /* Converts a long into an ASCII Flag string (A-Z) that represents bits 0-25 */ ! 862: /*****************************************************************************/ ! 863: char *ltoaf(long l,char *str) ! 864: { ! 865: size_t c=0; ! 866: ! 867: while(c<26) { ! 868: if(l&(long)(1L<<c)) ! 869: str[c]='A'+c; ! 870: else str[c]=' '; ! 871: c++; ! 872: } ! 873: str[c]=0; ! 874: return(str); ! 875: } ! 876: ! 877: /****************************************************************************/ ! 878: /* Returns the actual attribute code from a string of ATTR characters */ ! 879: /****************************************************************************/ ! 880: uchar attrstr(char *str) ! 881: { ! 882: uchar atr; ! 883: ulong l=0; ! 884: ! 885: atr=LIGHTGRAY; ! 886: while(str[l]) { ! 887: switch(toupper(str[l])) { ! 888: case 'H': /* High intensity */ ! 889: atr|=HIGH; ! 890: break; ! 891: case 'I': /* Blink */ ! 892: atr|=BLINK; ! 893: break; ! 894: case 'K': /* Black */ ! 895: atr=(atr&0xf8)|BLACK; ! 896: break; ! 897: case 'W': /* White */ ! 898: atr=(atr&0xf8)|LIGHTGRAY; ! 899: break; ! 900: case 'R': ! 901: atr=(uchar)((atr&0xf8)|RED); ! 902: break; ! 903: case 'G': ! 904: atr=(uchar)((atr&0xf8)|GREEN); ! 905: break; ! 906: case 'Y': /* Yellow */ ! 907: atr=(uchar)((atr&0xf8)|BROWN); ! 908: break; ! 909: case 'B': ! 910: atr=(uchar)((atr&0xf8)|BLUE); ! 911: break; ! 912: case 'M': ! 913: atr=(uchar)((atr&0xf8)|MAGENTA); ! 914: break; ! 915: case 'C': ! 916: atr=(uchar)((atr&0xf8)|CYAN); ! 917: break; ! 918: case '0': /* Black Background */ ! 919: atr=(uchar)(atr&0x8f); ! 920: break; ! 921: case '1': /* Red Background */ ! 922: atr=(uchar)((atr&0x8f)|BG_RED); ! 923: break; ! 924: case '2': /* Green Background */ ! 925: atr=(uchar)((atr&0x8f)|BG_GREEN); ! 926: break; ! 927: case '3': /* Yellow Background */ ! 928: atr=(uchar)((atr&0x8f)|BG_BROWN); ! 929: break; ! 930: case '4': /* Blue Background */ ! 931: atr=(uchar)((atr&0x8f)|BG_BLUE); ! 932: break; ! 933: case '5': /* Magenta Background */ ! 934: atr=(uchar)((atr&0x8f)|BG_MAGENTA); ! 935: break; ! 936: case '6': /* Cyan Background */ ! 937: atr=(uchar)((atr&0x8f)|BG_CYAN); ! 938: break; ! 939: case '7': /* White Background */ ! 940: atr=(uchar)((atr&0x8f)|BG_LIGHTGRAY); ! 941: break; ! 942: } ! 943: l++; ! 944: } ! 945: return(atr); ! 946: } ! 947: ! 948: void free_file_cfg(scfg_t* cfg) ! 949: { ! 950: uint i; ! 951: ! 952: if(cfg->fextr!=NULL) { ! 953: for(i=0;i<cfg->total_fextrs;i++) { ! 954: FREE_AR(cfg->fextr[i]->ar); ! 955: FREE_AND_NULL(cfg->fextr[i]); ! 956: } ! 957: FREE_AND_NULL(cfg->fextr); ! 958: } ! 959: ! 960: if(cfg->fcomp!=NULL) { ! 961: for(i=0;i<cfg->total_fcomps;i++) { ! 962: FREE_AR(cfg->fcomp[i]->ar); ! 963: FREE_AND_NULL(cfg->fcomp[i]); ! 964: } ! 965: FREE_AND_NULL(cfg->fcomp); ! 966: } ! 967: ! 968: if(cfg->fview!=NULL) { ! 969: for(i=0;i<cfg->total_fviews;i++) { ! 970: FREE_AR(cfg->fview[i]->ar); ! 971: FREE_AND_NULL(cfg->fview[i]); ! 972: } ! 973: FREE_AND_NULL(cfg->fview); ! 974: } ! 975: ! 976: if(cfg->ftest!=NULL) { ! 977: for(i=0;i<cfg->total_ftests;i++) { ! 978: FREE_AR(cfg->ftest[i]->ar); ! 979: FREE_AND_NULL(cfg->ftest[i]); ! 980: } ! 981: FREE_AND_NULL(cfg->ftest); ! 982: } ! 983: ! 984: if(cfg->dlevent!=NULL) { ! 985: for(i=0;i<cfg->total_dlevents;i++) { ! 986: FREE_AR(cfg->dlevent[i]->ar); ! 987: FREE_AND_NULL(cfg->dlevent[i]); ! 988: } ! 989: FREE_AND_NULL(cfg->dlevent); ! 990: } ! 991: ! 992: if(cfg->prot!=NULL) { ! 993: for(i=0;i<cfg->total_prots;i++) { ! 994: FREE_AR(cfg->prot[i]->ar); ! 995: FREE_AND_NULL(cfg->prot[i]); ! 996: } ! 997: FREE_AND_NULL(cfg->prot); ! 998: } ! 999: ! 1000: if(cfg->altpath!=NULL) { ! 1001: for(i=0;i<cfg->altpaths;i++) ! 1002: FREE_AND_NULL(cfg->altpath[i]); ! 1003: FREE_AND_NULL(cfg->altpath); ! 1004: } ! 1005: ! 1006: if(cfg->lib!=NULL) { ! 1007: for(i=0;i<cfg->total_libs;i++) { ! 1008: FREE_AR(cfg->lib[i]->ar); ! 1009: FREE_AND_NULL(cfg->lib[i]); ! 1010: } ! 1011: FREE_AND_NULL(cfg->lib); ! 1012: } ! 1013: ! 1014: if(cfg->dir!=NULL) { ! 1015: for(i=0;i<cfg->total_dirs;i++) { ! 1016: #if 0 /*ndef SCFG */ ! 1017: if(cfg->dir[i]->data_dir!=cfg->data_dir_dirs) ! 1018: FREE_AND_NULL(cfg->dir[i]->data_dir); ! 1019: #endif ! 1020: FREE_AR(cfg->dir[i]->ar); ! 1021: FREE_AR(cfg->dir[i]->ul_ar); ! 1022: FREE_AR(cfg->dir[i]->dl_ar); ! 1023: FREE_AR(cfg->dir[i]->op_ar); ! 1024: FREE_AR(cfg->dir[i]->ex_ar); ! 1025: FREE_AND_NULL(cfg->dir[i]); ! 1026: } ! 1027: FREE_AND_NULL(cfg->dir); ! 1028: } ! 1029: ! 1030: if(cfg->txtsec!=NULL) { ! 1031: for(i=0;i<cfg->total_txtsecs;i++) { ! 1032: FREE_AR(cfg->txtsec[i]->ar); ! 1033: FREE_AND_NULL(cfg->txtsec[i]); ! 1034: } ! 1035: FREE_AND_NULL(cfg->txtsec); ! 1036: } ! 1037: } ! 1038: ! 1039: void free_chat_cfg(scfg_t* cfg) ! 1040: { ! 1041: int i; ! 1042: ! 1043: if(cfg->actset!=NULL) { ! 1044: for(i=0;i<cfg->total_actsets;i++) { ! 1045: FREE_AND_NULL(cfg->actset[i]); ! 1046: } ! 1047: FREE_AND_NULL(cfg->actset); ! 1048: } ! 1049: ! 1050: if(cfg->chatact!=NULL) { ! 1051: for(i=0;i<cfg->total_chatacts;i++) { ! 1052: FREE_AND_NULL(cfg->chatact[i]); ! 1053: } ! 1054: FREE_AND_NULL(cfg->chatact); ! 1055: } ! 1056: ! 1057: if(cfg->chan!=NULL) { ! 1058: for(i=0;i<cfg->total_chans;i++) { ! 1059: FREE_AR(cfg->chan[i]->ar); ! 1060: FREE_AND_NULL(cfg->chan[i]); ! 1061: } ! 1062: FREE_AND_NULL(cfg->chan); ! 1063: } ! 1064: ! 1065: if(cfg->guru!=NULL) { ! 1066: for(i=0;i<cfg->total_gurus;i++) { ! 1067: FREE_AR(cfg->guru[i]->ar); ! 1068: FREE_AND_NULL(cfg->guru[i]); ! 1069: } ! 1070: FREE_AND_NULL(cfg->guru); ! 1071: } ! 1072: ! 1073: if(cfg->page!=NULL) { ! 1074: for(i=0;i<cfg->total_pages;i++) { ! 1075: FREE_AR(cfg->page[i]->ar); ! 1076: FREE_AND_NULL(cfg->page[i]); ! 1077: } ! 1078: FREE_AND_NULL(cfg->page); ! 1079: } ! 1080: ! 1081: } ! 1082: ! 1083: void free_xtrn_cfg(scfg_t* cfg) ! 1084: { ! 1085: int i; ! 1086: ! 1087: if(cfg->swap!=NULL) { ! 1088: for(i=0;i<cfg->total_swaps;i++) { ! 1089: FREE_AND_NULL(cfg->swap[i]); ! 1090: } ! 1091: FREE_AND_NULL(cfg->swap); ! 1092: } ! 1093: ! 1094: if(cfg->xedit!=NULL) { ! 1095: for(i=0;i<cfg->total_xedits;i++) { ! 1096: FREE_AR(cfg->xedit[i]->ar); ! 1097: FREE_AND_NULL(cfg->xedit[i]); ! 1098: } ! 1099: FREE_AND_NULL(cfg->xedit); ! 1100: } ! 1101: ! 1102: if(cfg->xtrnsec!=NULL) { ! 1103: for(i=0;i<cfg->total_xtrnsecs;i++) { ! 1104: FREE_AR(cfg->xtrnsec[i]->ar); ! 1105: FREE_AND_NULL(cfg->xtrnsec[i]); ! 1106: } ! 1107: FREE_AND_NULL(cfg->xtrnsec); ! 1108: } ! 1109: ! 1110: if(cfg->xtrn!=NULL) { ! 1111: for(i=0;i<cfg->total_xtrns;i++) { ! 1112: FREE_AR(cfg->xtrn[i]->ar); ! 1113: FREE_AR(cfg->xtrn[i]->run_ar); ! 1114: FREE_AND_NULL(cfg->xtrn[i]); ! 1115: } ! 1116: FREE_AND_NULL(cfg->xtrn); ! 1117: } ! 1118: ! 1119: if(cfg->event!=NULL) { ! 1120: for(i=0;i<cfg->total_events;i++) { ! 1121: FREE_AND_NULL(cfg->event[i]); ! 1122: } ! 1123: FREE_AND_NULL(cfg->event); ! 1124: } ! 1125: ! 1126: if(cfg->natvpgm!=NULL) { ! 1127: for(i=0;i<cfg->total_natvpgms;i++) { ! 1128: FREE_AND_NULL(cfg->natvpgm[i]); ! 1129: } ! 1130: FREE_AND_NULL(cfg->natvpgm); ! 1131: } ! 1132: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.