Disable interrupts while reading from stdin
[fw/altos] / src / ao_stdio.c
index 7bc416e1cf2a35ccce874033f61bf583e2f93830..045dff09f340e92b7b32b62ba2ceb914cfc2724f 100644 (file)
@@ -38,7 +38,8 @@ putchar(char c)
 void
 flush(void)
 {
 void
 flush(void)
 {
-       stdios[ao_cur_stdio].flush();
+       if (stdios[ao_cur_stdio].flush)
+               stdios[ao_cur_stdio].flush();
 }
 
 __xdata uint8_t ao_stdin_ready;
 }
 
 __xdata uint8_t ao_stdin_ready;
@@ -49,6 +50,7 @@ getchar(void) __reentrant
        char c;
        int8_t stdio = ao_cur_stdio;
 
        char c;
        int8_t stdio = ao_cur_stdio;
 
+       EA = 0;
        for (;;) {
                c = stdios[stdio].pollchar();
                if (c != AO_READ_AGAIN)
        for (;;) {
                c = stdios[stdio].pollchar();
                if (c != AO_READ_AGAIN)
@@ -58,6 +60,7 @@ getchar(void) __reentrant
                if (stdio == ao_cur_stdio)
                        ao_sleep(&ao_stdin_ready);
        }
                if (stdio == ao_cur_stdio)
                        ao_sleep(&ao_stdin_ready);
        }
+       EA = 1;
        ao_cur_stdio = stdio;
        return c;
 }
        ao_cur_stdio = stdio;
        return c;
 }