summaryrefslogtreecommitdiff
path: root/userland/libc/stdio
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-10-24 13:50:36 +0200
committerAnton Kling <anton@kling.gg>2023-10-24 13:50:36 +0200
commit3ae251a204748a2f1c4c2af6c55e73d5e5159d0f (patch)
tree07d02eb1b25173e3af41284a9def4cdb9191bb97 /userland/libc/stdio
parente91a4f1e31ee100b2a13cefedb182e9d69ef04ad (diff)
LibC: Allocate stdin, stdout, stderr on the heap so they can be closed with fclose
Diffstat (limited to 'userland/libc/stdio')
-rw-r--r--userland/libc/stdio/fclose.c5
-rw-r--r--userland/libc/stdio/stderr.c11
-rw-r--r--userland/libc/stdio/stdin.c10
-rw-r--r--userland/libc/stdio/stdout.c13
4 files changed, 3 insertions, 36 deletions
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 <stdio.h>
-#include <unistd.h>
-
-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 <stdio.h>
-#include <unistd.h>
-
-FILE __stdout_FILE = {
- .write = write_fd,
- .read = read_fd,
- .is_eof = 0,
- .has_error = 0,
- .seek = NULL,
- .cookie = NULL,
- .fd = 1,
-};
-FILE __stderr_FILE;