diff options
Diffstat (limited to 'src/core/ao_stdio.c')
| -rw-r--r-- | src/core/ao_stdio.c | 26 | 
1 files changed, 14 insertions, 12 deletions
diff --git a/src/core/ao_stdio.c b/src/core/ao_stdio.c index 656b23c9..8cf66a23 100644 --- a/src/core/ao_stdio.c +++ b/src/core/ao_stdio.c @@ -96,21 +96,23 @@ flush(void)  __xdata uint8_t ao_stdin_ready;  char -getchar(void) __reentrant __critical +getchar(void) __reentrant  {  	char c; -	int8_t stdio = ao_cur_stdio; +	ao_arch_critical( +		int8_t stdio = ao_cur_stdio; -	for (;;) { -		c = ao_stdios[stdio].pollchar(); -		if (c != AO_READ_AGAIN) -			break; -		if (++stdio == ao_num_stdios) -			stdio = 0; -		if (stdio == ao_cur_stdio) -			ao_sleep(&ao_stdin_ready); -	} -	ao_cur_stdio = stdio; +		for (;;) { +			c = ao_stdios[stdio].pollchar(); +			if (c != AO_READ_AGAIN) +				break; +			if (++stdio == ao_num_stdios) +				stdio = 0; +			if (stdio == ao_cur_stdio) +				ao_sleep(&ao_stdin_ready); +		} +		ao_cur_stdio = stdio; +		);  	return c;  }  | 
