From: Anton Blanchard Date: Sat, 10 Apr 2010 18:05:59 +0000 (+0000) Subject: prom_getchar eats characters X-Git-Tag: yaboot-1.3.17-rc1~19 X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=commitdiff_plain;h=4eb6ac2f80d2469e912e85a0962989d5e97ed3dd prom_getchar eats characters This bug has been annoying me for a long time. If you copy and paste a string into the yaboot prompt, or even type too fast, characters get dropped. It turns out we were asking OF for 4 characters, but only using the first one. There is strange logic to look for \e[, and then oring the third character with 0x100. I haven't been able to find anyone that knows why that was there in the first place, so just remove it and fix this bug once and for all. Automated test infrastructures the world over will thank us for fixing this bug! Signed-off-by: Anton Blanchard Signed-off-by: Tony Breeds --- diff --git a/second/prom.c b/second/prom.c index 2c318f9..5aa0a02 100644 --- a/second/prom.c +++ b/second/prom.c @@ -387,16 +387,14 @@ prom_readblocks (prom_handle dev, int blockNum, int blockCount, void *buffer) int prom_getchar () { - char c[4]; + char c; int a; - while ((a = (int)call_prom ("read", 3, 1, prom_stdin, c, 4)) == 0) + while ((a = (int)call_prom ("read", 3, 1, prom_stdin, &c, 1)) == 0) ; if (a == -1) prom_abort ("EOF on console\n"); - if (a == 3 && c[0] == '\e' && c[1] == '[') - return 0x100 | c[2]; - return c[0]; + return c; } int @@ -511,8 +509,6 @@ prom_readline (char *prompt, char *buf, int len) while (i < len-1 && (c = prom_getchar ()) != '\r') { - if (c >= 0x100) - continue; if (c == 8) { if (i > 0)