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

Reply via email to