xref: /titanic_50/usr/src/lib/libast/common/sfio/sfextern.c (revision 3e14f97f673e8a630f076077de35afdd43dc1587)
1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*3e14f97fSRoger A. Faulkner *          Copyright (c) 1985-2010 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6da2e3ebdSchin *                  Common Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10da2e3ebdSchin *            http://www.opensource.org/licenses/cpl1.0.txt             *
11da2e3ebdSchin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                 Glenn Fowler <gsf@research.att.com>                  *
18da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
19da2e3ebdSchin *                   Phong Vo <kpv@research.att.com>                    *
20da2e3ebdSchin *                                                                      *
21da2e3ebdSchin ***********************************************************************/
22da2e3ebdSchin #include	"sfhdr.h"
23da2e3ebdSchin 
24da2e3ebdSchin /*	External variables and functions used only by Sfio
25da2e3ebdSchin **	Written by Kiem-Phong Vo
26da2e3ebdSchin */
27da2e3ebdSchin 
28da2e3ebdSchin /* code to initialize mutexes */
29da2e3ebdSchin static Vtmutex_t	Sfmutex;
30da2e3ebdSchin static Vtonce_t		Sfonce = VTONCE_INITDATA;
_sfoncef()31da2e3ebdSchin static void _sfoncef()
32da2e3ebdSchin {	(void)vtmtxopen(_Sfmutex, VT_INIT);
33da2e3ebdSchin 	(void)vtmtxopen(&_Sfpool.mutex, VT_INIT);
34da2e3ebdSchin 	(void)vtmtxopen(sfstdin->mutex, VT_INIT);
35da2e3ebdSchin 	(void)vtmtxopen(sfstdout->mutex, VT_INIT);
36da2e3ebdSchin 	(void)vtmtxopen(sfstderr->mutex, VT_INIT);
37da2e3ebdSchin 	_Sfdone = 1;
38da2e3ebdSchin }
39da2e3ebdSchin 
40da2e3ebdSchin /* global variables used internally to the package */
41da2e3ebdSchin Sfextern_t _Sfextern =
42da2e3ebdSchin {	0,						/* _Sfpage	*/
43da2e3ebdSchin 	{ NIL(Sfpool_t*), 0, 0, 0, NIL(Sfio_t**) },	/* _Sfpool	*/
44da2e3ebdSchin 	NIL(int(*)_ARG_((Sfio_t*,int))),		/* _Sfpmove	*/
45da2e3ebdSchin 	NIL(Sfio_t*(*)_ARG_((Sfio_t*, Sfio_t*))),	/* _Sfstack	*/
467c2fbfb3SApril Chin 	NIL(void(*)_ARG_((Sfio_t*, int, void*))),	/* _Sfnotify	*/
47da2e3ebdSchin 	NIL(int(*)_ARG_((Sfio_t*))),			/* _Sfstdsync	*/
48da2e3ebdSchin 	{ NIL(Sfread_f),				/* _Sfudisc	*/
49da2e3ebdSchin 	  NIL(Sfwrite_f),
50da2e3ebdSchin 	  NIL(Sfseek_f),
51da2e3ebdSchin 	  NIL(Sfexcept_f),
52da2e3ebdSchin 	  NIL(Sfdisc_t*)
53da2e3ebdSchin 	},
54da2e3ebdSchin 	NIL(void(*)_ARG_((void)) ),			/* _Sfcleanup	*/
55da2e3ebdSchin 	0,						/* _Sfexiting	*/
56da2e3ebdSchin 	0,						/* _Sfdone	*/
57da2e3ebdSchin 	&Sfonce,					/* _Sfonce	*/
58da2e3ebdSchin 	_sfoncef,					/* _Sfoncef	*/
59da2e3ebdSchin 	&Sfmutex					/* _Sfmutex	*/
60da2e3ebdSchin };
61da2e3ebdSchin 
62da2e3ebdSchin ssize_t	_Sfi = -1;		/* value for a few fast macro functions	*/
637c2fbfb3SApril Chin #ifdef _ast_int8_t
647c2fbfb3SApril Chin ssize_t _Sfmaxr = 256*1024;	/* default maximum size for a record	*/
65da2e3ebdSchin #else
66da2e3ebdSchin ssize_t _Sfmaxr = 16*1024;	/* default maximum size for a record	*/
67da2e3ebdSchin #endif
68da2e3ebdSchin 
69da2e3ebdSchin #if vt_threaded
70da2e3ebdSchin static Vtmutex_t	_Sfmtxin, _Sfmtxout, _Sfmtxerr;
71da2e3ebdSchin #define SFMTXIN		(&_Sfmtxin)
72da2e3ebdSchin #define SFMTXOUT	(&_Sfmtxout)
73da2e3ebdSchin #define SFMTXERR	(&_Sfmtxerr)
747c2fbfb3SApril Chin #define SF_STDSAFE	SF_MTSAFE
75da2e3ebdSchin #else
76da2e3ebdSchin #define SFMTXIN		(0)
77da2e3ebdSchin #define SFMTXOUT	(0)
78da2e3ebdSchin #define SFMTXERR	(0)
797c2fbfb3SApril Chin #define SF_STDSAFE	(0)
80da2e3ebdSchin #endif
81da2e3ebdSchin 
82da2e3ebdSchin Sfio_t	_Sfstdin  = SFNEW(NIL(char*),-1,0,
837c2fbfb3SApril Chin 			  (SF_READ |SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXIN);
84da2e3ebdSchin Sfio_t	_Sfstdout = SFNEW(NIL(char*),-1,1,
857c2fbfb3SApril Chin 			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXOUT);
86da2e3ebdSchin Sfio_t	_Sfstderr = SFNEW(NIL(char*),-1,2,
877c2fbfb3SApril Chin 			  (SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXERR);
88da2e3ebdSchin 
89da2e3ebdSchin #undef	sfstdin
90da2e3ebdSchin #undef	sfstdout
91da2e3ebdSchin #undef	sfstderr
92da2e3ebdSchin 
93da2e3ebdSchin Sfio_t*	sfstdin  = &_Sfstdin;
94da2e3ebdSchin Sfio_t*	sfstdout = &_Sfstdout;
95da2e3ebdSchin Sfio_t*	sfstderr = &_Sfstderr;
96da2e3ebdSchin 
97da2e3ebdSchin __EXTERN__(ssize_t,_Sfi);
98da2e3ebdSchin __EXTERN__(Sfio_t,_Sfstdin);
99da2e3ebdSchin __EXTERN__(Sfio_t,_Sfstdout);
100da2e3ebdSchin __EXTERN__(Sfio_t,_Sfstderr);
101da2e3ebdSchin __EXTERN__(Sfio_t*,sfstdin);
102da2e3ebdSchin __EXTERN__(Sfio_t*,sfstdout);
103da2e3ebdSchin __EXTERN__(Sfio_t*,sfstderr);
104