Annotation of 43BSDReno/contrib/isode-beta/rosy/ryopblock.c, revision 1.1.1.1

1.1       root        1: /* ryopblock.c - manage operation blocks */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/rosy/RCS/ryopblock.c,v 7.1 90/07/01 21:06:36 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/rosy/RCS/ryopblock.c,v 7.1 90/07/01 21:06:36 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       ryopblock.c,v $
                     12:  * Revision 7.1  90/07/01  21:06:36  mrose
                     13:  * pepsy
                     14:  * 
                     15:  * Revision 7.0  89/11/23  22:22:01  mrose
                     16:  * Release 6.0
                     17:  * 
                     18:  */
                     19: 
                     20: /*
                     21:  *                               NOTICE
                     22:  *
                     23:  *    Acquisition, use, and distribution of this module and related
                     24:  *    materials are subject to the restrictions of a license agreement.
                     25:  *    Consult the Preface in the User's Manual for the full terms of
                     26:  *    this agreement.
                     27:  *
                     28:  */
                     29: 
                     30: 
                     31: /* LINTLIBRARY */
                     32: 
                     33: #include <stdio.h>
                     34: #include "rosy.h"
                     35: 
                     36: /*    DATA */
                     37: 
                     38: static int  once_only = 0;
                     39: static struct opsblk opsque;
                     40: static struct opsblk *OPHead = &opsque;
                     41: 
                     42: /*    OPERATION BLOCKS */
                     43: 
                     44: struct opsblk  *newopblk (sd, id)
                     45: int    sd,
                     46:        id;
                     47: {
                     48:     register struct opsblk *opb;
                     49: 
                     50:     opb = (struct opsblk   *) calloc (1, sizeof *opb);
                     51:     if (opb == NULL)
                     52:        return NULL;
                     53: 
                     54:     opb -> opb_flags |= OPB_INITIATOR;
                     55: 
                     56:     opb -> opb_fd = sd;
                     57:     opb -> opb_id = id;
                     58: 
                     59:     if (once_only == 0) {
                     60:        OPHead -> opb_forw = OPHead -> opb_back = OPHead;
                     61:        once_only++;
                     62:     }
                     63: 
                     64:     insque (opb, OPHead -> opb_back);
                     65: 
                     66:     return opb;
                     67: }
                     68: 
                     69: /*  */
                     70: 
                     71: freeopblk (opb)
                     72: register struct opsblk *opb;
                     73: {
                     74:     if (opb == NULL)
                     75:        return;
                     76: 
                     77: #ifdef PEPSY_DEFINITIONS
                     78:     if (opb -> opb_out && opb -> opb_free_mod)
                     79:        fre_obj (opb -> opb_out,
                     80:                 opb -> opb_free_mod -> md_dtab[opb -> opb_free_index],
                     81:                 opb -> opb_free_mod);
                     82: #else
                     83:     if (opb -> opb_out && opb -> opb_free)
                     84:        (void) (*opb -> opb_free) (opb -> opb_out);
                     85: #endif
                     86: 
                     87:     if (opb -> opb_pe)
                     88:        pe_free (opb -> opb_pe);
                     89: 
                     90:     remque (opb);
                     91: 
                     92:     free ((char *) opb);
                     93: }
                     94: 
                     95: /*  */
                     96: 
                     97: struct opsblk   *findopblk (sd, id, flags)
                     98: register int   sd,
                     99:                id,
                    100:                flags;
                    101: {
                    102:     register struct opsblk *opb;
                    103: 
                    104:     if (once_only == 0)
                    105:        return NULL;
                    106: 
                    107:     flags &= OPB_INITIATOR | OPB_RESPONDER;
                    108:     for (opb = OPHead -> opb_forw; opb != OPHead; opb = opb -> opb_forw)
                    109:        if (opb -> opb_fd == sd
                    110:                && opb -> opb_id == id
                    111:                && (opb -> opb_flags & flags))
                    112:            return opb;
                    113: 
                    114:     return NULL;
                    115: }
                    116: 
                    117: /*  */
                    118: 
                    119: struct opsblk   *firstopblk (sd)
                    120: register int   sd;
                    121: {
                    122:     register struct opsblk *opb,
                    123:                            *op2;
                    124: 
                    125:     if (once_only == 0)
                    126:        return NULL;
                    127: 
                    128:     op2 = NULLOPB;
                    129:     for (opb = OPHead -> opb_forw; opb != OPHead; opb = opb -> opb_forw)
                    130:        if (opb -> opb_fd == sd && (opb -> opb_flags & OPB_INITIATOR)) {
                    131:            if (opb -> opb_flags & OPB_EVENT)
                    132:                return opb;
                    133:            if (op2 == NULLOPB)
                    134:                op2 = opb;
                    135:        }
                    136: 
                    137:     return op2;
                    138: }
                    139: 
                    140: /*  */
                    141: 
                    142: loseopblk (sd, reason)
                    143: register int   sd;
                    144: int    reason;
                    145: {
                    146:     register struct opsblk *opb,
                    147:                            *op2;
                    148:     struct RoSAPindication  rois;
                    149: 
                    150:     if (once_only == 0)
                    151:        return;
                    152: 
                    153:     for (opb = OPHead -> opb_forw; opb != OPHead; opb = op2) {
                    154:        op2 = opb -> opb_forw;
                    155: 
                    156:        if (opb -> opb_fd == sd) {
                    157:            if (opb -> opb_errfnx)
                    158:                (*opb -> opb_errfnx) (sd, opb -> opb_id, RY_REJECT,
                    159:                                      (caddr_t) reason, &rois);
                    160: 
                    161:            freeopblk (opb);
                    162:        }
                    163:     }
                    164: }
                    165: 
                    166: /*  */
                    167: 
                    168: #ifdef lint
                    169: 
                    170: /* VARARGS */
                    171: 
                    172: int    rosaplose (roi, reason, what, fmt)
                    173: struct RoSAPindication *roi;
                    174: int     reason;
                    175: char   *what,
                    176:        *fmt;
                    177: {
                    178:     return rosaplose (roi, reason, what, fmt);
                    179: }
                    180: #endif

unix.superglobalmegacorp.com

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