summaryrefslogtreecommitdiff
path: root/src/stdlib/exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdlib/exit.c')
-rw-r--r--src/stdlib/exit.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/stdlib/exit.c b/src/stdlib/exit.c
index 2953f3ec..18ee086d 100644
--- a/src/stdlib/exit.c
+++ b/src/stdlib/exit.c
@@ -1,6 +1,7 @@
#include <stdlib.h>
-#include "limits.h"
-#include "stddef.h"
+#include <limits.h>
+#include <stddef.h>
+#include "stdio/_stdio.h"
#include "_syscall.h"
#include "_stdlib.h"
@@ -9,6 +10,7 @@ _Noreturn void exit(int status)
{
long scno = __syscall_lookup(exit);
struct atexit *ae = &(__stdlib.atexit);
+ size_t i;
/* execute all atexit() registered functions in reverse order */
while (ae) {
@@ -19,7 +21,9 @@ _Noreturn void exit(int status)
ae = ae->prev;
}
- /* TODO: close all open files */
+ for (i = 0; i < FOPEN_MAX; i++) {
+ fclose(&(__stdio.FILES[i]));
+ }
for (;;) {
__syscall(scno, status);