This is a list of all the system library functions used by the
Prospero server when running in multi-threaded mode.  Each function
has a description of its thread-safe status after it.  This is really
an internal document, but we are providing it in this prerelease for
the sake of anyone wanting to work with the multithreaded distribution.


.div
.rem
___errno
_exit
abort	Safe
alarm	2
atexit	Safe
atoi	Safe
atol	Safe
bind	Safe
calloc	Safe
ceil	Must be compiled with libm.so NOT libm.a
chdir	2
chmod	2
clearerr	Safe
close	2
closedir	Safe
connect	Safe
crypt	Safe
dup2	UNSAFE
	called in a number of places, added assertions - probably fail!
execv	2
exit	2
fclose	Safe
fcntl	2
fdopen	Safe
ferror	Safe
fflush	Safe
fgets	Safe
fileno	Safe
fopen	Safe
fork	2
fprintf	Safe (as long as setlocale not used)
fputs	Safe
fread	Safe
free	Safe
fseek	Safe
fstat	2
ftell	Safe
fwrite	Safe
getc	Note its a macro - evaluates arg more than once
getchar	Safe
getcwd	Safe
getdomainname	WEIRD - not in man page
getenv	Safe
geteuid	2
getgrgid	UNSAFE - Use getgrgid_r
	Write p_th_getgrgid that calls getgrgid_r or mutexes and copies
	Used in app/ls.c(asserts single thread) & dsrfinfo(unsafely)
	SWA removed
gethostbyname	UNSAFE - Use gethostbyname_r
	Used in various places either asserts single thread 
	or mutexes GETHOSTBYNAME
getpid	2
getpwuid	UNSAFE use getpwuid_r
	Used in various client things - asserts single thread
	dsrfinfo UNSAFELY
	SWA removed
getservbyname	UNSAFE - Use getservbyname_r
	Used in various client things - asserts single thread
getsockopt	Safe
getuid	2
gmtime	UNSAFE
	Mutexed by PFS_TIMETOASN
inet_addr	Safe
inet_ntoa	Safe
isascii	Safe (*setlocale)
localtime	UNSAFE
	Mutexed by PFS_TIMETOASN
malloc	Safe
memcmp	Safe
memcpy	Safe
memmove	Safe
memset	Safe
mkdir	2
mutex_init	Safe
mutex_lock	Safe
mutex_trylock	Safe
mutex_unlock	Safe
open	2
opendir	Safe
perror	Safe
printf	Safe (as long as setlocale not used)
putc	Safe (note macro evaluates Streammultiple times)
rand	UNSAFE use rand_r
	  SWA to look at this if assertion fails
	assertions may break wais
read	2
readdir	UNSAFE - Use readdir_r
	Many places - asserts single threaded
	dsdir UNSAFELY USED
	scandir UNSAFELY USED, this is called by WAIS
realloc	Safe
recvfrom	Safe
rename	2
select	Safe
sendto	Safe
setsid	2
setsockopt	Safe
sigemptyset	Safe
signal	2
sigprocmask	2
sleep	Safe
socket	Safe
sprintf	Safe
srand	UNSAFE
	see notes on rand
sscanf	Safe
stat	2
strcasecmp	Safe
strcat	Safe
strchr	Safe
strcmp	Safe
strcpy	Safe
strerror	Safe
strlen	Safe
strncat	Safe
strncmp	Safe
strncpy	Safe
strrchr	Safe
strstr	Safe
sysinfo	2
thr_create	Safe
thr_getspecific	Safe
thr_keycreate	Safe
thr_self	Safe
thr_setspecific	Safe
time	2
toupper	Safe (as long as not using setlocale)
umask	Safe
ungetc	Safe
unlink	2
vprintf		Asynch-Safe, whatever that means?	ASK SUN
vsprintf	Safe
write		2