| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | /* 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"/* 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
 |