Skip to content
Snippets Groups Projects
Commit 13394a63 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

unix/unix_mphal: Hack to make uos.dupterm() actually work.

See https://github.com/micropython/micropython/issues/1736 for the
list of complications. This workaround instead of duplicating REPL
to another stream, switches to it, because read(STDIN) we use otherwise
is blocking call, so it and custom REPL stream can't be used together.
parent 53ad5edc
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......@@ -144,16 +144,20 @@ 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 (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) {
......@@ -162,6 +166,9 @@ int mp_hal_stdin_rx_chr(void) {
c = '\r';
}
return c;
#if MICROPY_PY_OS_DUPTERM
}
#endif
}
void mp_hal_stdout_tx_strn(const char *str, size_t len) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment