make escape code handling for serial terminal more robust

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Marc Jones <marc.jones@amd.com>

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3691 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Patrick Georgi 2008-10-23 12:22:24 +00:00
parent c811a1c6ae
commit c4f294f33f
1 changed files with 15 additions and 12 deletions

View File

@ -50,21 +50,24 @@ static int _halfdelay = 0;
do the cooking in here, but we should probably eventually do the cooking in here, but we should probably eventually
pass it to dedicated vt100 code */ pass it to dedicated vt100 code */
static int getkeyseq(char *buffer, int len) static int getkeyseq(char *buffer, int len, int max)
{ {
int i; int i;
for(i = 0; i < 75; i++) { while (1) {
if (serial_havechar()) for(i = 0; i < 75; i++) {
break; if (serial_havechar())
mdelay(1); break;
mdelay(1);
}
if (i == 75)
return len;
buffer[len++] = serial_getchar();
if (len == max)
return len;
} }
if (i == 75)
return len;
buffer[len++] = serial_getchar();
return getkeyseq(buffer, len);
} }
static struct { static struct {
@ -99,7 +102,7 @@ static struct {
static int handle_escape(void) static int handle_escape(void)
{ {
char buffer[5]; char buffer[5];
int len = getkeyseq(buffer, 0); int len = getkeyseq(buffer, 0, sizeof(buffer));
int i, t; int i, t;
if (len == 0) if (len == 0)