2004-01-15 Thomas Pfaff <tpfaff@gmx.net>
* libc/stdio/fclose.c: Include sys/lock.h.
        (fclose): Destroy lock when file is closed.
        * libc/stdio/findfp.c (__sfp): Initialize file pointers _lock
        member.
        * libc/stdio/freopen.c: Include sys/lock.h.
        (_freopen_r): Destroy lock when file is closed.
        * libc/stdio/vfprintf.c (__sbprintf): Initialize file pointers
        _lock member.
			
			
This commit is contained in:
		| @@ -1,3 +1,14 @@ | |||||||
|  | 2004-01-15  Thomas Pfaff  <tpfaff@gmx.net> | ||||||
|  |  | ||||||
|  | 	* libc/stdio/fclose.c: Include sys/lock.h. | ||||||
|  | 	(fclose): Destroy lock when file is closed. | ||||||
|  | 	* libc/stdio/findfp.c (__sfp): Initialize file pointers _lock | ||||||
|  | 	member. | ||||||
|  | 	* libc/stdio/freopen.c: Include sys/lock.h. | ||||||
|  | 	(_freopen_r): Destroy lock when file is closed. | ||||||
|  | 	* libc/stdio/vfprintf.c (__sbprintf): Initialize file pointers | ||||||
|  | 	_lock member. | ||||||
|  |  | ||||||
| 2004-01-08  Joel Sherrill  <joel@oarcorp.com> | 2004-01-08  Joel Sherrill  <joel@oarcorp.com> | ||||||
|  |  | ||||||
|         * libc/ctype/iswctype.c, include/sys/reent.h, libc/stdlib/a64l.c: |         * libc/ctype/iswctype.c, include/sys/reent.h, libc/stdlib/a64l.c: | ||||||
|   | |||||||
| @@ -50,6 +50,7 @@ Required OS subroutines: <<close>>, <<fstat>>, <<isatty>>, <<lseek>>, | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include "local.h" | #include "local.h" | ||||||
|  | #include <sys/lock.h> | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Close a file. |  * Close a file. | ||||||
| @@ -84,5 +85,9 @@ _DEFUN (fclose, (fp), | |||||||
|     FREELB (fp); |     FREELB (fp); | ||||||
|   fp->_flags = 0;		/* release this FILE for reuse */ |   fp->_flags = 0;		/* release this FILE for reuse */ | ||||||
|   _funlockfile(fp); |   _funlockfile(fp); | ||||||
|  | #ifndef __SINGLE_THREAD__ | ||||||
|  |   __lock_close_recursive (*(_LOCK_RECURSIVE_T *)&fp->_lock); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   return (r); |   return (r); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -114,6 +114,10 @@ found: | |||||||
|   fp->_ub._size = 0; |   fp->_ub._size = 0; | ||||||
|   fp->_lb._base = NULL;		/* no line buffer */ |   fp->_lb._base = NULL;		/* no line buffer */ | ||||||
|   fp->_lb._size = 0; |   fp->_lb._size = 0; | ||||||
|  | #ifndef __SINGLE_THREAD__ | ||||||
|  |   memset (&fp->_lock, 0, sizeof(fp->_lock)); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   return fp; |   return fp; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -71,6 +71,7 @@ Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, | |||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include "local.h" | #include "local.h" | ||||||
|  | #include <sys/lock.h> | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Re-direct an existing, open (probably) file to some other file. |  * Re-direct an existing, open (probably) file to some other file. | ||||||
| @@ -150,6 +151,9 @@ _DEFUN (_freopen_r, (ptr, file, mode, fp), | |||||||
|       fp->_flags = 0;		/* set it free */ |       fp->_flags = 0;		/* set it free */ | ||||||
|       ptr->_errno = e;		/* restore in case _close clobbered */ |       ptr->_errno = e;		/* restore in case _close clobbered */ | ||||||
|       _funlockfile(fp); |       _funlockfile(fp); | ||||||
|  | #ifndef __SINGLE_THREAD__ | ||||||
|  |       __lock_close_recursive (*(_LOCK_RECURSIVE_T *)&fp->_lock); | ||||||
|  | #endif | ||||||
|       return NULL; |       return NULL; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -252,6 +252,9 @@ __sbprintf(fp, fmt, ap) | |||||||
| 	fake._bf._base = fake._p = buf; | 	fake._bf._base = fake._p = buf; | ||||||
| 	fake._bf._size = fake._w = sizeof(buf); | 	fake._bf._size = fake._w = sizeof(buf); | ||||||
| 	fake._lbfsize = 0;	/* not actually used, but Just In Case */ | 	fake._lbfsize = 0;	/* not actually used, but Just In Case */ | ||||||
|  | #ifndef __SINGLE_THREAD__ | ||||||
|  | 	memset (&fake._lock, 0, sizeof(fake._lock)); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| 	/* do the work, then copy any error status */ | 	/* do the work, then copy any error status */ | ||||||
| 	ret = VFPRINTF(&fake, fmt, ap); | 	ret = VFPRINTF(&fake, fmt, ap); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user