From aebd860947b5b221914ac977fdc4741fc937cb20 Mon Sep 17 00:00:00 2001 From: apio Date: Wed, 19 Oct 2022 20:43:04 +0200 Subject: [PATCH] libc: Add stdin Aka keyboard :) --- apps/src/sh.c | 15 ++++----------- libs/libc/include/stdio.h | 2 ++ libs/libc/include/unistd.h | 5 +++-- libs/libc/src/file.cpp | 1 + libs/libc/src/init.cpp | 2 ++ 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/apps/src/sh.c b/apps/src/sh.c index 9e605f31..89eb3d9f 100644 --- a/apps/src/sh.c +++ b/apps/src/sh.c @@ -138,13 +138,6 @@ void command_concat(command* cmd, const char* str) int main() { - FILE* fp = fopen("/dev/kbd", "r"); - if (!fp) - { - perror("fopen"); - return 1; - } - show_prompt(); char buffer[33]; @@ -154,15 +147,15 @@ int main() while (1) { - size_t nread = fread(buffer, sizeof(buffer) - 1, 1, fp); - if (ferror(fp)) + size_t nread = fread(buffer, sizeof(buffer) - 1, 1, stdin); + if (ferror(stdin)) { perror("fread"); return 1; } - if (feof(fp)) + if (feof(stdin)) { - clearerr(fp); + clearerr(stdin); msleep(20); continue; } diff --git a/libs/libc/include/stdio.h b/libs/libc/include/stdio.h index 268b0dba..07a37152 100644 --- a/libs/libc/include/stdio.h +++ b/libs/libc/include/stdio.h @@ -17,6 +17,8 @@ typedef struct extern FILE* stderr; extern FILE* stdout; +extern FILE* stdin; +#define stdin stdin #define stdout stdout #define stderr stderr diff --git a/libs/libc/include/unistd.h b/libs/libc/include/unistd.h index 1f3613eb..f3f2cce8 100644 --- a/libs/libc/include/unistd.h +++ b/libs/libc/include/unistd.h @@ -6,8 +6,9 @@ #include #include -#define STDOUT_FILENO 0 -#define STDERR_FILENO 1 +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 #ifdef __cplusplus extern "C" diff --git a/libs/libc/src/file.cpp b/libs/libc/src/file.cpp index d56084e6..e4bd1107 100644 --- a/libs/libc/src/file.cpp +++ b/libs/libc/src/file.cpp @@ -7,6 +7,7 @@ FILE* stderr; FILE* stdout; +FILE* stdin; extern "C" { diff --git a/libs/libc/src/init.cpp b/libs/libc/src/init.cpp index 7352cee9..330ca048 100644 --- a/libs/libc/src/init.cpp +++ b/libs/libc/src/init.cpp @@ -8,6 +8,7 @@ static void terminate_libc() { fclose(stdout); fclose(stderr); + fclose(stdin); } static void initialize_random() @@ -52,6 +53,7 @@ static void check_for_file(int fd, FILE** target_stream, const char* path, const extern "C" void initialize_libc() { + check_for_file(STDIN_FILENO, &stdin, "/dev/kbd", "r"); check_for_file(STDOUT_FILENO, &stdout, "/dev/console", "rw"); check_for_file(STDERR_FILENO, &stderr, "/dev/console", "rw");