Module: wine Branch: master Commit: 747c649d99dceffd03bb1458fa17049618501b67 URL: http://source.winehq.org/git/wine.git/?a=commit;h=747c649d99dceffd03bb1458fa...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Feb 11 08:34:41 2014 +0400
ole32: Use precomposed table for GUID from string conversion.
---
dlls/ole32/compobj.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index 719d9de..e615599 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -2065,11 +2065,21 @@ static inline BOOL is_valid_hex(WCHAR c) return TRUE; }
+static const BYTE guid_conv_table[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 0x30 */ + 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 */ + 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf /* 0x60 */ +}; + /* conversion helper for CLSIDFromString/IIDFromString */ static BOOL guid_from_string(LPCWSTR s, GUID *id) { int i; - BYTE table[256];
if (!s || s[0]!='{') { memset( id, 0, sizeof (CLSID) ); @@ -2079,37 +2089,26 @@ static BOOL guid_from_string(LPCWSTR s, GUID *id)
TRACE("%s -> %p\n", debugstr_w(s), id);
- /* quick lookup table */ - memset(table, 0, 256); - - for (i = 0; i < 10; i++) { - table['0' + i] = i; - } - for (i = 0; i < 6; i++) { - table['A' + i] = i+10; - table['a' + i] = i+10; - } - /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
id->Data1 = 0; for (i = 1; i < 9; i++) { if (!is_valid_hex(s[i])) return FALSE; - id->Data1 = (id->Data1 << 4) | table[s[i]]; + id->Data1 = (id->Data1 << 4) | guid_conv_table[s[i]]; } if (s[9]!='-') return FALSE;
id->Data2 = 0; for (i = 10; i < 14; i++) { if (!is_valid_hex(s[i])) return FALSE; - id->Data2 = (id->Data2 << 4) | table[s[i]]; + id->Data2 = (id->Data2 << 4) | guid_conv_table[s[i]]; } if (s[14]!='-') return FALSE;
id->Data3 = 0; for (i = 15; i < 19; i++) { if (!is_valid_hex(s[i])) return FALSE; - id->Data3 = (id->Data3 << 4) | table[s[i]]; + id->Data3 = (id->Data3 << 4) | guid_conv_table[s[i]]; } if (s[19]!='-') return FALSE;
@@ -2119,7 +2118,7 @@ static BOOL guid_from_string(LPCWSTR s, GUID *id) i++; } if (!is_valid_hex(s[i]) || !is_valid_hex(s[i+1])) return FALSE; - id->Data4[(i-20)/2] = table[s[i]] << 4 | table[s[i+1]]; + id->Data4[(i-20)/2] = guid_conv_table[s[i]] << 4 | guid_conv_table[s[i+1]]; }
if (s[37] == '}' && s[38] == '\0')