--- findfp.c.orig Tue May 20 15:22:41 2003 +++ findfp.c Sun Jul 20 18:50:26 2003 @@ -47,6 +47,7 @@ #include <stdlib.h> #include <string.h> +#include <pthread.h> #include <spinlock.h> #include "libc_private.h" @@ -62,12 +63,13 @@ {0}, __sFX + file} /* p r w flags file _bf z cookie close read seek write */ /* _ub _extra */ +#define __sFXInit {0, PTHREAD_MUTEX_INITIALIZER} /* the usual - (stdin + stdout + stderr) */ static FILE usual[FOPEN_MAX - 3]; static struct __sFILEX usual_extra[FOPEN_MAX - 3]; static struct glue uglue = { NULL, FOPEN_MAX - 3, usual }; -static struct __sFILEX __sFX[3]; +static struct __sFILEX __sFX[3] = {__sFXInit, __sFXInit, __sFXInit}; /* * We can't make this 'static' until 6.0-current due to binary @@ -81,17 +83,6 @@ std(__SWR|__SNBF, STDERR_FILENO) }; -/* - * The following kludge is done to ensure enough binary compatibility - * with future versions of libc. Or rather it allows us to work with - * libraries that have been built with a newer libc that defines these - * symbols and expects libc to provide them. We only have need to support - * i386 and alpha because they are the only "old" systems we have deployed. - */ -FILE *__stdinp = &__sF[0]; -FILE *__stdoutp = &__sF[1]; -FILE *__stderrp = &__sF[2]; - struct glue __sglue = { &uglue, 3, __sF }; static struct glue *lastglue = &uglue; @@ -113,7 +104,7 @@ { struct glue *g; static FILE empty; - static struct __sFILEX emptyx; + static struct __sFILEX emptyx = __sFXInit; FILE *p; struct __sFILEX *fx; @@ -179,6 +170,7 @@ fp->_lb._base = NULL; /* no line buffer */ fp->_lb._size = 0; /* fp->_lock = NULL; */ /* once set always set (reused) */ + fp->_extra->fl_mutex = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; fp->_extra->orientation = 0; #ifdef notdef /* Stateful encoding/decoding is not yet supported. */