From 707de77a80d7712b7f151a71ac8ee05bd28c3675 Mon Sep 17 00:00:00 2001 From: turbocat Date: Mon, 7 Jun 2021 16:51:13 +0000 Subject: [PATCH] Newlibc: - Fixed bug with input to the console (when clicking on "backspace" characters were not deleted). - Added _NO_STDERR macro for redirecting "stderr" to the console git-svn-id: svn://kolibrios.org@8777 a494cfbc-eb01-0410-851d-a64ba20cac60 --- contrib/sdk/sources/newlib/libc/crt/console.asm | 4 ++++ contrib/sdk/sources/newlib/libc/include/stdio.h | 9 ++++++++- contrib/sdk/sources/newlib/libc/sys/conio.c | 16 +++++++++++----- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/contrib/sdk/sources/newlib/libc/crt/console.asm b/contrib/sdk/sources/newlib/libc/crt/console.asm index f36b768f9..c98f8a868 100644 --- a/contrib/sdk/sources/newlib/libc/crt/console.asm +++ b/contrib/sdk/sources/newlib/libc/crt/console.asm @@ -11,6 +11,7 @@ public _con_set_flags@4 public _con_cls public _con_write_string@8 public _con_getch2@0 +public _con_gets section '.text' align 16 @@ -168,6 +169,9 @@ _con_write_string@8: _con_getch2@0: jmp [con_getch2] +_con_gets: + jmp [con_gets] + _con_get_flags: _con_set_flags@4: _con_cls: diff --git a/contrib/sdk/sources/newlib/libc/include/stdio.h b/contrib/sdk/sources/newlib/libc/include/stdio.h index 700e7a852..f373618d6 100644 --- a/contrib/sdk/sources/newlib/libc/include/stdio.h +++ b/contrib/sdk/sources/newlib/libc/include/stdio.h @@ -146,12 +146,19 @@ typedef _fpos64_t fpos64_t; #define stdin (_REENT->_stdin) #define stdout (_REENT->_stdout) -#define stderr (_REENT->_stderr) + +#ifndef _NO_STDERR + #define stderr (_REENT->_stderr) +#else + #define stderr stdout +#endif #define _stdin_r(x) ((x)->_stdin) #define _stdout_r(x) ((x)->_stdout) #define _stderr_r(x) ((x)->_stderr) + + /* * Functions defined in ANSI C standard. */ diff --git a/contrib/sdk/sources/newlib/libc/sys/conio.c b/contrib/sdk/sources/newlib/libc/sys/conio.c index e9d3e7078..338a975a4 100644 --- a/contrib/sdk/sources/newlib/libc/sys/conio.c +++ b/contrib/sdk/sources/newlib/libc/sys/conio.c @@ -1,6 +1,9 @@ #include <_ansi.h> +#include #include #include "io.h" +#include + void load_libconsole(); void __stdcall con_init(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t); @@ -10,6 +13,7 @@ unsigned __stdcall con_set_flags(unsigned new_flags); void __stdcall con_cls(void); void __stdcall con_write_string(const char* string, unsigned length); short __stdcall con_getch2(void); +char* __stdcall con_gets(char*, unsigned); int __gui_mode; @@ -17,15 +21,18 @@ static int console_read(const char *path, void *buff, size_t offset, size_t count, size_t *done) { char *p = buff; - int cnt = 0; + /*int cnt = 0; short c; - char ch; + char ch;*/ + con_gets(p, count+1); + *done = strlen(p); // __asm__ volatile("int3"); - +/* do { c = con_getch2(); + printf("%d\n",(char)c); ch = (char)c; if(ch != 0) { @@ -34,12 +41,11 @@ static int console_read(const char *path, void *buff, cnt++; } }while(ch != 0x0D); - *done = cnt; +*/ return 0; } - static int console_write(const char *path, const void *buff, size_t offset, size_t count, size_t *writes) {