Annotation of sbbs/sbbs2/scfg/wrcnf1.c, revision 1.1.1.1

1.1       root        1: #line 2 "WRCNF1.C"
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: #include "scfg.h"
                      6: 
                      7: extern int no_msghdr,all_msghdr;
                      8: extern int no_dirchk;
                      9: 
                     10: char *crlf="\r\n";
                     11: char nulbuf[256]={0};
                     12: int  pslen;
                     13: 
                     14: #define put_int(var,stream) fwrite(&var,1,sizeof(var),stream)
                     15: #define put_str(var,stream) { pslen=strlen(var); \
                     16:                                                        fwrite(var,1,pslen > sizeof(var) \
                     17:                                                                ? sizeof(var) : pslen ,stream); \
                     18:                                                        fwrite(nulbuf,1,pslen > sizeof(var) \
                     19:                                                                ? 0 : sizeof(var)-pslen,stream); }
                     20: 
                     21: void write_node_cfg()
                     22: {
                     23:        char    str[128],cmd[64],c;
                     24:        int     i,file;
                     25:        short   n;
                     26:        FILE    *stream;
                     27: 
                     28: memset(cmd,0,64);
                     29: 
                     30: upop("Writing NODE.CNF...");
                     31: sprintf(str,"%sNODE.CNF",node_path[node_num-1]);
                     32: backup(str);
                     33: 
                     34: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
                     35:        || (stream=fdopen(file,"wb"))==NULL) {
                     36:        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
                     37:     return; }
                     38: setvbuf(stream,NULL,_IOFBF,2048);
                     39: 
                     40: put_int(node_num,stream);
                     41: put_str(node_name,stream);
                     42: put_str(node_phone,stream);
                     43: put_str(node_comspec,stream);                           /* Was node_logon */
                     44: put_int(node_misc,stream);
                     45: put_int(node_ivt,stream);
                     46: put_int(node_swap,stream);
                     47: if(node_swapdir[0]) {
                     48:     backslash(node_swapdir);
                     49:     md(node_swapdir); }              /* make sure it's a valid directory */
                     50: put_str(node_swapdir,stream);
                     51: put_int(node_valuser,stream);
                     52: put_int(node_minbps,stream);
                     53: put_str(node_ar,stream);
                     54: put_int(node_dollars_per_call,stream);
                     55: put_str(node_editor,stream);
                     56: put_str(node_viewer,stream);
                     57: put_str(node_daily,stream);
                     58: put_int(node_scrnlen,stream);
                     59: put_int(node_scrnblank,stream);
                     60: backslash(ctrl_dir);
                     61: put_str(ctrl_dir,stream);
                     62: backslash(text_dir);
                     63: put_str(text_dir,stream);
                     64: backslash(temp_dir);
                     65: put_str(temp_dir,stream);
                     66: for(i=0;i<10;i++)
                     67:        put_str(wfc_cmd[i],stream);
                     68: for(i=0;i<12;i++)
                     69:        put_str(wfc_scmd[i],stream);
                     70: put_str(mdm_hang,stream);
                     71: put_int(node_sem_check,stream);
                     72: put_int(node_stat_check,stream);
                     73: put_str(scfg_cmd,stream);
                     74: put_int(sec_warn,stream);
                     75: put_int(sec_hangup,stream);
                     76: n=0;
                     77: for(i=0;i<188;i++)                                     /* unused init to NULL */
                     78:        fwrite(&n,1,2,stream);
                     79: n=0xffff;                                                      /* unused init to 0xff */
                     80: for(i=0;i<256;i++)
                     81:     fwrite(&n,1,2,stream);
                     82: put_int(com_port,stream);
                     83: put_int(com_irq,stream);
                     84: put_int(com_base,stream);
                     85: put_int(com_rate,stream);
                     86: put_int(mdm_misc,stream);
                     87: put_str(mdm_init,stream);
                     88: put_str(mdm_spec,stream);
                     89: put_str(mdm_term,stream);
                     90: put_str(mdm_dial,stream);
                     91: put_str(mdm_offh,stream);
                     92: put_str(mdm_answ,stream);
                     93: put_int(mdm_reinit,stream);
                     94: put_int(mdm_ansdelay,stream);
                     95: put_int(mdm_rings,stream);
                     96: put_int(mdm_results,stream);
                     97: for(i=0;i<mdm_results;i++) {
                     98:        put_int(mdm_result[i].code,stream);
                     99:        put_int(mdm_result[i].rate,stream);
                    100:        put_int(mdm_result[i].cps,stream);
                    101:        put_str(mdm_result[i].str,stream); }
                    102: fclose(stream);
                    103: }
                    104: 
                    105: void free_node_cfg()
                    106: {
                    107: 
                    108: FREE(mdm_result);
                    109: }
                    110: 
                    111: void write_main_cfg()
                    112: {
                    113:        char    str[128],c=0;
                    114:        int     file;
                    115:        short   i,j,n;
                    116:        FILE    *stream;
                    117: 
                    118: upop("Writing MAIN.CNF...");
                    119: sprintf(str,"%sMAIN.CNF",ctrl_dir);
                    120: backup(str);
                    121: 
                    122: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
                    123:        || (stream=fdopen(file,"wb"))==NULL) {
                    124:        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
                    125:     return; }
                    126: setvbuf(stream,NULL,_IOFBF,2048);
                    127: 
                    128: put_str(sys_name,stream);
                    129: put_str(sys_id,stream);
                    130: put_str(sys_location,stream);
                    131: put_str(sys_phonefmt,stream);
                    132: put_str(sys_op,stream);
                    133: put_str(sys_guru,stream);
                    134: put_str(sys_pass,stream);
                    135: put_int(sys_nodes,stream);
                    136: for(i=0;i<sys_nodes;i++) {
                    137:        backslash(node_path[i]);
                    138:        fwrite(node_path[i],LEN_DIR+1,1,stream); }
                    139: backslash(data_dir);
                    140: put_str(data_dir,stream);
                    141: 
                    142: /************************************************************/
                    143: /* Create data and sub-dirs off data if not already created */
                    144: /************************************************************/
                    145: strcpy(str,data_dir);
                    146: md(str);
                    147: sprintf(str,"%sSUBS",data_dir);
                    148: md(str);
                    149: sprintf(str,"%sDIRS",data_dir);
                    150: md(str);
                    151: sprintf(str,"%sTEXT",data_dir);
                    152: md(str);
                    153: sprintf(str,"%sMSGS",data_dir);
                    154: md(str);
                    155: sprintf(str,"%sUSER",data_dir);
                    156: md(str);
                    157: sprintf(str,"%sUSER\\PTRS",data_dir);
                    158: md(str);
                    159: sprintf(str,"%sLOGS",data_dir);
                    160: md(str);
                    161: sprintf(str,"%sQNET",data_dir);
                    162: md(str);
                    163: sprintf(str,"%sFILE",data_dir);
                    164: md(str);
                    165: 
                    166: backslash(exec_dir);
                    167: put_str(exec_dir,stream);
                    168: put_str(sys_logon,stream);
                    169: put_str(sys_logout,stream);
                    170: put_str(sys_daily,stream);
                    171: put_int(sys_timezone,stream);
                    172: put_int(sys_misc,stream);
                    173: put_int(sys_lastnode,stream);
                    174: put_int(sys_autonode,stream);
                    175: put_int(uq,stream);
                    176: put_int(sys_pwdays,stream);
                    177: put_int(sys_deldays,stream);
                    178: put_int(sys_exp_warn,stream);
                    179: put_int(sys_autodel,stream);
                    180: put_int(sys_def_stat,stream);
                    181: put_str(sys_chat_ar,stream);
                    182: put_int(cdt_min_value,stream);
                    183: put_int(max_minutes,stream);
                    184: put_int(cdt_per_dollar,stream);
                    185: put_str(new_pass,stream);
                    186: put_str(new_magic,stream);
                    187: put_str(new_sif,stream);
                    188: put_str(new_sof,stream);
                    189: 
                    190: put_int(new_level,stream);
                    191: put_int(new_flags1,stream);
                    192: put_int(new_flags2,stream);
                    193: put_int(new_flags3,stream);
                    194: put_int(new_flags4,stream);
                    195: put_int(new_exempt,stream);
                    196: put_int(new_rest,stream);
                    197: put_int(new_cdt,stream);
                    198: put_int(new_min,stream);
                    199: put_str(new_xedit,stream);
                    200: put_int(new_expire,stream);
                    201: if(new_shell>total_shells)
                    202:        new_shell=0;
                    203: put_int(new_shell,stream);
                    204: put_int(new_misc,stream);
                    205: put_int(new_prot,stream);
                    206: c=0;
                    207: put_int(c,stream);
                    208: n=0;
                    209: for(i=0;i<7;i++)
                    210:        put_int(n,stream);
                    211: 
                    212: put_int(expired_level,stream);
                    213: put_int(expired_flags1,stream);
                    214: put_int(expired_flags2,stream);
                    215: put_int(expired_flags3,stream);
                    216: put_int(expired_flags4,stream);
                    217: put_int(expired_exempt,stream);
                    218: put_int(expired_rest,stream);
                    219: 
                    220: put_str(logon_mod,stream);
                    221: put_str(logoff_mod,stream);
                    222: put_str(newuser_mod,stream);
                    223: put_str(login_mod,stream);
                    224: put_str(logout_mod,stream);
                    225: put_str(sync_mod,stream);
                    226: put_str(expire_mod,stream);
                    227: put_int(c,stream);
                    228: n=0;
                    229: for(i=0;i<224;i++)
                    230:        put_int(n,stream);
                    231: n=0xffff;
                    232: for(i=0;i<256;i++)
                    233:        put_int(n,stream);
                    234: 
                    235: n=0;
                    236: for(i=0;i<10;i++) {
                    237:        put_int(val_level[i],stream);
                    238:        put_int(val_expire[i],stream);
                    239:        put_int(val_flags1[i],stream);
                    240:        put_int(val_flags2[i],stream);
                    241:        put_int(val_flags3[i],stream);
                    242:        put_int(val_flags4[i],stream);
                    243:        put_int(val_cdt[i],stream);
                    244:        put_int(val_exempt[i],stream);
                    245:        put_int(val_rest[i],stream);
                    246:        for(j=0;j<8;j++)
                    247:                put_int(n,stream); }
                    248: 
                    249: c=0;
                    250: for(i=0;i<100 && !feof(stream);i++) {
                    251:        put_int(level_timeperday[i],stream);
                    252:        put_int(level_timepercall[i],stream);
                    253:        put_int(level_callsperday[i],stream);
                    254:        put_int(level_freecdtperday[i],stream);
                    255:        put_int(level_linespermsg[i],stream);
                    256:        put_int(level_postsperday[i],stream);
                    257:        put_int(level_emailperday[i],stream);
                    258:        put_int(level_misc[i],stream);
                    259:        put_int(level_expireto[i],stream);
                    260:        put_int(c,stream);
                    261:        for(j=0;j<5;j++)
                    262:                put_int(n,stream); }
                    263: 
                    264: /* Command Shells */
                    265: 
                    266: put_int(total_shells,stream);
                    267: for(i=0;i<total_shells;i++) {
                    268:        put_str(shell[i]->name,stream);
                    269:        put_str(shell[i]->code,stream);
                    270:        put_str(shell[i]->ar,stream);
                    271:        put_int(shell[i]->misc,stream);
                    272:        n=0;
                    273:        for(j=0;j<8;j++)
                    274:         put_int(n,stream); }
                    275: 
                    276: fclose(stream);
                    277: }
                    278: 
                    279: void free_main_cfg()
                    280: {
                    281:        int i;
                    282: 
                    283: for(i=0;i<sys_nodes;i++)
                    284:        FREE(node_path[i]);
                    285: FREE(node_path);
                    286: for(i=0;i<total_shells;i++)
                    287:        FREE(shell[i]);
                    288: FREE(shell);
                    289: }
                    290: 
                    291: void write_msgs_cfg()
                    292: {
                    293:        char    str[128],c;
                    294:        int     i,j,k,file,x;
                    295:        short   n;
                    296:        long    l;
                    297:        FILE    *stream;
                    298:        smb_t   smb;
                    299: 
                    300: upop("Writing MSGS.CNF...");
                    301: sprintf(str,"%sMSGS.CNF",ctrl_dir);
                    302: backup(str);
                    303: 
                    304: if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
                    305:        || (stream=fdopen(file,"wb"))==NULL) {
                    306:        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
                    307:     return; }
                    308: setvbuf(stream,NULL,_IOFBF,2048);
                    309: 
                    310: put_int(max_qwkmsgs,stream);
                    311: put_int(mail_maxcrcs,stream);
                    312: put_int(mail_maxage,stream);
                    313: put_str(preqwk_ar,stream);
                    314: put_int(smb_retry_time,stream);
                    315: n=0;
                    316: for(i=0;i<235;i++)
                    317:        put_int(n,stream);
                    318: n=0xffff;
                    319: for(i=0;i<256;i++)
                    320:        put_int(n,stream);
                    321: 
                    322: /* Message Groups */
                    323: 
                    324: put_int(total_grps,stream);
                    325: for(i=0;i<total_grps;i++) {
                    326:        put_str(grp[i]->lname,stream);
                    327:        put_str(grp[i]->sname,stream);
                    328:        put_str(grp[i]->ar,stream);
                    329:        n=0;
                    330:        for(j=0;j<32;j++)
                    331:                put_int(n,stream);
                    332:        n=0xffff;
                    333:        for(j=0;j<16;j++)
                    334:                put_int(n,stream); }
                    335: 
                    336: /* Message Sub-boards */
                    337: 
                    338: backslash(echomail_dir);
                    339: 
                    340: str[0]=0;
                    341: for(i=n=0;i<total_subs;i++)
                    342:        if(sub[i]->grp<total_grps)              /* total VALID sub-boards */
                    343:                n++;
                    344: put_int(n,stream);
                    345: for(i=0;i<total_subs;i++) {
                    346:        if(sub[i]->grp>=total_grps)     /* skip bogus group numbers */
                    347:                continue;
                    348:        put_int(sub[i]->grp,stream);
                    349:        put_str(sub[i]->lname,stream);
                    350:        put_str(sub[i]->sname,stream);
                    351:        put_str(sub[i]->qwkname,stream);
                    352:        put_str(sub[i]->code,stream);
                    353:        if(sub[i]->data_dir[0])
                    354:                backslash(sub[i]->data_dir);
                    355:        put_str(sub[i]->data_dir,stream);
                    356:        md(sub[i]->data_dir);
                    357:        put_str(sub[i]->ar,stream);
                    358:        put_str(sub[i]->read_ar,stream);
                    359:        put_str(sub[i]->post_ar,stream);
                    360:        put_str(sub[i]->op_ar,stream);
                    361:        l=(sub[i]->misc&(~SUB_HDRMOD));    /* Don't write mod bit */
                    362:        put_int(l,stream);
                    363:        put_str(sub[i]->tagline,stream);
                    364:        put_str(sub[i]->origline,stream);
                    365:        put_str(sub[i]->echomail_sem,stream);
                    366:        if(sub[i]->echopath)
                    367:                backslash(sub[i]->echopath);
                    368:        put_str(sub[i]->echopath,stream);
                    369:        if(sub[i]->misc&SUB_FIDO && (echomail_dir[0] || sub[i]->echopath[0])) {
                    370:                md(echomail_dir);
                    371:                if(!sub[i]->echopath[0])
                    372:                        sprintf(sub[i]->echopath,"%s%s",echomail_dir,sub[i]->code);
                    373:                md(sub[i]->echopath); }
                    374:        put_int(sub[i]->faddr,stream);
                    375:        put_int(sub[i]->maxmsgs,stream);
                    376:        put_int(sub[i]->maxcrcs,stream);
                    377:        put_int(sub[i]->maxage,stream);
                    378:        put_int(sub[i]->ptridx,stream);
                    379:        put_str(sub[i]->mod_ar,stream);
                    380:        put_int(sub[i]->qwkconf,stream);
                    381:        c=0;
                    382:        put_int(c,stream);
                    383:        n=0;
                    384:        for(k=0;k<26;k++)
                    385:                put_int(n,stream);
                    386: 
                    387:        if(all_msghdr || (sub[i]->misc&SUB_HDRMOD && !no_msghdr)) {
                    388:                if(!sub[i]->data_dir[0])
                    389:                        sprintf(smb.file,"%sSUBS\\%s",data_dir,sub[i]->code);
                    390:                else
                    391:                        sprintf(smb.file,"%s%s",sub[i]->data_dir,sub[i]->code);
                    392:                if((x=smb_open(&smb))!=0) {
                    393:                        errormsg(WHERE,ERR_OPEN,smb.file,x);
                    394:                        continue; }
                    395:                if(!filelength(fileno(smb.shd_fp))) {
                    396:                        smb.status.max_crcs=sub[i]->maxcrcs;
                    397:                        smb.status.max_msgs=sub[i]->maxmsgs;
                    398:                        smb.status.max_age=sub[i]->maxage;
                    399:                        smb.status.attr=sub[i]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
                    400:                        if((x=smb_create(&smb))!=0)
                    401:                                errormsg(WHERE,ERR_CREATE,smb.file,x);
                    402:                        smb_close(&smb);
                    403:                        continue; }
                    404:                if((x=smb_locksmbhdr(&smb))!=0) {
                    405:                        smb_close(&smb);
                    406:                        errormsg(WHERE,ERR_LOCK,smb.file,x);
                    407:                        continue; }
                    408:                if((x=smb_getstatus(&smb))!=0) {
                    409:                        smb_close(&smb);
                    410:                        errormsg(WHERE,ERR_READ,smb.file,x);
                    411:                        continue; }
                    412:                if((!(sub[i]->misc&SUB_HYPER) || smb.status.attr&SMB_HYPERALLOC)
                    413:                        && smb.status.max_msgs==sub[i]->maxmsgs
                    414:                        && smb.status.max_crcs==sub[i]->maxcrcs
                    415:                        && smb.status.max_age==sub[i]->maxage) {        /* No change */
                    416:                        smb_close(&smb);
                    417:                        continue; }
                    418:                smb.status.max_msgs=sub[i]->maxmsgs;
                    419:                smb.status.max_crcs=sub[i]->maxcrcs;
                    420:                smb.status.max_age=sub[i]->maxage;
                    421:                if(sub[i]->misc&SUB_HYPER)
                    422:                        smb.status.attr|=SMB_HYPERALLOC;
                    423:                if((x=smb_putstatus(&smb))!=0) {
                    424:                        smb_close(&smb);
                    425:                        errormsg(WHERE,ERR_WRITE,smb.file,x);
                    426:                        continue; }
                    427:                smb_close(&smb); }
                    428: 
                    429:                                }
                    430: 
                    431: /* FidoNet */
                    432: 
                    433: put_int(total_faddrs,stream);
                    434: for(i=0;i<total_faddrs;i++) {
                    435:        put_int(faddr[i].zone,stream);
                    436:        put_int(faddr[i].net,stream);
                    437:        put_int(faddr[i].node,stream);
                    438:        put_int(faddr[i].point,stream); }
                    439: 
                    440: put_str(origline,stream);
                    441: put_str(netmail_sem,stream);
                    442: put_str(echomail_sem,stream);
                    443: backslash(netmail_dir);
                    444: put_str(netmail_dir,stream);
                    445: put_str(echomail_dir,stream);
                    446: backslash(fidofile_dir);
                    447: put_str(fidofile_dir,stream);
                    448: put_int(netmail_misc,stream);
                    449: put_int(netmail_cost,stream);
                    450: put_int(dflt_faddr,stream);
                    451: n=0;
                    452: for(i=0;i<28;i++)
                    453:        put_int(n,stream);
                    454: 
                    455: /* QWKnet Config */
                    456: 
                    457: put_str(qnet_tagline,stream);
                    458: 
                    459: put_int(total_qhubs,stream);
                    460: for(i=0;i<total_qhubs;i++) {
                    461:        put_str(qhub[i]->id,stream);
                    462:        put_int(qhub[i]->time,stream);
                    463:        put_int(qhub[i]->freq,stream);
                    464:        put_int(qhub[i]->days,stream);
                    465:        put_int(qhub[i]->node,stream);
                    466:        put_str(qhub[i]->call,stream);
                    467:        put_str(qhub[i]->pack,stream);
                    468:        put_str(qhub[i]->unpack,stream);
                    469:        put_int(qhub[i]->subs,stream);
                    470:        for(j=0;j<qhub[i]->subs;j++) {
                    471:                put_int(qhub[i]->conf[j],stream);
                    472:                put_int(qhub[i]->sub[j],stream);
                    473:                put_int(qhub[i]->mode[j],stream); }
                    474:        n=0;
                    475:        for(j=0;j<32;j++)
                    476:                put_int(n,stream); }
                    477: n=0;
                    478: for(i=0;i<32;i++)
                    479:     put_int(n,stream);
                    480: 
                    481: /* PostLink Config */
                    482: 
                    483: memset(str,0,11);
                    484: fwrite(str,11,1,stream);       /* unused, used to be site name */
                    485: put_int(sys_psnum,stream);
                    486: 
                    487: put_int(total_phubs,stream);
                    488: for(i=0;i<total_phubs;i++) {
                    489:        put_str(phub[i]->name,stream);
                    490:        put_int(phub[i]->time,stream);
                    491:        put_int(phub[i]->freq,stream);
                    492:        put_int(phub[i]->days,stream);
                    493:        put_int(phub[i]->node,stream);
                    494:        put_str(phub[i]->call,stream);
                    495:        n=0;
                    496:        for(j=0;j<32;j++)
                    497:                put_int(n,stream); }
                    498: 
                    499: put_str(sys_psname,stream);
                    500: n=0;
                    501: for(i=0;i<32;i++)
                    502:     put_int(n,stream);
                    503: 
                    504: put_str(sys_inetaddr,stream); /* Internet address */
                    505: put_str(inetmail_sem,stream);
                    506: put_int(inetmail_misc,stream);
                    507: put_int(inetmail_cost,stream);
                    508: 
                    509: fclose(stream);
                    510: 
                    511: /* MUST BE AT END */
                    512: 
                    513: if(!no_msghdr) {
                    514:        backslash(data_dir);
                    515:        sprintf(smb.file,"%sMAIL",data_dir);
                    516:        if((x=smb_open(&smb))!=0) {
                    517:                errormsg(WHERE,ERR_OPEN,smb.file,x);
                    518:                return; }
                    519:        if(!filelength(fileno(smb.shd_fp))) {
                    520:                smb.status.max_crcs=mail_maxcrcs;
                    521:                smb.status.max_msgs=MAX_SYSMAIL;
                    522:                smb.status.max_age=mail_maxage;
                    523:                smb.status.attr=SMB_EMAIL;
                    524:                if((x=smb_create(&smb))!=0)
                    525:                        errormsg(WHERE,ERR_CREATE,smb.file,x);
                    526:                smb_close(&smb);
                    527:                return; }
                    528:        if((x=smb_locksmbhdr(&smb))!=0) {
                    529:                smb_close(&smb);
                    530:                errormsg(WHERE,ERR_LOCK,smb.file,x);
                    531:                return; }
                    532:        if((x=smb_getstatus(&smb))!=0) {
                    533:                smb_close(&smb);
                    534:                errormsg(WHERE,ERR_READ,smb.file,x);
                    535:                return; }
                    536:        smb.status.max_msgs=MAX_SYSMAIL;
                    537:        smb.status.max_crcs=mail_maxcrcs;
                    538:        smb.status.max_age=mail_maxage;
                    539:        if((x=smb_putstatus(&smb))!=0) {
                    540:                smb_close(&smb);
                    541:                errormsg(WHERE,ERR_WRITE,smb.file,x);
                    542:                return; }
                    543:        smb_close(&smb); }
                    544: }
                    545: 
                    546: void free_msgs_cfg()
                    547: {
                    548:        int i;
                    549: 
                    550: for(i=0;i<total_grps;i++)
                    551:        FREE(grp[i]);
                    552: FREE(grp);
                    553: grp=NULL;
                    554: 
                    555: for(i=0;i<total_subs;i++)
                    556:        FREE(sub[i]);
                    557: FREE(sub);
                    558: sub=NULL;
                    559: 
                    560: FREE(faddr);
                    561: total_faddrs=0;
                    562: 
                    563: for(i=0;i<total_qhubs;i++) {
                    564:        FREE(qhub[i]->mode);
                    565:        FREE(qhub[i]->conf);
                    566:        FREE(qhub[i]->sub);
                    567:        FREE(qhub[i]); }
                    568: FREE(qhub);
                    569: qhub=NULL;
                    570: 
                    571: for(i=0;i<total_phubs;i++)
                    572:        FREE(phub[i]);
                    573: FREE(phub);
                    574: phub=NULL;
                    575: 
                    576: }
                    577: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.