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

1.1       root        1: /* rystub.c - ROSY: stubs */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/rosy/RCS/rystub.c,v 6.0 89/03/18 23:42:58 mrose Rel $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/rosy/RCS/rystub.c,v 6.0 89/03/18 23:42:58 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       rystub.c,v $
                     12:  * Revision 6.0  89/03/18  23:42:58  mrose
                     13:  * Release 5.0
                     14:  * 
                     15:  */
                     16: 
                     17: /*
                     18:  *                               NOTICE
                     19:  *
                     20:  *    Acquisition, use, and distribution of this module and related
                     21:  *    materials are subject to the restrictions of a license agreement.
                     22:  *    Consult the Preface in the User's Manual for the full terms of
                     23:  *    this agreement.
                     24:  *
                     25:  */
                     26: 
                     27: 
                     28: /* LINTLIBRARY */
                     29: 
                     30: #include <signal.h>
                     31: #include <stdio.h>
                     32: #include "rosy.h"
                     33: 
                     34: 
                     35: #define        missingP(p) \
                     36: { \
                     37:     if (p == NULL) \
                     38:        return rosaplose (roi, ROS_PARAMETER, NULLCP, \
                     39:                            "mandatory parameter \"%s\" missing", "p"); \
                     40: }
                     41: 
                     42: /*  */
                     43: 
                     44: static int interrupted;
                     45: SFD    intrser ();
                     46: 
                     47: /*    stub */
                     48: 
                     49: int    RyStub (sd, ryo, op, id, linked, in, rfx, efx, class, roi)
                     50: int    sd;
                     51: register struct RyOperation *ryo;
                     52: int    op,
                     53:        id,
                     54:        *linked,
                     55:        class;
                     56: caddr_t        in;
                     57: IFP    rfx,
                     58:        efx;
                     59: struct RoSAPindication *roi;
                     60: {
                     61:     int     firstime,
                     62:            opclass,
                     63:            result;
                     64:     SFP            istat;
                     65: 
                     66: #ifdef notdef                  /* let RyOpInvoke check these as necessary */
                     67:     missingP (ryo);
                     68:     missingP (in);
                     69:     missingP (rfx);
                     70:     missingP (efx);
                     71: #endif
                     72:     missingP (roi);
                     73: 
                     74:     if ((opclass = class) == ROS_INTR) {
                     75:        interrupted = 0;
                     76:        istat = signal (SIGINT, intrser);
                     77: 
                     78:        opclass = ROS_ASYNC;
                     79:     }
                     80:     
                     81:     result = RyOpInvoke (sd, ryo, op, in, (caddr_t *) NULL, rfx, efx,
                     82:                         opclass, id, linked, ROS_NOPRIO, roi);
                     83:     firstime = 1;
                     84: 
                     85: again: ;
                     86:     switch (result) {
                     87:        case NOTOK: 
                     88:            break;
                     89: 
                     90:        case OK:
                     91:            switch (class) {
                     92:                case ROS_ASYNC:
                     93:                    break;
                     94: 
                     95:                case ROS_INTR:
                     96:                    if (firstime) {
                     97:                        for (;;) {
                     98:                            if (!interrupted) {
                     99:                                int     nfds;
                    100:                                fd_set  rfds;
                    101: 
                    102:                                nfds = 0;
                    103:                                FD_ZERO (&rfds);
                    104: 
                    105:                                                /* interrupt causes EINTR */
                    106:                                if (RoSelectMask (sd, &rfds, &nfds, roi) == OK)
                    107:                                    (void) xselect (nfds, &rfds, NULLFD,
                    108:                                                    NULLFD, NOTOK);
                    109:                            }
                    110:                            if (interrupted) {
                    111:                                result = rosaplose (roi, ROS_INTERRUPTED,
                    112:                                                    NULLCP, NULLCP);
                    113:                                break;
                    114:                            }
                    115:                            if ((result = RyWait (sd, &id, (caddr_t *) NULL,
                    116:                                                  OK, roi)) != NOTOK
                    117:                                    || roi -> roi_preject.rop_reason
                    118:                                            != ROS_TIMER) {
                    119:                                firstime = 0;
                    120:                                goto again;
                    121:                            }
                    122:                        }
                    123:                        break;
                    124:                    }
                    125:                    /* else fall */
                    126:                    
                    127:                default:
                    128:                    switch (roi -> roi_type) {
                    129:                        case ROI_RESULT:
                    130:                        case ROI_ERROR:
                    131:                        case ROI_UREJECT:
                    132:                            result = OK;
                    133:                            break;
                    134: 
                    135:                        default:
                    136:                            result = rosaplose (roi, ROS_PROTOCOL, NULLCP,
                    137:                                                "unknown indication type=%d",
                    138:                                                roi -> roi_type);
                    139:                            break;
                    140:                    }
                    141:                    break;
                    142:            }
                    143: 
                    144:        case DONE:
                    145:            break;
                    146: 
                    147:        default: 
                    148:            result = rosaplose (roi, ROS_PROTOCOL, NULLCP,
                    149:                                "unknown return from RyInvoke=%d", result);
                    150:            break;
                    151:     }
                    152: 
                    153:     if (class == ROS_INTR)
                    154:        (void) signal (SIGINT, istat);
                    155: 
                    156:     return result;
                    157: }
                    158: 
                    159: /*  */
                    160: 
                    161: /* ARGSUSED */
                    162: 
                    163: static  SFD intrser (sig)
                    164: int    sig;
                    165: {
                    166: #ifndef        BSDSIGS
                    167:     (void) signal (SIGINT, intrser);
                    168: #endif
                    169: 
                    170:     interrupted++;
                    171: }

unix.superglobalmegacorp.com

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