From e64908b9a8213aaf1cd28be8f376ef850ec76f64 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 11 Aug 2020 08:43:10 +0300 Subject: [PATCH] combase: Move IIDFromString(). Signed-off-by: Nikolay Sivov Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/combase/combase.c | 23 ++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/compobj.c | 108 -------------------------------------- dlls/ole32/ole32.spec | 2 +- 4 files changed, 25 insertions(+), 110 deletions(-) diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 2bfd1d79a7d..205a27b8115 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -1075,6 +1075,29 @@ HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid) return hr; } +/****************************************************************************** + * IIDFromString (combase.@) + */ +HRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid) +{ + TRACE("%s, %p\n", debugstr_w(str), iid); + + if (!str) + { + memset(iid, 0, sizeof(*iid)); + return S_OK; + } + + /* length mismatch is a special case */ + if (lstrlenW(str) + 1 != CHARS_IN_GUID) + return E_INVALIDARG; + + if (str[0] != '{') + return CO_E_IIDSTRING; + + return guid_from_string(str, iid) ? S_OK : CO_E_IIDSTRING; +} + static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr) { ULONG i; diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index 97e8f254dcb..c0c1f2ada6a 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -231,7 +231,7 @@ @ stdcall HWND_UserSize(ptr long ptr) @ stdcall HWND_UserUnmarshal(ptr ptr ptr) @ stub HkOleRegisterObject -@ stdcall IIDFromString(wstr ptr) ole32.IIDFromString +@ stdcall IIDFromString(wstr ptr) @ stub InternalAppInvokeExceptionFilter @ stub InternalCCFreeUnused @ stub InternalCCGetClassInformationForDde diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index ff0c352c645..97158685845 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -2186,114 +2186,6 @@ HRESULT WINAPI CoDisconnectObject( LPUNKNOWN lpUnk, DWORD reserved ) return S_OK; } -static inline BOOL is_valid_hex(WCHAR c) -{ - if (!(((c >= '0') && (c <= '9')) || - ((c >= 'a') && (c <= 'f')) || - ((c >= 'A') && (c <= 'F')))) - return FALSE; - 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; - - if (!s || s[0]!='{') { - memset( id, 0, sizeof (CLSID) ); - if(!s) return TRUE; - return FALSE; - } - - TRACE("%s -> %p\n", debugstr_w(s), id); - - /* 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) | 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) | 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) | guid_conv_table[s[i]]; - } - if (s[19]!='-') return FALSE; - - for (i = 20; i < 37; i+=2) { - if (i == 24) { - if (s[i]!='-') return FALSE; - i++; - } - if (!is_valid_hex(s[i]) || !is_valid_hex(s[i+1])) return FALSE; - id->Data4[(i-20)/2] = guid_conv_table[s[i]] << 4 | guid_conv_table[s[i+1]]; - } - - if (s[37] == '}' && s[38] == '\0') - return TRUE; - - return FALSE; -} - -/****************************************************************************** - * IIDFromString [OLE32.@] - * - * Converts an interface identifier from its string representation to - * the IID struct. - * - * PARAMS - * idstr [I] The string representation of the GUID. - * id [O] IID converted from the string. - * - * RETURNS - * S_OK on success - * CO_E_IIDSTRING if idstr is not a valid IID - * - * SEE ALSO - * StringFromIID - */ -HRESULT WINAPI IIDFromString(LPCOLESTR s, IID *iid) -{ - TRACE("%s -> %p\n", debugstr_w(s), iid); - - if (!s) - { - memset(iid, 0, sizeof(*iid)); - return S_OK; - } - - /* length mismatch is a special case */ - if (lstrlenW(s) + 1 != CHARS_IN_GUID) - return E_INVALIDARG; - - if (s[0] != '{') - return CO_E_IIDSTRING; - - return guid_from_string(s, iid) ? S_OK : CO_E_IIDSTRING; -} - /****************************************************************************** * StringFromCLSID [OLE32.@] * StringFromIID [OLE32.@] diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index f71fd52032b..cd530763c2c 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -171,7 +171,7 @@ @ stdcall HWND_UserMarshal(ptr ptr ptr) combase.HWND_UserMarshal @ stdcall HWND_UserSize(ptr long ptr) combase.HWND_UserSize @ stdcall HWND_UserUnmarshal(ptr ptr ptr) combase.HWND_UserUnmarshal -@ stdcall IIDFromString(wstr ptr) +@ stdcall IIDFromString(wstr ptr) combase.IIDFromString @ stub I_RemoteMain @ stdcall IsAccelerator(long long ptr ptr) @ stdcall IsEqualGUID(ptr ptr)