Module: wine Branch: master Commit: 8e211065a8738015e9fb7a9f3804840d59542352 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8e211065a8738015e9fb7a9f38...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Sep 2 11:09:08 2013 +0400
ntdll: Store 'clrClass' as COM class.
---
dlls/ntdll/actctx.c | 35 +++++++++++++++++++++++------------ 1 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index 8618960..369e928 100644 --- a/dlls/ntdll/actctx.c +++ b/dlls/ntdll/actctx.c @@ -386,6 +386,8 @@ struct entity WCHAR *clsid; WCHAR *tlbid; WCHAR *progid; + WCHAR *name; /* not NULL for clrClass */ + WCHAR *version; DWORD model; DWORD miscstatus; DWORD miscstatuscontent; @@ -411,11 +413,6 @@ struct entity { WCHAR *name; WCHAR *clsid; - } clrclass; - struct - { - WCHAR *name; - WCHAR *clsid; WCHAR *version; } clrsurrogate; } u; @@ -790,6 +787,8 @@ static void free_entity_array(struct entity_array *array) RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.clsid); RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.tlbid); RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.progid); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.name); + RtlFreeHeap(GetProcessHeap(), 0, entity->u.comclass.version); break; case ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION: RtlFreeHeap(GetProcessHeap(), 0, entity->u.ifaceps.iid); @@ -804,10 +803,6 @@ static void free_entity_array(struct entity_array *array) case ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION: RtlFreeHeap(GetProcessHeap(), 0, entity->u.class.name); break; - case ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION: - RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrclass.name); - RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrclass.clsid); - break; case ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES: RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrsurrogate.name); RtlFreeHeap(GetProcessHeap(), 0, entity->u.clrsurrogate.clsid); @@ -1806,18 +1801,34 @@ static BOOL parse_clr_class_elem(xmlbuf_t* xmlbuf, struct assembly* assembly) BOOL end = FALSE, error; struct entity* entity;
- entity = add_entity(&assembly->entities, ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION); + entity = add_entity(&assembly->entities, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION); if (!entity) return FALSE;
while (next_xml_attr(xmlbuf, &attr_name, &attr_value, &error, &end)) { if (xmlstr_cmp(&attr_name, nameW)) { - if (!(entity->u.clrclass.name = xmlstrdupW(&attr_value))) return FALSE; + if (!(entity->u.comclass.name = xmlstrdupW(&attr_value))) return FALSE; } else if (xmlstr_cmp(&attr_name, clsidW)) { - if (!(entity->u.clrclass.clsid = xmlstrdupW(&attr_value))) return FALSE; + if (!(entity->u.comclass.clsid = xmlstrdupW(&attr_value))) return FALSE; + } + else if (xmlstr_cmp(&attr_name, progidW)) + { + if (!(entity->u.comclass.progid = xmlstrdupW(&attr_value))) return FALSE; + } + else if (xmlstr_cmp(&attr_name, tlbidW)) + { + if (!(entity->u.comclass.tlbid = xmlstrdupW(&attr_value))) return FALSE; + } + else if (xmlstr_cmp(&attr_name, threadingmodelW)) + { + entity->u.comclass.model = parse_com_class_threadingmodel(&attr_value); + } + else if (xmlstr_cmp(&attr_name, runtimeVersionW)) + { + if (!(entity->u.comclass.version = xmlstrdupW(&attr_value))) return FALSE; } else {