Annotation of 43BSDReno/contrib/isode-beta/ftam/ftamconctl.c, revision 1.1.1.1

1.1       root        1: /* ftamconctl.c - FPM: encode/decode concurrency control */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamconctl.c,v 7.2 90/07/09 14:36:42 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/ftam/RCS/ftamconctl.c,v 7.2 90/07/09 14:36:42 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       ftamconctl.c,v $
                     12:  * Revision 7.2  90/07/09  14:36:42  mrose
                     13:  * sync
                     14:  * 
                     15:  * Revision 7.1  90/03/23  10:54:01  mrose
                     16:  * update
                     17:  * 
                     18:  * Revision 7.0  89/11/23  21:53:31  mrose
                     19:  * Release 6.0
                     20:  * 
                     21:  */
                     22: 
                     23: /*
                     24:  *                               NOTICE
                     25:  *
                     26:  *    Acquisition, use, and distribution of this module and related
                     27:  *    materials are subject to the restrictions of a license agreement.
                     28:  *    Consult the Preface in the User's Manual for the full terms of
                     29:  *    this agreement.
                     30:  *
                     31:  */
                     32: 
                     33: /* LINTLIBRARY */
                     34: 
                     35: #include <stdio.h>
                     36: #include "fpkt.h"
                     37: 
                     38: /*    DATA */
                     39: 
                     40: static int fc2lock[] = {
                     41:     int_FTAM_Lock_shared, int_FTAM_Lock_exclusive,
                     42:     int_FTAM_Lock_not__required, int_FTAM_Lock_no__access
                     43: };
                     44: 
                     45: static int lock2fc[] = {
                     46:     FLOCK_NOTREQD, FLOCK_SHARED, FLOCK_EXCLUSIVE, FLOCK_NOACCESS
                     47: };
                     48: 
                     49: 
                     50: #define FCON_NOTREQD   0x01
                     51: #define FCON_SHARED     0x02
                     52: #define FCON_EXCLUSIVE  0x04
                     53: #define FCON_NOACCESS   0x08
                     54: 
                     55: struct pair fconctl_pairs [] = {
                     56:               FCON_NOTREQD, bit_FTAM_Concurrency__Key_not__required,
                     57:               FCON_SHARED, bit_FTAM_Concurrency__Key_shared,
                     58:               FCON_EXCLUSIVE, bit_FTAM_Concurrency__Key_exclusive,
                     59:               FCON_NOACCESS, bit_FTAM_Concurrency__Key_no__access,
                     60:               0, 0
                     61: };
                     62: 
                     63: /*  */
                     64: 
                     65: struct type_FTAM_Concurrency__Control *conctl2fpm (fsb, fc, fti)
                     66: register struct ftamblk *fsb;
                     67: register struct FTAMconcurrency *fc;
                     68: struct FTAMindication *fti;
                     69: {
                     70:     register struct type_FTAM_Concurrency__Control *fpm;
                     71: 
                     72:     if ((fpm = (struct type_FTAM_Concurrency__Control *)
                     73:                    calloc (1, sizeof *fpm)) == NULL) {
                     74: no_mem: ;
                     75:        (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory");
                     76:        if (fpm)
                     77:            free_FTAM_Concurrency__Control (fpm);
                     78:        return NULL;
                     79:     }
                     80: 
                     81: #define        dolock(s,t) \
                     82: { \
                     83:     if ((fpm -> s = (struct type_FTAM_Lock *) \
                     84:                            calloc (1, sizeof *fpm -> s)) \
                     85:            == NULL) \
                     86:        goto no_mem; \
                     87:     fpm -> s -> parm = fc2lock [fc -> t & FLOCK_MASK]; \
                     88: }
                     89:     dolock (read, fc_readlock);
                     90:     dolock (insert, fc_insertlock);
                     91:     dolock (replace, fc_replacelock);
                     92:     dolock (extend, fc_extendlock);
                     93:     dolock (erase, fc_eraselock);
                     94:     dolock (read__attribute, fc_readattrlock);
                     95:     dolock (change__attribute, fc_chngattrlock);
                     96:     dolock (delete, fc_deletelock);
                     97: #undef dolock
                     98: 
                     99:     return fpm;
                    100: }
                    101: 
                    102: /*  */
                    103: 
                    104: /* ARGSUSED */
                    105: 
                    106: int    fpm2conctl (fsb, fpm, fc, fti)
                    107: struct ftamblk *fsb;
                    108: register struct type_FTAM_Concurrency__Control *fpm;
                    109: register struct FTAMconcurrency *fc;
                    110: struct FTAMindication *fti;
                    111: {
                    112:     FCINIT (fc);
                    113: 
                    114: #define        dolock(s,t) \
                    115: { \
                    116:     fc -> t = lock2fc [fpm -> s -> parm]; \
                    117: }
                    118:     dolock (read, fc_readlock);
                    119:     dolock (insert, fc_insertlock);
                    120:     dolock (replace, fc_replacelock);
                    121:     dolock (extend, fc_extendlock);
                    122:     dolock (erase, fc_eraselock);
                    123:     dolock (read__attribute, fc_readattrlock);
                    124:     dolock (change__attribute, fc_chngattrlock);
                    125:     dolock (delete, fc_deletelock);
                    126: #undef dolock
                    127: 
                    128:     return OK;
                    129: }
                    130: 
                    131: /*  */
                    132: 
                    133: struct type_FTAM_Concurrency__Access *conacc2fpm (fsb, fc, fti)
                    134: register struct ftamblk *fsb;
                    135: register struct FTAMconcurrency *fc;
                    136: struct FTAMindication *fti;
                    137: {
                    138:     register struct type_FTAM_Concurrency__Access *fpm;
                    139:     int key;
                    140: 
                    141:     if ((fpm = (struct type_FTAM_Concurrency__Access *)
                    142:                     calloc (1, sizeof *fpm)) == NULL) {
                    143:         (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory");
                    144:         if (fpm)
                    145:             free_FTAM_Concurrency__Access (fpm);
                    146:         return NULL;
                    147:     }
                    148: 
                    149: #define dolock(s,t) \
                    150: { \
                    151:     key = (int) (fc -> t & FLOCK_MASK); \
                    152:     fpm -> s = bits2fpm (fsb, fconctl_pairs, key, fti); \
                    153: }
                    154: 
                    155:     dolock (read, fc_readlock);
                    156:     dolock (insert, fc_insertlock);
                    157:     dolock (replace, fc_replacelock);
                    158:     dolock (extend, fc_extendlock);
                    159:     dolock (erase, fc_eraselock);
                    160:     dolock (read__attribute, fc_readattrlock);
                    161:     dolock (change__attribute, fc_chngattrlock);
                    162:     dolock (delete, fc_deletelock);
                    163: #undef  dolock
                    164: 
                    165:     return fpm;
                    166: }
                    167: 
                    168: 
                    169: int     fpm2conacc (fsb, fpm, fc, fti)
                    170: struct ftamblk *fsb;
                    171: register struct type_FTAM_Concurrency__Access *fpm;
                    172: register struct FTAMconcurrency *fc;
                    173: struct FTAMindication *fti;
                    174: {
                    175:     int            key;
                    176: 
                    177:     FCINIT (fc);
                    178: 
                    179: #define dolock(s,t) \
                    180: { \
                    181:     key = fc -> t; \
                    182:     (void) fpm2bits (fsb, fconctl_pairs, fpm -> s, &key, fti); \
                    183: }
                    184:     dolock (read, fc_readlock);
                    185:     dolock (insert, fc_insertlock);
                    186:     dolock (replace, fc_replacelock);
                    187:     dolock (extend, fc_extendlock);
                    188:     dolock (erase, fc_eraselock);
                    189:     dolock (read__attribute, fc_readattrlock);
                    190:     dolock (change__attribute, fc_chngattrlock);
                    191:     dolock (delete, fc_deletelock);
                    192: #undef  dolock
                    193: 
                    194:     return OK;
                    195: 
                    196: }

unix.superglobalmegacorp.com

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