From 3ae251a204748a2f1c4c2af6c55e73d5e5159d0f Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Tue, 24 Oct 2023 13:50:36 +0200 Subject: LibC: Allocate stdin, stdout, stderr on the heap so they can be closed with fclose --- userland/libc/stdio/fclose.c | 5 +++-- userland/libc/stdio/stderr.c | 11 ----------- userland/libc/stdio/stdin.c | 10 ---------- userland/libc/stdio/stdout.c | 13 ------------- 4 files changed, 3 insertions(+), 36 deletions(-) delete mode 100644 userland/libc/stdio/stderr.c delete mode 100644 userland/libc/stdio/stdout.c (limited to 'userland/libc/stdio') diff --git a/userland/libc/stdio/fclose.c b/userland/libc/stdio/fclose.c index 02d93ae..01bdb22 100644 --- a/userland/libc/stdio/fclose.c +++ b/userland/libc/stdio/fclose.c @@ -4,7 +4,8 @@ // https://pubs.opengroup.org/onlinepubs/9699919799/functions/fclose.html // FIXME: Do some actual error checking. int fclose(FILE *stream) { + if (stream) free(stream->cookie); - free(stream); - return 0; + free(stream); + return 0; } diff --git a/userland/libc/stdio/stderr.c b/userland/libc/stdio/stderr.c deleted file mode 100644 index 76597e2..0000000 --- a/userland/libc/stdio/stderr.c +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include - -FILE __stderr_FILE = { - .write = write_fd, - .read = read_fd, - .is_eof = 0, - .has_error = 0, - .cookie = NULL, - .fd = 2, -}; diff --git a/userland/libc/stdio/stdin.c b/userland/libc/stdio/stdin.c index 2e1e50f..e84ea7e 100644 --- a/userland/libc/stdio/stdin.c +++ b/userland/libc/stdio/stdin.c @@ -71,13 +71,3 @@ int seek_fd(FILE *stream, long offset, int whence) { // FIXME: Error checking return 0; } - -FILE __stdin_FILE = { - .write = write_fd, - .read = read_fd, - .seek = NULL, - .is_eof = 0, - .has_error = 0, - .cookie = NULL, - .fd = 0, -}; diff --git a/userland/libc/stdio/stdout.c b/userland/libc/stdio/stdout.c deleted file mode 100644 index 7f4edf0..0000000 --- a/userland/libc/stdio/stdout.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include - -FILE __stdout_FILE = { - .write = write_fd, - .read = read_fd, - .is_eof = 0, - .has_error = 0, - .seek = NULL, - .cookie = NULL, - .fd = 1, -}; -FILE __stderr_FILE; -- cgit v1.2.3