summaryrefslogtreecommitdiffstatshomepage
path: root/unix/unix_mphal.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix/unix_mphal.c')
-rw-r--r--unix/unix_mphal.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/unix/unix_mphal.c b/unix/unix_mphal.c
index 03488b9a52..df37976272 100644
--- a/unix/unix_mphal.c
+++ b/unix/unix_mphal.c
@@ -117,7 +117,7 @@ static int call_dupterm_read(void) {
read_m[2] = MP_OBJ_NEW_SMALL_INT(1);
mp_obj_t res = mp_call_method_n_kw(1, 0, read_m);
if (res == mp_const_none) {
- return -1;
+ return -2;
}
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(res, &bufinfo, MP_BUFFER_READ);
@@ -143,25 +143,32 @@ static int call_dupterm_read(void) {
int mp_hal_stdin_rx_chr(void) {
unsigned char c;
- #if MICROPY_PY_OS_DUPTERM
- while (MP_STATE_PORT(term_obj) != MP_OBJ_NULL) {
- int c = call_dupterm_read();
+#if MICROPY_PY_OS_DUPTERM
+ if (MP_STATE_PORT(term_obj) != MP_OBJ_NULL) {
+ int c;
+ do {
+ c = call_dupterm_read();
+ } while (c == -2);
if (c == -1) {
- break;
+ goto main_term;
}
if (c == '\n') {
c = '\r';
}
return c;
+ } else {
+ main_term:;
+#endif
+ int ret = read(0, &c, 1);
+ if (ret == 0) {
+ c = 4; // EOF, ctrl-D
+ } else if (c == '\n') {
+ c = '\r';
+ }
+ return c;
+#if MICROPY_PY_OS_DUPTERM
}
- #endif
- int ret = read(0, &c, 1);
- if (ret == 0) {
- c = 4; // EOF, ctrl-D
- } else if (c == '\n') {
- c = '\r';
- }
- return c;
+#endif
}
void mp_hal_stdout_tx_strn(const char *str, size_t len) {