X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fkernel%2Fao_stdio.c;h=7f74f81194bcca5b1782c111c1d63b711b130e29;hp=c3b51d123ef1407702200798feaf17c6711c3e02;hb=HEAD;hpb=c6e57291d91f1f6c4de5c54a5cfd3eef66d9f830 diff --git a/src/kernel/ao_stdio.c b/src/kernel/ao_stdio.c index c3b51d12..7f74f811 100644 --- a/src/kernel/ao_stdio.c +++ b/src/kernel/ao_stdio.c @@ -75,10 +75,10 @@ struct ao_stdio ao_stdios[AO_NUM_STDIOS]; #if AO_NUM_STDIOS > 1 -int8_t ao_cur_stdio; -int8_t ao_num_stdios; +uint8_t ao_cur_stdio; +uint8_t ao_num_stdios; #else -int8_t ao_cur_stdio; +uint8_t ao_cur_stdio; #define ao_cur_stdio 0 #define ao_num_stdios 0 #endif @@ -114,7 +114,7 @@ char ao_getchar(void) { int c; - int8_t stdio; + uint8_t stdio; ao_arch_block_interrupts(); stdio = ao_cur_stdio; @@ -133,7 +133,7 @@ ao_getchar(void) ao_cur_stdio = stdio; #endif ao_arch_release_interrupts(); - return c; + return (char) c; } uint8_t @@ -142,16 +142,16 @@ ao_echo(void) return ao_stdios[ao_cur_stdio].echo; } -int8_t +uint8_t ao_add_stdio(int (*_pollchar)(void), void (*putchar)(char), - void (*flush)(void)) + void (*_flush)(void)) { if (ao_num_stdios == AO_NUM_STDIOS) ao_panic(AO_PANIC_STDIO); ao_stdios[ao_num_stdios]._pollchar = _pollchar; ao_stdios[ao_num_stdios].putchar = putchar; - ao_stdios[ao_num_stdios].flush = flush; + ao_stdios[ao_num_stdios].flush = _flush; ao_stdios[ao_num_stdios].echo = 1; #if AO_NUM_STDIOS > 1 return ao_num_stdios++; @@ -188,4 +188,20 @@ ao_flushc(FILE *ignore) static FILE __stdio = FDEV_SETUP_STREAM(ao_putc, ao_getc, ao_flushc, _FDEV_SETUP_RW); +#ifdef PICOLIBC_STDIO_GLOBALS + +#ifdef __strong_reference +#define STDIO_ALIAS(x) __strong_reference(stdin, x); +#else +#define STDIO_ALIAS(x) FILE *const x = &__stdio; +#endif + +FILE *const stdin = &__stdio; +STDIO_ALIAS(stdout); +STDIO_ALIAS(stderr); + +#else + FILE *const __iob[3] = { &__stdio, &__stdio, &__stdio }; + +#endif