blob: 017f61f1b46e621daf47d04b601d8d7f916a9612 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
This is a threadsafe stdio based on the BSD stdio written by Chris Torek.
INCLUDE FILES AND PORTING
To continue to make this package portable, some basic rules on includes
files must be followed.
pthread.h should be included first (if it is to be included).
stdio.h should be included.
INTERNAL LOCKING
1. All functions that can be called by the user must have __flockfile at the
begining and a __funlockfile at the end. __Flockfile is a counting mutex,
The thread that owns the lock can call __flockfile as many times as
it wants, but must call an equal number of __funlockfile before the
lock will be released.
2. All functions starting with __ shouldn't need addtional locking.
3. Anything that writes the variable __sglue should lock __sfp_mutex,
check __sfp_state, and do a condion wait if it is set.
4. Anything that checks fp->_flag for valididity should also lock
__sfp_mutex.
5. Anything that reads the variable __sglue should lock __sfp_mutex, increment
__sfp_state, and then unlock the mutex. At function return it should
lock the mutex again decrement __sfp_state and check if zero. If so
do a cond_signal, and unlock the mutex.
6. The functions fopen, fdopen, and freopen are the only functions that
will change a fp->_file
7. fdopen and fopen both allocate the next fp by locking __sfp_mutex
checking fp->_flags and then setting it if free.
8. freopen tries to preserve fp->_file. It sets __sfp_mutex, then it
tries to lock fp->_file and close it.
9. __sinit is done with a pthread_once routine.
Copyright (c) 1993 Chris Provenzano. All rights reserved.
This product includes software developed by the Univeristy of California,
Berkeley and its contributors.
Things to do.
Fix printf so it uses the ininf function.
|