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
pass it to dedicated vt100 code */
static int getkeyseq(char *buffer, int len)
static int getkeyseq(char *buffer, int len, int max)
{
int i;
for(i = 0; i < 75; i++) {
if (serial_havechar())
break;
mdelay(1);
while (1) {
for(i = 0; i < 75; i++) {
if (serial_havechar())
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 {
@ -99,7 +102,7 @@ static struct {
static int handle_escape(void)
{
char buffer[5];
int len = getkeyseq(buffer, 0);
int len = getkeyseq(buffer, 0, sizeof(buffer));
int i, t;
if (len == 0)