|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 2342 (0x926) Types: TextFile Names: »ps_alloc.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/psap/ps_alloc.c«
/* ps_alloc.c - allocate a presentation stream */ #ifndef lint static char *rcsid = "$Header: /f/osi/psap/RCS/ps_alloc.c,v 6.0 89/03/18 23:39:01 mrose Rel $"; #endif /* * $Header: /f/osi/psap/RCS/ps_alloc.c,v 6.0 89/03/18 23:39:01 mrose Rel $ * * * $Log: ps_alloc.c,v $ * Revision 6.0 89/03/18 23:39:01 mrose * Release 5.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ /* LINTLIBRARY */ #include <stdio.h> #include "psap.h" /* A Presentatation Stream (or PStream) is the second generation of "generic" I/O stream-based handling. (For the first attempt, take a look at the prototype implementation of the TTI Trusted Mail Agent.) The idea is to present a common, simple I/O paradigm (i.e., the UNIX v7 philosophy) to protocol-translation entities regardless of the underlying medium (files, pipes, sockets, or strings). New streams are created by a call to ps_alloc(). It allocates memory and calls an open routine. This routine fills in the dispatch vectors for read/write and (optionally) close. It can also fill in any other part of the stream's structure it likes. Once created, I/O is done using the macros ps_read/ps_write. These return either NOTOK or OK; depending on how things went. The read/write routines are invoked as: int iofunc (ps, data, n, in_line) PS ps; PElementData data; PElementLen n; int in_line; They should read/write upto len bytes, starting at data, and return the number of bytes processed, or NOTOK on error. The routine ps_io() will make successive calls to fill/flush the data. If the read/write routine returns NOTOK, it should set ps_errno as well. Streams are removed by a call to ps_free (). It calls the close routine, if any, which should de-commission any parts of the stream's structure that are in use. ps_free() will then free the allocated memory. */ /* \f */ PS ps_alloc (io) register IFP io; { register PS ps; if ((ps = (PS) calloc (1, sizeof *ps)) == NULLPS) return NULLPS; if ((*io) (ps) == NOTOK) { ps_free (ps); return NULLPS; } return ps; }