| 1 | #include "stdio_impl.h" |
| 2 | |
| 3 | static FILE *volatile dummy_file = 0; |
| 4 | weak_alias(dummy_file, __stdin_used); |
| 5 | weak_alias(dummy_file, __stdout_used); |
| 6 | weak_alias(dummy_file, __stderr_used); |
| 7 | |
| 8 | static void close_file(FILE *f) |
| 9 | { |
| 10 | 	if (!f) return; |
| 11 | 	FFINALLOCK(f); |
| 12 | 	if (f->wpos != f->wbase) f->write(f, 0, 0); |
| 13 | 	if (f->rpos != f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR); |
| 14 | } |
| 15 | |
| 16 | void __stdio_exit(void) |
| 17 | { |
| 18 | 	FILE *f; |
| 19 | 	for (f=*__ofl_lock(); f; f=f->next) close_file(f); |
| 20 | 	close_file(__stdin_used); |
| 21 | 	close_file(__stdout_used); |
| 22 | 	close_file(__stderr_used); |
| 23 | } |
| 24 | |
| 25 | weak_alias(__stdio_exit, __stdio_exit_needed); |