If you use gets() and enter any of the arrow keys, you will get into a hang
condition. The root cause appears to be in da_ConRead, in daConsole.c.
Arrow keys (and various others listed in table 88 of the UEFI specification)
return ScanCode != 0 and UnicodeChar == 0 (except ESC, which I'll mention
later). This causes the code to go to:
if(iswcntrl(Key.UnicodeChar)) { // If a control character, or a scan code
break;
}
Since UnicodeChar is 0 for arrow keys, and iswcntrl returns TRUE for 0, this
will cause a break. By causing a break, no key will be placed in the output
buffer, which will give a read length of 0. Upper levels of the read code in
StdLib will interpret this as an EOF condition. So if you used code like:
char *x;
while ((x = gets(mybuffer)) != NULL) {
..process string...
}
You will hang. It tested under other environments and the arrow keys are
ignored. I suggest removing this section of code above
But this leaves other strange behavior with regard to control characters. Try
typing CTRL-C. Rather than ignoring it, it tries to print it. I added the
following code after NumEcho = 0;
if(Key.ScanCode == SCAN_NULL) {
NumEcho = 0;
if (iswcntrl (Key.UnicodeChar) &&
Key.UnicodeChar != CHAR_CARRIAGE_RETURN &&
Key.UnicodeChar != CHAR_BACKSPACE &&
Key.UnicodeChar != CHAR_TAB) {
Stream->UnGetKey.UnicodeChar = CHAR_NULL;
Stream->UnGetKey.ScanCode = SCAN_NULL;
continue;
}
This may not be the right way to handle this. In particular, there still seems
to be an issue with backspace. In implementations I tested (other than the
shell) backspace at the beginning of the line did nothing. But in the shell it
continues. Any help here?
Tim
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel