xref: /onnv-gate/usr/src/lib/libast/common/sfio/sfextern.c (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 #include	"sfhdr.h"
234887Schin 
244887Schin /*	External variables and functions used only by Sfio
254887Schin **	Written by Kiem-Phong Vo
264887Schin */
274887Schin 
284887Schin /* code to initialize mutexes */
294887Schin static Vtmutex_t	Sfmutex;
304887Schin static Vtonce_t		Sfonce = VTONCE_INITDATA;
_sfoncef()314887Schin static void _sfoncef()
324887Schin {	(void)vtmtxopen(_Sfmutex, VT_INIT);
334887Schin 	(void)vtmtxopen(&_Sfpool.mutex, VT_INIT);
344887Schin 	(void)vtmtxopen(sfstdin->mutex, VT_INIT);
354887Schin 	(void)vtmtxopen(sfstdout->mutex, VT_INIT);
364887Schin 	(void)vtmtxopen(sfstderr->mutex, VT_INIT);
374887Schin 	_Sfdone = 1;
384887Schin }
394887Schin 
404887Schin /* global variables used internally to the package */
414887Schin Sfextern_t _Sfextern =
424887Schin {	0,						/* _Sfpage	*/
434887Schin 	{ NIL(Sfpool_t*), 0, 0, 0, NIL(Sfio_t**) },	/* _Sfpool	*/
444887Schin 	NIL(int(*)_ARG_((Sfio_t*,int))),		/* _Sfpmove	*/
454887Schin 	NIL(Sfio_t*(*)_ARG_((Sfio_t*, Sfio_t*))),	/* _Sfstack	*/
468462SApril.Chin@Sun.COM 	NIL(void(*)_ARG_((Sfio_t*, int, void*))),	/* _Sfnotify	*/
474887Schin 	NIL(int(*)_ARG_((Sfio_t*))),			/* _Sfstdsync	*/
484887Schin 	{ NIL(Sfread_f),				/* _Sfudisc	*/
494887Schin 	  NIL(Sfwrite_f),
504887Schin 	  NIL(Sfseek_f),
514887Schin 	  NIL(Sfexcept_f),
524887Schin 	  NIL(Sfdisc_t*)
534887Schin 	},
544887Schin 	NIL(void(*)_ARG_((void)) ),			/* _Sfcleanup	*/
554887Schin 	0,						/* _Sfexiting	*/
564887Schin 	0,						/* _Sfdone	*/
574887Schin 	&Sfonce,					/* _Sfonce	*/
584887Schin 	_sfoncef,					/* _Sfoncef	*/
594887Schin 	&Sfmutex					/* _Sfmutex	*/
604887Schin };
614887Schin 
624887Schin ssize_t	_Sfi = -1;		/* value for a few fast macro functions	*/
638462SApril.Chin@Sun.COM #ifdef _ast_int8_t
648462SApril.Chin@Sun.COM ssize_t _Sfmaxr = 256*1024;	/* default maximum size for a record	*/
654887Schin #else
664887Schin ssize_t _Sfmaxr = 16*1024;	/* default maximum size for a record	*/
674887Schin #endif
684887Schin 
694887Schin #if vt_threaded
704887Schin static Vtmutex_t	_Sfmtxin, _Sfmtxout, _Sfmtxerr;
714887Schin #define SFMTXIN		(&_Sfmtxin)
724887Schin #define SFMTXOUT	(&_Sfmtxout)
734887Schin #define SFMTXERR	(&_Sfmtxerr)
748462SApril.Chin@Sun.COM #define SF_STDSAFE	SF_MTSAFE
754887Schin #else
764887Schin #define SFMTXIN		(0)
774887Schin #define SFMTXOUT	(0)
784887Schin #define SFMTXERR	(0)
798462SApril.Chin@Sun.COM #define SF_STDSAFE	(0)
804887Schin #endif
814887Schin 
824887Schin Sfio_t	_Sfstdin  = SFNEW(NIL(char*),-1,0,
838462SApril.Chin@Sun.COM 			  (SF_READ |SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXIN);
844887Schin Sfio_t	_Sfstdout = SFNEW(NIL(char*),-1,1,
858462SApril.Chin@Sun.COM 			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXOUT);
864887Schin Sfio_t	_Sfstderr = SFNEW(NIL(char*),-1,2,
878462SApril.Chin@Sun.COM 			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXERR);
884887Schin 
894887Schin #undef	sfstdin
904887Schin #undef	sfstdout
914887Schin #undef	sfstderr
924887Schin 
934887Schin Sfio_t*	sfstdin  = &_Sfstdin;
944887Schin Sfio_t*	sfstdout = &_Sfstdout;
954887Schin Sfio_t*	sfstderr = &_Sfstderr;
964887Schin 
974887Schin __EXTERN__(ssize_t,_Sfi);
984887Schin __EXTERN__(Sfio_t,_Sfstdin);
994887Schin __EXTERN__(Sfio_t,_Sfstdout);
1004887Schin __EXTERN__(Sfio_t,_Sfstderr);
1014887Schin __EXTERN__(Sfio_t*,sfstdin);
1024887Schin __EXTERN__(Sfio_t*,sfstdout);
1034887Schin __EXTERN__(Sfio_t*,sfstderr);
104