From 5a2440ce1b487dc896cd60d76871f40236d22687 Mon Sep 17 00:00:00 2001 From: Kari Salminen Date: Thu, 17 Jan 2008 11:16:00 +0000 Subject: Fix for isalpha() assertions (Almost identical to revision 29924's fix). Added the rationale for this fix in comments so hopefully this won't happen a third time at the same point in code ;). svn-id: r30531 --- engines/agi/agi.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'engines') diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp index 17359236f0..5cf82b83bd 100644 --- a/engines/agi/agi.cpp +++ b/engines/agi/agi.cpp @@ -222,7 +222,19 @@ void AgiEngine::processEvents() { // Not a special key, so get the ASCII code for it key = event.kbd.ascii; - if (isalpha(key)) { + // Function isalpha is defined in so the following applies to it: + // + // The C Programming Language Standard states: + // The header declares several functions useful for classifying + // and mapping characters. In all cases the argument is an int, the value + // of which shall be representable as an unsigned char or shall equal the + // value of the macro EOF. If the argument has any other value, the + // behavior is undefined. + // + // For a concrete example (e.g. in Microsoft Visual Studio 2003): + // When used with a debug CRT library, isalpha will display a CRT assert + // if passed a parameter that isn't EOF or in the range of 0 through 0xFF. + if (key >= 0 && key <= 0xFF && isalpha(key)) { // Key is A-Z. // Map Ctrl-A to 1, Ctrl-B to 2, etc. if (event.kbd.flags & Common::KBD_CTRL) { -- cgit v1.2.3