diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/stdio/fclose.c | 53 | 
1 files changed, 24 insertions, 29 deletions
| diff --git a/libc/stdio/fclose.c b/libc/stdio/fclose.c index f3e181c8a..27d3c7e96 100644 --- a/libc/stdio/fclose.c +++ b/libc/stdio/fclose.c @@ -16,36 +16,31 @@ int fclose(register FILE *stream)  	int rv = 0;  	__STDIO_AUTO_THREADLOCK_VAR; -#ifdef __UCLIBC_MJN3_ONLY__ -#warning REMINDER: dead code... but may want to simply check and not remove +#ifdef __STDIO_HAS_OPENLIST +#if !defined(__UCLIBC_HAS_THREADS__) || !defined(__STDIO_BUFFERS) +	/* First, remove the file from the open file list. */ +	{ +		FILE *ptr; + +		__STDIO_THREADLOCK_OPENLIST_DEL; +		__STDIO_THREADLOCK_OPENLIST_ADD; +		ptr = _stdio_openlist; +		if ((ptr = _stdio_openlist) == stream) { +			_stdio_openlist = stream->__nextopen; +		} else { +			while (ptr) { +				if (ptr->__nextopen == stream) { +					ptr->__nextopen = stream->__nextopen; +					break; +				} +				ptr = ptr->__nextopen; +			} +		} +		__STDIO_THREADUNLOCK_OPENLIST_ADD; +		__STDIO_THREADUNLOCK_OPENLIST_DEL; +	} +#endif  #endif -/* #ifdef __STDIO_HAS_OPENLIST */ -/* #if !defined(__UCLIBC_HAS_THREADS__) || !defined(__STDIO_BUFFERS) */ -/* 	/\* First, remove the file from the open file list. *\/ */ -/* 	{ */ -/* 		register FILE *ptr; */ - -/* 		__STDIO_THREADLOCK_OPENLIST; */ -/* 		if ((ptr = _stdio_openlist) == stream) { */ -/* #warning does a mod!!! */ -/* 			_stdio_openlist = stream->__nextopen; */ -/* 		} else { */ -/* 			while (ptr) { */ -/* 				if (ptr->__nextopen == stream) { */ -/* 					ptr->__nextopen = stream->__nextopen; */ -/* 					break; */ -/* 				} */ -/* 				ptr = ptr->__nextopen; */ -/* 			} */ -/* 		} */ -/* 		__STDIO_THREADUNLOCK_OPENLIST; */ - -/* 		if (!ptr) {	  /\* Did not find stream in the open file list! *\/ */ -/* 			return EOF; */ -/* 		} */ -/* 	} */ -/* #endif */ -/* #endif */  	__STDIO_AUTO_THREADLOCK(stream); | 
