xref: /onnv-gate/usr/src/lib/libast/common/include/sfio_t.h (revision 12068:08a39a083754)
14887Schin /***********************************************************************
24887Schin *                                                                      *
34887Schin *               This software is part of the ast package               *
4*12068SRoger.Faulkner@Oracle.COM *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
54887Schin *                      and is licensed under the                       *
64887Schin *                  Common Public License, Version 1.0                  *
78462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
84887Schin *                                                                      *
94887Schin *                A copy of the License is available at                 *
104887Schin *            http://www.opensource.org/licenses/cpl1.0.txt             *
114887Schin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
124887Schin *                                                                      *
134887Schin *              Information and Software Systems Research               *
144887Schin *                            AT&T Research                             *
154887Schin *                           Florham Park NJ                            *
164887Schin *                                                                      *
174887Schin *                 Glenn Fowler <gsf@research.att.com>                  *
184887Schin *                  David Korn <dgk@research.att.com>                   *
194887Schin *                   Phong Vo <kpv@research.att.com>                    *
204887Schin *                                                                      *
214887Schin ***********************************************************************/
224887Schin #ifndef _SFIO_T_H
234887Schin #define _SFIO_T_H	1
244887Schin 
254887Schin /*	This header file is for library writers who need to know certain
264887Schin **	internal info concerning the full Sfio_t structure. Including this
274887Schin **	file means that you agree to track closely with sfio development
284887Schin **	in case its internal architecture is changed.
294887Schin **
304887Schin **	Written by Kiem-Phong Vo
314887Schin */
324887Schin 
334887Schin /* the parts of Sfio_t private to sfio functions */
344887Schin #define _SFIO_PRIVATE \
354887Schin 	Sfoff_t			extent;	/* current file	size		*/ \
364887Schin 	Sfoff_t			here;	/* current physical location	*/ \
374887Schin 	unsigned char		getr;	/* the last sfgetr separator 	*/ \
384887Schin 	unsigned char		tiny[1];/* for unbuffered read stream	*/ \
394887Schin 	unsigned short		bits;	/* private flags		*/ \
404887Schin 	unsigned int		mode;	/* current io mode		*/ \
414887Schin 	struct _sfdisc_s*	disc;	/* discipline			*/ \
424887Schin 	struct _sfpool_s*	pool;	/* the pool containing this	*/ \
434887Schin 	struct _sfrsrv_s*	rsrv;	/* reserved buffer		*/ \
444887Schin 	struct _sfproc_s*	proc;	/* coprocess id, etc.		*/ \
454887Schin 	Void_t*			mutex;	/* mutex for thread-safety	*/ \
464887Schin 	Void_t*			stdio;	/* stdio FILE if any		*/ \
474887Schin 	Sfoff_t			lpos;	/* last seek position		*/ \
484887Schin 	size_t			iosz;	/* preferred size for I/O	*/ \
494887Schin 	size_t			blksz;	/* preferred block size		*/ \
504887Schin 	Void_t*			fill[1];/* modest expansion		*/
514887Schin 
524887Schin #include	"sfio.h"
534887Schin 
544887Schin /* mode bit to indicate that the structure hasn't been initialized */
554887Schin #define SF_INIT		0000004
564887Schin #define SF_DCDOWN	00010000
574887Schin 
584887Schin /* short-hand for common stream types */
594887Schin #define SF_RDWR		(SF_READ|SF_WRITE)
604887Schin #define SF_RDSTR	(SF_READ|SF_STRING)
614887Schin #define SF_WRSTR	(SF_WRITE|SF_STRING)
624887Schin #define SF_RDWRSTR	(SF_RDWR|SF_STRING)
634887Schin 
644887Schin /* for static initialization of an Sfio_t structure */
654887Schin #define SFNEW(data,size,file,type,disc,mutex)	\
664887Schin 	{ (unsigned char*)(data),			/* next		*/ \
674887Schin 	  (unsigned char*)(data),			/* endw		*/ \
684887Schin 	  (unsigned char*)(data),			/* endr		*/ \
694887Schin 	  (unsigned char*)(data),			/* endb		*/ \
704887Schin 	  (Sfio_t*)0,					/* push		*/ \
714887Schin 	  (unsigned short)((type)&SF_FLAGS),		/* flags	*/ \
724887Schin 	  (short)(file),				/* file		*/ \
734887Schin 	  (unsigned char*)(data),			/* data		*/ \
744887Schin 	  (ssize_t)(size),				/* size		*/ \
754887Schin 	  (ssize_t)(-1),				/* val		*/ \
764887Schin 	  (Sfoff_t)0,					/* extent	*/ \
774887Schin 	  (Sfoff_t)0,					/* here		*/ \
784887Schin 	  0,						/* getr		*/ \
794887Schin 	  {0},						/* tiny		*/ \
804887Schin 	  0,						/* bits		*/ \
814887Schin 	  (unsigned int)(((type)&(SF_RDWR))|SF_INIT),	/* mode		*/ \
824887Schin 	  (struct _sfdisc_s*)(disc),			/* disc		*/ \
834887Schin 	  (struct _sfpool_s*)0,				/* pool		*/ \
844887Schin 	  (struct _sfrsrv_s*)0,				/* rsrv		*/ \
854887Schin 	  (struct _sfproc_s*)0,				/* proc		*/ \
864887Schin 	  (mutex),					/* mutex	*/ \
874887Schin 	  (Void_t*)0,					/* stdio	*/ \
884887Schin 	  (Sfoff_t)0,					/* lpos		*/ \
894887Schin 	  (size_t)0					/* iosz		*/ \
904887Schin 	}
914887Schin 
924887Schin /* function to clear an Sfio_t structure */
934887Schin #define SFCLEAR(f,mtx) \
944887Schin 	( (f)->next = (unsigned char*)0,		/* next		*/ \
954887Schin 	  (f)->endw = (unsigned char*)0,		/* endw		*/ \
964887Schin 	  (f)->endr = (unsigned char*)0,		/* endr		*/ \
974887Schin 	  (f)->endb = (unsigned char*)0,		/* endb		*/ \
984887Schin 	  (f)->push = (Sfio_t*)0,			/* push		*/ \
994887Schin 	  (f)->flags = (unsigned short)0,		/* flags	*/ \
1004887Schin 	  (f)->file = -1,				/* file		*/ \
1014887Schin 	  (f)->data = (unsigned char*)0,		/* data		*/ \
1024887Schin 	  (f)->size = (ssize_t)(-1),			/* size		*/ \
1034887Schin 	  (f)->val = (ssize_t)(-1),			/* val		*/ \
1044887Schin 	  (f)->extent = (Sfoff_t)(-1),			/* extent	*/ \
1054887Schin 	  (f)->here = (Sfoff_t)0,			/* here		*/ \
1064887Schin 	  (f)->getr = 0,				/* getr		*/ \
1074887Schin 	  (f)->tiny[0] = 0,				/* tiny		*/ \
1084887Schin 	  (f)->bits = 0,				/* bits		*/ \
1094887Schin 	  (f)->mode = 0,				/* mode		*/ \
1104887Schin 	  (f)->disc = (struct _sfdisc_s*)0,		/* disc		*/ \
1114887Schin 	  (f)->pool = (struct _sfpool_s*)0,		/* pool		*/ \
1124887Schin 	  (f)->rsrv = (struct _sfrsrv_s*)0,		/* rsrv		*/ \
1134887Schin 	  (f)->proc = (struct _sfproc_s*)0,		/* proc		*/ \
1144887Schin 	  (f)->mutex = (mtx),				/* mutex	*/ \
1154887Schin 	  (f)->stdio = (Void_t*)0,			/* stdio	*/ \
1164887Schin 	  (f)->lpos = (Sfoff_t)0,			/* lpos		*/ \
1174887Schin 	  (f)->iosz = (size_t)0				/* iosz		*/ \
1184887Schin 	)
1194887Schin 
1204887Schin /* expose next stream inside discipline function; state saved in int f */
1214887Schin #define SFDCNEXT(sp,f)	(((f)=(sp)->bits&SF_DCDOWN),(sp)->bits|=SF_DCDOWN)
1224887Schin 
1234887Schin /* restore SFDCNEXT() state from int f */
1244887Schin #define SFDCPREV(sp,f)	((f)?(0):((sp)->bits&=~SF_DCDOWN))
1254887Schin 
1264887Schin #endif /* _SFIO_T_H */
127