| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | /* Copyright (C) 2004       Manuel Novoa III    <mjn3@codepoet.org> * * GNU Library General Public License (LGPL) version 2 or later. * * Dedicated to Toni.  See uClibc/DEDICATION.mjn3 for details. */#include <features.h>#ifdef __USE_GNU#include "_stdio.h"libc_hidden_proto(fclose)/* NOTE: GLIBC difference!!! -- fcloseall * According to the info pages, glibc actually fclose()s all open files. * Apparently, glibc's new version only fflush()s and unbuffers all * writing streams to cope with unordered destruction of c++ static * objects. */int fcloseall (void){#ifdef __STDIO_HAS_OPENLIST	int retval = 0;	FILE *f;	__STDIO_OPENLIST_INC_USE;#ifdef __UCLIBC_MJN3_ONLY__#warning REMINDER: should probably have a get_head() operation#endif	__STDIO_THREADLOCK_OPENLIST_ADD;	f = _stdio_openlist;	__STDIO_THREADUNLOCK_OPENLIST_ADD;	while (f) {#ifdef __UCLIBC_MJN3_ONLY__#warning REMINDER: should probably have a get_next() operation#endif		FILE *n = f->__nextopen;		__STDIO_AUTO_THREADLOCK_VAR;		__STDIO_AUTO_THREADLOCK(f);		/* Only call fclose on the stream if it is not already closed. */		if ((f->__modeflags & (__FLAG_READONLY|__FLAG_WRITEONLY))		    != (__FLAG_READONLY|__FLAG_WRITEONLY)		    ) {			if (fclose(f)) {				retval = EOF;			}		}		__STDIO_AUTO_THREADUNLOCK(f);		f = n;	}	__STDIO_OPENLIST_DEC_USE;	return retval;#else#warning Always fails in this configuration because no open file list.	return EOF;#endif}#endif
 |