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