From: Václav Slavík Date: Thu, 10 May 2001 16:41:12 +0000 (+0000) Subject: fixed parsing of XPM data files from demos/forty X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b326e313a0ce8ba54f6f0baac517faa80a2b744b fixed parsing of XPM data files from demos/forty (decoder did not parse lowercase hexadecimal numbers) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10110 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/xpmdecod.cpp b/src/common/xpmdecod.cpp index d317187e2b..f05334ba3f 100644 --- a/src/common/xpmdecod.cpp +++ b/src/common/xpmdecod.cpp @@ -491,6 +491,25 @@ static rgbRecord theRGBRecords[] = }; static int numTheRGBRecords = 234; +static unsigned char ParseHexadecimal(char digit1, char digit2) +{ + unsigned char i1, i2; + + if (digit1 >= 'a') + i1 = digit1 - 'a' + 0x0A; + else if (digit1 >= 'A') + i1 = digit1 - 'A' + 0x0A; + else + i1 = digit1 - '0'; + if (digit2 >= 'a') + i2 = digit2 - 'a' + 0x0A; + else if (digit2 >= 'A') + i2 = digit2 - 'A' + 0x0A; + else + i2 = digit2 - '0'; + return (0x10 * i1 + i2); +} + static bool GetRGBFromName(const char *inname, bool *isNone, unsigned char *r, unsigned char*g, unsigned char *b) { @@ -503,16 +522,10 @@ static bool GetRGBFromName(const char *inname, bool *isNone, // #rrggbb are not in database, we parse them directly if ( *inname == '#' && strlen(inname) == 7 ) { - char buf[3]; - buf[2] = 0; - buf[0] = inname[1]; buf[1] = inname[2]; - *r = (unsigned char) wxHexToDec(buf); - buf[0] = inname[3]; buf[1] = inname[4]; - *g = (unsigned char) wxHexToDec(buf); - buf[0] = inname[5]; buf[1] = inname[6]; - *b = (unsigned char) wxHexToDec(buf); + *r = ParseHexadecimal(inname[1], inname[2]); + *g = ParseHexadecimal(inname[3], inname[4]); + *b = ParseHexadecimal(inname[5], inname[6]); *isNone = FALSE; - return TRUE; } @@ -634,6 +647,7 @@ wxImage wxXPMDecoder::ReadData(const char **xpm_data) /* * Read hints and initialize structures: */ + count = sscanf(xpm_data[0], "%u %u %u %u", &width, &height, &colors_cnt, &chars_per_pixel); if ( count != 4 || width * height * colors_cnt == 0 )