Index: fusl/src/stdio/__stdio_exit.c |
diff --git a/fusl/src/stdio/__stdio_exit.c b/fusl/src/stdio/__stdio_exit.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..191b4454a48d3ff4258c2cd6dd5d29738d79620e |
--- /dev/null |
+++ b/fusl/src/stdio/__stdio_exit.c |
@@ -0,0 +1,24 @@ |
+#include "stdio_impl.h" |
+ |
+static FILE *volatile dummy_file = 0; |
+weak_alias(dummy_file, __stdin_used); |
+weak_alias(dummy_file, __stdout_used); |
+weak_alias(dummy_file, __stderr_used); |
+ |
+static void close_file(FILE *f) |
+{ |
+ if (!f) return; |
+ FFINALLOCK(f); |
+ if (f->wpos > f->wbase) f->write(f, 0, 0); |
+ if (f->rpos < f->rend) f->seek(f, f->rpos-f->rend, SEEK_CUR); |
+} |
+ |
+void __stdio_exit(void) |
+{ |
+ FILE *f; |
+ for (f=*__ofl_lock(); f; f=f->next) close_file(f); |
+ close_file(__stdin_used); |
+ close_file(__stdout_used); |
+} |
+ |
+weak_alias(__stdio_exit, __stdio_exit_needed); |