|
|
1.1 root 1: /* psapselect.c - PPM: map descriptors */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/psap2/RCS/psapselect.c,v 7.0 89/11/23 22:14:36 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/psap2/RCS/psapselect.c,v 7.0 89/11/23 22:14:36 mrose Rel $
9: *
10: *
11: * $Log: psapselect.c,v $
12: * Revision 7.0 89/11/23 22:14:36 mrose
13: * Release 6.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 <stdio.h>
31: #include <signal.h>
32: #include "ppkt.h"
33:
34: /* map presentation descriptors for select() */
35:
36: int PSelectMask (sd, mask, nfds, pi)
37: int sd;
38: fd_set *mask;
39: int *nfds;
40: struct PSAPindication *pi;
41: {
42: SBV smask;
43: register struct psapblk *pb;
44: struct SSAPindication sis;
45: register struct SSAPabort *sa = &sis.si_abort;
46:
47: missingP (mask);
48: missingP (nfds);
49: missingP (pi);
50:
51: smask = sigioblock ();
52:
53: if ((pb = findpblk (sd)) == NULL) {
54: (void) sigiomask (smask);
55: return psaplose (pi, PC_PARAMETER, NULLCP,
56: "invalid presentation descriptor");
57: }
58:
59: if (SSelectMask (pb -> pb_fd, mask, nfds, &sis) == NOTOK)
60: switch (sa -> sa_reason) {
61: case SC_WAITING:
62: (void) sigiomask (smask);
63: return psaplose (pi, PC_WAITING, NULLCP, NULLCP);
64:
65: default:
66: (void) ss2pslose (pb, pi, "SSelectMask", sa);
67: freepblk (pb);
68: (void) sigiomask (smask);
69: return NOTOK;
70: }
71:
72: (void) sigiomask (smask);
73:
74: return OK;
75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.