Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/sfio/sfextern.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#include "sfhdr.h"
23
24
/* External variables and functions used only by Sfio
25
** Written by Kiem-Phong Vo
26
*/
27
28
/* code to initialize mutexes */
29
static Vtmutex_t Sfmutex;
30
static Vtonce_t Sfonce = VTONCE_INITDATA;
31
static void _sfoncef()
32
{ (void)vtmtxopen(_Sfmutex, VT_INIT);
33
(void)vtmtxopen(&_Sfpool.mutex, VT_INIT);
34
(void)vtmtxopen(sfstdin->mutex, VT_INIT);
35
(void)vtmtxopen(sfstdout->mutex, VT_INIT);
36
(void)vtmtxopen(sfstderr->mutex, VT_INIT);
37
_Sfdone = 1;
38
}
39
40
/* global variables used internally to the package */
41
Sfextern_t _Sfextern =
42
{ 0, /* _Sfpage */
43
{ NIL(Sfpool_t*), 0, 0, 0, NIL(Sfio_t**) }, /* _Sfpool */
44
NIL(int(*)_ARG_((Sfio_t*,int))), /* _Sfpmove */
45
NIL(Sfio_t*(*)_ARG_((Sfio_t*, Sfio_t*))), /* _Sfstack */
46
NIL(void(*)_ARG_((Sfio_t*, int, void*))), /* _Sfnotify */
47
NIL(int(*)_ARG_((Sfio_t*))), /* _Sfstdsync */
48
{ NIL(Sfread_f), /* _Sfudisc */
49
NIL(Sfwrite_f),
50
NIL(Sfseek_f),
51
NIL(Sfexcept_f),
52
NIL(Sfdisc_t*)
53
},
54
NIL(void(*)_ARG_((void)) ), /* _Sfcleanup */
55
0, /* _Sfexiting */
56
0, /* _Sfdone */
57
&Sfonce, /* _Sfonce */
58
_sfoncef, /* _Sfoncef */
59
&Sfmutex /* _Sfmutex */
60
};
61
62
ssize_t _Sfi = -1; /* value for a few fast macro functions */
63
ssize_t _Sfmaxr = 0; /* default (unlimited) max record size */
64
65
#if vt_threaded
66
static Vtmutex_t _Sfmtxin, _Sfmtxout, _Sfmtxerr;
67
#define SFMTXIN (&_Sfmtxin)
68
#define SFMTXOUT (&_Sfmtxout)
69
#define SFMTXERR (&_Sfmtxerr)
70
#define SF_STDSAFE SF_MTSAFE
71
#else
72
#define SFMTXIN (0)
73
#define SFMTXOUT (0)
74
#define SFMTXERR (0)
75
#define SF_STDSAFE (0)
76
#endif
77
78
Sfio_t _Sfstdin = SFNEW(NIL(char*),-1,0,
79
(SF_READ |SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXIN);
80
Sfio_t _Sfstdout = SFNEW(NIL(char*),-1,1,
81
(SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXOUT);
82
Sfio_t _Sfstderr = SFNEW(NIL(char*),-1,2,
83
(SF_WRITE|SF_STATIC|SF_STDSAFE),NIL(Sfdisc_t*),SFMTXERR);
84
85
#undef sfstdin
86
#undef sfstdout
87
#undef sfstderr
88
89
Sfio_t* sfstdin = &_Sfstdin;
90
Sfio_t* sfstdout = &_Sfstdout;
91
Sfio_t* sfstderr = &_Sfstderr;
92
93
__EXTERN__(ssize_t,_Sfi);
94
__EXTERN__(Sfio_t,_Sfstdin);
95
__EXTERN__(Sfio_t,_Sfstdout);
96
__EXTERN__(Sfio_t,_Sfstderr);
97
__EXTERN__(Sfio_t*,sfstdin);
98
__EXTERN__(Sfio_t*,sfstdout);
99
__EXTERN__(Sfio_t*,sfstderr);
100
101