From 992d82c6d492538d373baf5473add75d39f3c317 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Fri, 18 Jul 2025 22:43:34 +0300 Subject: [PATCH] syscalls: make use of stderr and fix chdir syscall return value --- include/screen.h | 1 + src/drivers/screen.c | 5 +++++ src/tasking/syscalls.c | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/screen.h b/include/screen.h index ede60f2..f71810c 100644 --- a/include/screen.h +++ b/include/screen.h @@ -34,6 +34,7 @@ uint16_t vga_entry(unsigned char uc, uint8_t color); size_t strlen(const char* str); void terminal_initialize(void); void terminal_setcolor(uint8_t color); +uint8_t terminal_getcolor(); void terminal_putentryat(char c, uint8_t color, size_t x, size_t y); void terminal_putchar(char c); void terminal_write(const char* data, size_t size); diff --git a/src/drivers/screen.c b/src/drivers/screen.c index c5a3127..ea2059b 100644 --- a/src/drivers/screen.c +++ b/src/drivers/screen.c @@ -36,6 +36,11 @@ void terminal_setcolor(uint8_t color) terminal_color = color; } +uint8_t terminal_getcolor() +{ + return terminal_color; +} + void terminal_putentryat(char c, uint8_t color, size_t x, size_t y) { const size_t index = y * VGA_WIDTH + x; diff --git a/src/tasking/syscalls.c b/src/tasking/syscalls.c index 43893e3..604e29d 100644 --- a/src/tasking/syscalls.c +++ b/src/tasking/syscalls.c @@ -4,6 +4,7 @@ #include "../include/liballoc.h" #include "../include/paging.h" #include "../include/string.h" +#include "../include/screen.h" #define STDIN_FILENO 0 #define STDOUT_FILENO 1 @@ -171,6 +172,14 @@ int sys_write(TrapFrame *tf) //debug_log("\n=================END OF THAT SHIT=====================\n"); return tf->edx; } + if(tf->ebx == STDERR_FILENO) + { + uint8_t prev_color = terminal_getcolor(); + terminal_setcolor(VGA_COLOR_RED); + print((char*)tf->ecx, tf->edx); + terminal_setcolor(prev_color); + return tf->edx; + } } else { @@ -234,7 +243,12 @@ int sys_chdir(TrapFrame *tf) { strcat(current->cwd->fat->path, "/"); strcat(current->cwd->fat->path, (char*)tf->ebx); - return fat_opendir(current->cwd, (const char*)tf->ebx); + + int result = fat_opendir(current->cwd, (const char*)tf->ebx); + if(result == 0) + return 0; + + return -1; } int sys_getcwd(TrapFrame *tf)