diff options
Diffstat (limited to 'libc/stdio')
-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); |