Andrew Top | 286dd78 | 2018-10-02 16:52:45 -0700 | [diff] [blame] | 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); |
Kaido Kert | 788710a | 2023-06-05 07:50:22 -0700 | [diff] [blame] | 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); |
Andrew Top | 286dd78 | 2018-10-02 16:52:45 -0700 | [diff] [blame] | 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); |