findfp.c.patch   [plain text]


--- 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. */