<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.emulators.wine.patches">
    <title>gmane.comp.emulators.wine.patches</title>
    <link>http://blog.gmane.org/gmane.comp.emulators.wine.patches</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115822"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115821"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115820"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115819"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115818"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115817"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115816"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115815"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115814"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115813"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115812"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115811"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115810"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115809"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115808"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115807"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115806"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115805"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115804"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115803"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115822">
    <title>[website] French translation for release 1.5.31</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115822</link>
    <description>&lt;pre&gt;---
 news/fr/2013052401.xml | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 news/fr/2013052401.xml

diff --git a/news/fr/2013052401.xml b/news/fr/2013052401.xml
new file mode 100644
index 0000000..f03d30d
--- /dev/null
+++ b/news/fr/2013052401.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+&amp;lt;news&amp;gt;
+&amp;lt;date&amp;gt;24 mai 2013&amp;lt;/date&amp;gt;
+&amp;lt;title&amp;gt;Sortie de Wine 1.5.31&amp;lt;/title&amp;gt;
+&amp;lt;body&amp;gt;
+&amp;lt;p&amp;gt; La version de développement 1.5.31 de Wine est disponible.&amp;lt;/p&amp;gt;
+&amp;lt;p&amp;gt; &amp;lt;a href="{$root}/announce/1.5.31"&amp;gt;Nouveautés&amp;lt;/a&amp;gt; de cette version :
+&amp;lt;ul&amp;gt;
+  &amp;lt;li&amp;gt;Nouvelle version du moteur Gecko basée sur Firefox 21.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Prise en charge du retour de force des joysticks sous Mac OS X.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Correctifs dans la gestion des fenêtres dans le pilote Mac.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Diverses corrections de bogues.&amp;lt;/li&amp;gt;
+&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;
+&amp;lt;p&amp;gt;&amp;lt;p&amp;gt;Le &amp;lt;a href="http://prdownloads.sourceforge.net/wine/wine-1.5.31.tar.bz2"&amp;gt;code source&amp;lt;/a&amp;gt; est disponible dès à présent. Les paquets binaires sont en cours de construction, et apparaîtront sous peu sur leurs &amp;lt;a href="{$root}/download"&amp;gt;sites de téléchargement&amp;lt;/a&amp;gt; respectifs.
+&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/news&amp;gt;
&lt;/pre&gt;</description>
    <dc:creator>Frédéric Delanoy</dc:creator>
    <dc:date>2013-05-24T18:55:54</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115821">
    <title>[PATCH] atl100: Added stub for AtlIPersistPropertyBag_Load.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115821</link>
    <description>&lt;pre&gt;Make QQ happier, fix http://bugs.winehq.org/show_bug.cgi?id=33250

---
  dlls/atl/atl.spec       |    2 +-
  dlls/atl100/atl.c       |    8 ++++++++
  dlls/atl100/atl100.spec |    2 +-
  dlls/atl80/atl80.spec   |    2 +-
  4 files changed, 11 insertions(+), 3 deletions(-)



&lt;/pre&gt;</description>
    <dc:creator>Qian Hong</dc:creator>
    <dc:date>2013-05-24T16:43:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115820">
    <title>[PATCH 4/4] oleaut32: Implement ICreateTypeLib::CreateTypeInfo</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115820</link>
    <description>&lt;pre&gt;---
 dlls/oleaut32/typelib.c | 104 +++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 85 insertions(+), 19 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 83b503c..c9ee1cd 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1652,6 +1652,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline TLBCustData *TLB_get_custdata_by_guid(struct list *custdata_list,
     return NULL;
 }
 
+static inline ITypeInfoImpl *TLB_get_typeinfo_by_name(ITypeInfoImpl **typeinfos,
+        UINT n, const OLECHAR *name)
+{
+    while(n){
+        if(!lstrcmpiW((*typeinfos)-&amp;gt;Name, name))
+            return *typeinfos;
+        ++typeinfos;
+        --n;
+    }
+    return NULL;
+}
+
 static TLBVarDesc *TLBVarDesc_Constructor(UINT n)
 {
     TLBVarDesc *ret;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -5051,31 +5063,25 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ITypeLibComp_fnBindType(
     ITypeComp ** ppTComp)
 {
     ITypeLibImpl *This = impl_from_ITypeComp(iface);
-    int i;
+    ITypeInfoImpl *info;
 
     TRACE("(%s, %x, %p, %p)\n", debugstr_w(szName), lHash, ppTInfo, ppTComp);
 
     if(!szName || !ppTInfo || !ppTComp)
         return E_INVALIDARG;
 
-    for(i = 0; i &amp;lt; This-&amp;gt;TypeInfoCount; ++i)
-    {
-        ITypeInfoImpl *pTypeInfo = This-&amp;gt;typeinfos[i];
-        /* FIXME: should use lHash to do the search */
-        if (pTypeInfo-&amp;gt;Name &amp;amp;&amp;amp; !strcmpiW(pTypeInfo-&amp;gt;Name, szName))
-        {
-            TRACE("returning %p\n", pTypeInfo);
-            *ppTInfo = (ITypeInfo *)&amp;amp;pTypeInfo-&amp;gt;ITypeInfo2_iface;
-            ITypeInfo_AddRef(*ppTInfo);
-            *ppTComp = &amp;amp;pTypeInfo-&amp;gt;ITypeComp_iface;
-            ITypeComp_AddRef(*ppTComp);
-            return S_OK;
-        }
+    info = TLB_get_typeinfo_by_name(This-&amp;gt;typeinfos, This-&amp;gt;TypeInfoCount, szName);
+    if(!info){
+        *ppTInfo = NULL;
+        *ppTComp = NULL;
+        return S_OK;
     }
 
-    TRACE("not found\n");
-    *ppTInfo = NULL;
-    *ppTComp = NULL;
+    *ppTInfo = (ITypeInfo *)&amp;amp;info-&amp;gt;ITypeInfo2_iface;
+    ITypeInfo_AddRef(*ppTInfo);
+    *ppTComp = &amp;amp;info-&amp;gt;ITypeComp_iface;
+    ITypeComp_AddRef(*ppTComp);
+
     return S_OK;
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8102,8 +8108,68 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeLib2_fnCreateTypeInfo(ICreateTypeLib2 *iface,
         LPOLESTR name, TYPEKIND kind, ICreateTypeInfo **ctinfo)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %s %d %p - stub\n", This, wine_dbgstr_w(name), kind, ctinfo);
-    return E_NOTIMPL;
+    ITypeInfoImpl *info;
+    HRESULT hres;
+
+    TRACE("%p %s %d %p\n", This, wine_dbgstr_w(name), kind, ctinfo);
+
+    if (!ctinfo || !name)
+        return E_INVALIDARG;
+
+    info = TLB_get_typeinfo_by_name(This-&amp;gt;typeinfos, This-&amp;gt;TypeInfoCount, name);
+    if (info)
+        return TYPE_E_NAMECONFLICT;
+
+    if (This-&amp;gt;typeinfos)
+        This-&amp;gt;typeinfos = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This-&amp;gt;typeinfos,
+                sizeof(ITypeInfoImpl*) * (This-&amp;gt;TypeInfoCount + 1));
+    else
+        This-&amp;gt;typeinfos = heap_alloc_zero(sizeof(ITypeInfoImpl*));
+
+    info = This-&amp;gt;typeinfos[This-&amp;gt;TypeInfoCount] = ITypeInfoImpl_Constructor();
+
+    info-&amp;gt;pTypeLib = This;
+    info-&amp;gt;Name = SysAllocString(name);
+    info-&amp;gt;index = This-&amp;gt;TypeInfoCount;
+    info-&amp;gt;TypeAttr.typekind = kind;
+    info-&amp;gt;TypeAttr.cbAlignment = 4;
+
+    switch(info-&amp;gt;TypeAttr.typekind) {
+    case TKIND_ENUM:
+    case TKIND_INTERFACE:
+    case TKIND_DISPATCH:
+    case TKIND_COCLASS:
+        info-&amp;gt;TypeAttr.cbSizeInstance = 4;
+        break;
+    case TKIND_RECORD:
+    case TKIND_UNION:
+        info-&amp;gt;TypeAttr.cbSizeInstance = 0;
+        break;
+    case TKIND_MODULE:
+        info-&amp;gt;TypeAttr.cbSizeInstance = 2;
+        break;
+    case TKIND_ALIAS:
+        info-&amp;gt;TypeAttr.cbSizeInstance = -0x75;
+        break;
+    default:
+        FIXME("unrecognized typekind %d\n", info-&amp;gt;TypeAttr.typekind);
+        info-&amp;gt;TypeAttr.cbSizeInstance = 0xdeadbeef;
+        break;
+    }
+
+    hres = ITypeInfo2_QueryInterface(&amp;amp;info-&amp;gt;ITypeInfo2_iface,
+            &amp;amp;IID_ICreateTypeInfo, (void **)ctinfo);
+    if (FAILED(hres)) {
+        SysFreeString(info-&amp;gt;Name);
+        ITypeInfo2_Release(&amp;amp;info-&amp;gt;ITypeInfo2_iface);
+        return hres;
+    }
+
+    info-&amp;gt;hreftype = info-&amp;gt;index * sizeof(MSFT_TypeInfoBase);
+
+    ++This-&amp;gt;TypeInfoCount;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetName(ICreateTypeLib2 *iface,
&lt;/pre&gt;</description>
    <dc:creator>Andrew Eikum</dc:creator>
    <dc:date>2013-05-24T16:28:42</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115819">
    <title>[PATCH 3/4] oleaut32: Implement basic ICreateTypeInfo functions</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115819</link>
    <description>&lt;pre&gt;---
 dlls/oleaut32/typelib.c | 102 ++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 81 insertions(+), 21 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 9bbd86f..83b503c 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8307,40 +8307,68 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface,
         REFGUID guid)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, debugstr_guid(guid));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, debugstr_guid(guid));
+
+    memcpy(&amp;amp;This-&amp;gt;TypeAttr.guid, guid, sizeof(GUID));
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface,
         UINT typeFlags)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %x - stub\n", This, typeFlags);
-    return E_NOTIMPL;
+
+    TRACE("%p %x\n", This, typeFlags);
+
+    if (typeFlags &amp;amp; TYPEFLAG_FDUAL)
+        typeFlags |= TYPEFLAG_FDISPATCHABLE;
+
+    This-&amp;gt;TypeAttr.wTypeFlags = typeFlags;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(ICreateTypeInfo2 *iface,
-        LPOLESTR strDoc)
+        LPOLESTR doc)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(strDoc));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(doc));
+
+    if (!doc)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;DocString);
+    This-&amp;gt;DocString = SysAllocString(doc);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(ICreateTypeInfo2 *iface,
         DWORD helpContext)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %d - stub\n", This, helpContext);
-    return E_NOTIMPL;
+
+    TRACE("%p %d\n", This, helpContext);
+
+    This-&amp;gt;dwHelpContext = helpContext;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(ICreateTypeInfo2 *iface,
         WORD majorVerNum, WORD minorVerNum)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %d %d - stub\n", This, majorVerNum, minorVerNum);
-    return E_NOTIMPL;
+
+    TRACE("%p %d %d\n", This, majorVerNum, minorVerNum);
+
+    This-&amp;gt;TypeAttr.wMajorVerNum = majorVerNum;
+    This-&amp;gt;TypeAttr.wMinorVerNum = minorVerNum;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(ICreateTypeInfo2 *iface,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8379,16 +8407,28 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(ICreateTypeInfo2 *iface,
         WORD alignment)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %d - stub\n", This, alignment);
-    return E_NOTIMPL;
+
+    TRACE("%p %d\n", This, alignment);
+
+    This-&amp;gt;TypeAttr.cbAlignment = alignment;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetSchema(ICreateTypeInfo2 *iface,
         LPOLESTR schema)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(schema));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(schema));
+
+    if (!schema)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;TypeAttr.lpstrSchema);
+    This-&amp;gt;TypeAttr.lpstrSchema = SysAllocString(schema);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(ICreateTypeInfo2 *iface,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8475,8 +8515,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface,
         IDLDESC *idlDesc)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %p - stub\n", This, idlDesc);
-    return E_NOTIMPL;
+
+    TRACE("%p %p\n", This, idlDesc);
+
+    if (!idlDesc)
+        return E_INVALIDARG;
+
+    This-&amp;gt;TypeAttr.idldescType.dwReserved = idlDesc-&amp;gt;dwReserved;
+    This-&amp;gt;TypeAttr.idldescType.wIDLFlags = idlDesc-&amp;gt;wIDLFlags;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8570,8 +8618,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpStringContext(ICreateTypeInfo2 *
         ULONG helpStringContext)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %u - stub\n", This, helpStringContext);
-    return E_NOTIMPL;
+
+    TRACE("%p %u\n", This, helpStringContext);
+
+    This-&amp;gt;dwHelpStringContext = helpStringContext;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpStringContext(ICreateTypeInfo2 *iface,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8601,8 +8653,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeInfo2_fnSetName(ICreateTypeInfo2 *iface,
         LPOLESTR name)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(name));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(name));
+
+    if (!name)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;Name);
+    This-&amp;gt;Name = SysAllocString(name);
+
+    return S_OK;
 }
 
 static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl = {
&lt;/pre&gt;</description>
    <dc:creator>Andrew Eikum</dc:creator>
    <dc:date>2013-05-24T16:28:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115818">
    <title>[PATCH 2/4] oleaut32: Implement basic ICreateTypeLib functions</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115818</link>
    <description>&lt;pre&gt;---
 dlls/oleaut32/typelib.c | 88 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 70 insertions(+), 18 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index edc9f21..9bbd86f 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8110,64 +8110,109 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeLib2_fnSetName(ICreateTypeLib2 *iface,
         LPOLESTR name)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(name));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(name));
+
+    if (!name)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;Name);
+    This-&amp;gt;Name = SysAllocString(name);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetVersion(ICreateTypeLib2 *iface,
         WORD majorVerNum, WORD minorVerNum)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %d %d - stub\n", This, majorVerNum, minorVerNum);
-    return E_NOTIMPL;
+
+    TRACE("%p %d %d\n", This, majorVerNum, minorVerNum);
+
+    This-&amp;gt;LibAttr.wMajorVerNum = majorVerNum;
+    This-&amp;gt;LibAttr.wMinorVerNum = minorVerNum;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 *iface,
         REFGUID guid)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %s - stub\n", This, debugstr_guid(guid));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, debugstr_guid(guid));
+
+    memcpy(&amp;amp;This-&amp;gt;LibAttr.guid, guid, sizeof(GUID));
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetDocString(ICreateTypeLib2 *iface,
         LPOLESTR doc)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(doc));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(doc));
+
+    if (!doc)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;DocString);
+    This-&amp;gt;DocString = SysAllocString(doc);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetHelpFileName(ICreateTypeLib2 *iface,
         LPOLESTR helpFileName)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(helpFileName));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(helpFileName));
+
+    if (!helpFileName)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;HelpFile);
+    This-&amp;gt;HelpFile = SysAllocString(helpFileName);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetHelpContext(ICreateTypeLib2 *iface,
         DWORD helpContext)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %d - stub\n", This, helpContext);
-    return E_NOTIMPL;
+
+    TRACE("%p %d\n", This, helpContext);
+
+    This-&amp;gt;dwHelpContext = helpContext;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetLcid(ICreateTypeLib2 *iface,
         LCID lcid)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %x - stub\n", This, lcid);
-    return E_NOTIMPL;
+
+    TRACE("%p %x\n", This, lcid);
+
+    This-&amp;gt;LibAttr.lcid = lcid;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 *iface,
         UINT libFlags)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %x - stub\n", This, libFlags);
-    return E_NOTIMPL;
+
+    TRACE("%p %x\n", This, libFlags);
+
+    This-&amp;gt;LibAttr.wLibFlags = libFlags;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 *iface)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8205,8 +8250,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringDll(ICreateTypeLib2 *iface,
         LPOLESTR filename)
 {
     ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(filename));
-    return E_NOTIMPL;
+    TRACE("%p %s\n", This, wine_dbgstr_w(filename));
+
+    if (!filename)
+        return E_INVALIDARG;
+
+    SysFreeString(This-&amp;gt;HelpStringDll);
+    This-&amp;gt;HelpStringDll = SysAllocString(filename);
+
+    return S_OK;
 }
 
 static const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl = {
&lt;/pre&gt;</description>
    <dc:creator>Andrew Eikum</dc:creator>
    <dc:date>2013-05-24T16:28:35</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115817">
    <title>[PATCH 1/4] oleaut32: Stub typelib and typeinfo creation interfacesin typelib.c</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115817</link>
    <description>&lt;pre&gt;---

Note: These patches shouldn't conflict with Tatyana's in any way.

This is the start of a fairly long (~30) series of patches to
implement the typelib creation interfaces on top of the typelib.c
structures.

There is an existing implementation of the typelib creation interfaces
in &amp;lt;dlls/oleaut32/typelib2.c&amp;gt;. This implementation is a huge pain to
work with, as it basically moves and pokes the typelib file's bits
directly.  Additionally, having two implementations of the typelib
reading/wrigin interfaces causes a lot of unnecessary work. For
example, Tatyana's bug is not present in the &amp;lt;typelib.c&amp;gt;
implementation.

There are basically no tests added through most this sequence.  Then
there is a patch to switch to the new creation implementation, which
enables all of the existing tests against the new code and deletes the
old implementation. The next patch past that one adds a bunch of tests
to verify that the typelibs saved to disk read back exactly as they do
on Windows (the current typelib2.c implementation fails the added
tests quite badly, while the new implementation passes).

For reference, here is a log of all of the patches in the series as it
stands today:

oleaut32: Stub typelib and typeinfo creation interfaces in typelib.c
oleaut32: Implement basic ICreateTypeLib functions
oleaut32: Implement basic ICreateTypeInfo functions
oleaut32: Implement ICreateTypeLib::CreateTypeInfo
oleaut32: Implement ICreateTypeInfo::AddRefTypeInfo
oleaut32: Implement ICreateTypeInfo::AddImplType
oleaut32: Improve TYPEFLAG_FDUAL handling
oleaut32: Implement ICreateTypeInfo::AddFuncDesc
oleaut32: Implement ICreateTypeInfo::SetFuncHelpContext
oleaut32: Implement ICreateTypeInfo::SetFuncAndParamNames
oleaut32: Implement ICreateTypeInfo::SetImplTypeFlags
oleaut32: Implement ICreateTypeInfo::SetCustData
oleaut32: Implement ICreateTypeInfo::LayOut
oleaut32: Load and store all of the strings in a typelib
oleaut32: Store all Names in typelibs, too
oleaut32: Pull TLIBATTR struct contents out
oleaut32: Pull TYPEATTR struct contents out
oleaut32: Store all GUIDs in typelibs
oleaut32: Implement ICreateTypeInfo::SetVarHelpContext
oleaut32: Implement ICreateTypeInfo::SetVarDocString
oleaut32: Implement ICreateTypeInfo::AddVarDesc
oleaut32: Implement ICreateTypeLib::SaveAllChanges
oleaut32: When loading typelibs, skip over function default parameters as well
oleaut32: Only copy previous function name if both are property accessors
oleaut32: Don't fall back on typelib name for docstring
oleaut32: Fix ITypeInfo::GetNames for functions
oleaut32: Use implementation bitflag in href
oleaut32: Always read all imports from the typelib
oleaut32: Use the new typelib creation implementation
oleaut32/tests: Add save/load tests for created typelibs
oleaut32: Consistently print numbers

 dlls/oleaut32/typelib.c | 547 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 547 insertions(+)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 9ffcaaa..edc9f21 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -5,7 +5,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  *      1999  Rein Klazes
  *      2000  Francois Jacques
  *      2001  Huw D M Davies for CodeWeavers
+ *      2004  Alastair Bridgewater
  *      2005  Robert Shearman, for CodeWeavers
+ *      2013  Andrew Eikum for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -985,6 +987,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct tagITypeLibImpl
 {
     ITypeLib2 ITypeLib2_iface;
     ITypeComp ITypeComp_iface;
+    ICreateTypeLib2 ICreateTypeLib2_iface;
     LONG ref;
     TLIBATTR LibAttr;            /* guid,lcid,syskind,version,flags */
     LCID lcid;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1017,6 +1020,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct tagITypeLibImpl
 
 static const ITypeLib2Vtbl tlbvt;
 static const ITypeCompVtbl tlbtcvt;
+static const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl;
 
 static inline ITypeLibImpl *impl_from_ITypeLib2(ITypeLib2 *iface)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1033,6 +1037,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline ITypeLibImpl *impl_from_ITypeComp( ITypeComp *iface )
     return CONTAINING_RECORD(iface, ITypeLibImpl, ITypeComp_iface);
 }
 
+static inline ITypeLibImpl *impl_from_ICreateTypeLib2( ICreateTypeLib2 *iface )
+{
+    return CONTAINING_RECORD(iface, ITypeLibImpl, ICreateTypeLib2_iface);
+}
+
 /* ITypeLib methods */
 static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength);
 static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1106,6 +1115,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct tagITypeInfoImpl
 {
     ITypeInfo2 ITypeInfo2_iface;
     ITypeComp ITypeComp_iface;
+    ICreateTypeInfo2 ICreateTypeInfo2_iface;
     LONG ref;
     BOOL not_attached_to_typelib;
     TYPEATTR TypeAttr ;         /* _lots_ of type information. */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1148,8 +1158,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline ITypeInfoImpl *impl_from_ITypeInfo( ITypeInfo *iface )
     return impl_from_ITypeInfo2((ITypeInfo2*)iface);
 }
 
+static inline ITypeInfoImpl *info_impl_from_ICreateTypeInfo2( ICreateTypeInfo2 *iface )
+{
+    return CONTAINING_RECORD(iface, ITypeInfoImpl, ICreateTypeInfo2_iface);
+}
+
 static const ITypeInfo2Vtbl tinfvt;
 static const ITypeCompVtbl  tcompvt;
+static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl;
 
 static ITypeInfoImpl* ITypeInfoImpl_Constructor(void);
 static void ITypeInfoImpl_Destroy(ITypeInfoImpl *This);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3024,6 +3040,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ITypeLibImpl* TypeLibImpl_Constructor(void)
 
     pTypeLibImpl-&amp;gt;ITypeLib2_iface.lpVtbl = &amp;amp;tlbvt;
     pTypeLibImpl-&amp;gt;ITypeComp_iface.lpVtbl = &amp;amp;tlbtcvt;
+    pTypeLibImpl-&amp;gt;ICreateTypeLib2_iface.lpVtbl = &amp;amp;CreateTypeLib2Vtbl;
     pTypeLibImpl-&amp;gt;ref = 1;
 
     list_init(&amp;amp;pTypeLibImpl-&amp;gt;implib_list);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4253,6 +4270,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 *iface, REFIID riid,
     {
         *ppv = &amp;amp;This-&amp;gt;ITypeLib2_iface;
     }
+    else if(IsEqualIID(riid, &amp;amp;IID_ICreateTypeLib) ||
+             IsEqualIID(riid, &amp;amp;IID_ICreateTypeLib2))
+    {
+        *ppv = &amp;amp;This-&amp;gt;ICreateTypeLib2_iface;
+    }
     else
     {
         *ppv = NULL;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -5078,6 +5100,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ITypeInfoImpl* ITypeInfoImpl_Constructor(void)
     {
       pTypeInfoImpl-&amp;gt;ITypeInfo2_iface.lpVtbl = &amp;amp;tinfvt;
       pTypeInfoImpl-&amp;gt;ITypeComp_iface.lpVtbl = &amp;amp;tcompvt;
+      pTypeInfoImpl-&amp;gt;ICreateTypeInfo2_iface.lpVtbl = &amp;amp;CreateTypeInfo2Vtbl;
       pTypeInfoImpl-&amp;gt;ref = 0;
       pTypeInfoImpl-&amp;gt;hreftype = -1;
       pTypeInfoImpl-&amp;gt;TypeAttr.memidConstructor = MEMBERID_NIL;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -5104,6 +5127,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ITypeInfo_fnQueryInterface(
             IsEqualIID(riid,&amp;amp;IID_ITypeInfo)||
             IsEqualIID(riid,&amp;amp;IID_ITypeInfo2))
         *ppvObject = This;
+    else if(IsEqualIID(riid, &amp;amp;IID_ICreateTypeInfo) ||
+             IsEqualIID(riid, &amp;amp;IID_ICreateTypeInfo2))
+        *ppvObject = &amp;amp;This-&amp;gt;ICreateTypeInfo2_iface;
 
     if(*ppvObject){
         ITypeInfo2_AddRef(iface);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -8049,3 +8075,524 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const ITypeCompVtbl tcompvt =
     ITypeComp_fnBind,
     ITypeComp_fnBindType
 };
+
+static HRESULT WINAPI ICreateTypeLib2_fnQueryInterface(ICreateTypeLib2 *iface,
+        REFIID riid, void **object)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+
+    return ITypeLib2_QueryInterface((ITypeLib2*)This, riid, object);
+}
+
+static ULONG WINAPI ICreateTypeLib2_fnAddRef(ICreateTypeLib2 *iface)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+
+    return ITypeLib2_AddRef((ITypeLib2*)This);
+}
+
+static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+
+    return ITypeLib2_Release((ITypeLib2*)This);
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnCreateTypeInfo(ICreateTypeLib2 *iface,
+        LPOLESTR name, TYPEKIND kind, ICreateTypeInfo **ctinfo)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s %d %p - stub\n", This, wine_dbgstr_w(name), kind, ctinfo);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetName(ICreateTypeLib2 *iface,
+        LPOLESTR name)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(name));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetVersion(ICreateTypeLib2 *iface,
+        WORD majorVerNum, WORD minorVerNum)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %d %d - stub\n", This, majorVerNum, minorVerNum);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 *iface,
+        REFGUID guid)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s - stub\n", This, debugstr_guid(guid));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetDocString(ICreateTypeLib2 *iface,
+        LPOLESTR doc)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(doc));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetHelpFileName(ICreateTypeLib2 *iface,
+        LPOLESTR helpFileName)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(helpFileName));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetHelpContext(ICreateTypeLib2 *iface,
+        DWORD helpContext)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %d - stub\n", This, helpContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetLcid(ICreateTypeLib2 *iface,
+        LCID lcid)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %x - stub\n", This, lcid);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 *iface,
+        UINT libFlags)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %x - stub\n", This, libFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 *iface)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p - stub\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnDeleteTypeInfo(ICreateTypeLib2 *iface,
+        LPOLESTR name)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(name));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetCustData(ICreateTypeLib2 *iface,
+        REFGUID guid, VARIANT *varVal)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s %p - stub\n", This, debugstr_guid(guid), varVal);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringContext(ICreateTypeLib2 *iface,
+        ULONG helpStringContext)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %u - stub\n", This, helpStringContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringDll(ICreateTypeLib2 *iface,
+        LPOLESTR filename)
+{
+    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(filename));
+    return E_NOTIMPL;
+}
+
+static const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl = {
+    ICreateTypeLib2_fnQueryInterface,
+    ICreateTypeLib2_fnAddRef,
+    ICreateTypeLib2_fnRelease,
+    ICreateTypeLib2_fnCreateTypeInfo,
+    ICreateTypeLib2_fnSetName,
+    ICreateTypeLib2_fnSetVersion,
+    ICreateTypeLib2_fnSetGuid,
+    ICreateTypeLib2_fnSetDocString,
+    ICreateTypeLib2_fnSetHelpFileName,
+    ICreateTypeLib2_fnSetHelpContext,
+    ICreateTypeLib2_fnSetLcid,
+    ICreateTypeLib2_fnSetLibFlags,
+    ICreateTypeLib2_fnSaveAllChanges,
+    ICreateTypeLib2_fnDeleteTypeInfo,
+    ICreateTypeLib2_fnSetCustData,
+    ICreateTypeLib2_fnSetHelpStringContext,
+    ICreateTypeLib2_fnSetHelpStringDll
+};
+
+static HRESULT WINAPI ICreateTypeInfo2_fnQueryInterface(ICreateTypeInfo2 *iface,
+        REFIID riid, void **object)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+
+    return ITypeInfo2_QueryInterface((ITypeInfo2*)This, riid, object);
+}
+
+static ULONG WINAPI ICreateTypeInfo2_fnAddRef(ICreateTypeInfo2 *iface)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+
+    return ITypeInfo2_AddRef((ITypeInfo2*)This);
+}
+
+static ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+
+    return ITypeInfo2_Release((ITypeInfo2*)This);
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface,
+        REFGUID guid)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %s - stub\n", This, debugstr_guid(guid));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface,
+        UINT typeFlags)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %x - stub\n", This, typeFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(ICreateTypeInfo2 *iface,
+        LPOLESTR strDoc)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(strDoc));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(ICreateTypeInfo2 *iface,
+        DWORD helpContext)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %d - stub\n", This, helpContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(ICreateTypeInfo2 *iface,
+        WORD majorVerNum, WORD minorVerNum)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %d %d - stub\n", This, majorVerNum, minorVerNum);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(ICreateTypeInfo2 *iface,
+        ITypeInfo *typeInfo, HREFTYPE *refType)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %p %p - stub\n", This, typeInfo, refType);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(ICreateTypeInfo2 *iface,
+        UINT index, FUNCDESC *funcDesc)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %p - stub\n", This, index, funcDesc);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnAddImplType(ICreateTypeInfo2 *iface,
+        UINT index, HREFTYPE refType)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %d - stub\n", This, index, refType);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeFlags(ICreateTypeInfo2 *iface,
+        UINT index, INT implTypeFlags)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %x - stub\n", This, index, implTypeFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(ICreateTypeInfo2 *iface,
+        WORD alignment)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %d - stub\n", This, alignment);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetSchema(ICreateTypeInfo2 *iface,
+        LPOLESTR schema)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(schema));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(ICreateTypeInfo2 *iface,
+        UINT index, VARDESC *varDesc)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %p - stub\n", This, index, varDesc);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(ICreateTypeInfo2 *iface,
+        UINT index, LPOLESTR *names, UINT numNames)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %p %u - stub\n", This, index, names, numNames);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(ICreateTypeInfo2 *iface,
+        UINT index, LPOLESTR name)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s - stub\n", This, index, wine_dbgstr_w(name));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeDescAlias(ICreateTypeInfo2 *iface,
+        TYPEDESC *tdescAlias)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %p - stub\n", This, tdescAlias);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnDefineFuncAsDllEntry(ICreateTypeInfo2 *iface,
+        UINT index, LPOLESTR dllName, LPOLESTR procName)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s %s - stub\n", This, index, wine_dbgstr_w(dllName), wine_dbgstr_w(procName));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncDocString(ICreateTypeInfo2 *iface,
+        UINT index, LPOLESTR docString)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s - stub\n", This, index, wine_dbgstr_w(docString));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetVarDocString(ICreateTypeInfo2 *iface,
+        UINT index, LPOLESTR docString)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s - stub\n", This, index, wine_dbgstr_w(docString));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpContext(ICreateTypeInfo2 *iface,
+        UINT index, DWORD helpContext)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %d - stub\n", This, index, helpContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpContext(ICreateTypeInfo2 *iface,
+        UINT index, DWORD helpContext)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %d - stub\n", This, index, helpContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetMops(ICreateTypeInfo2 *iface,
+        UINT index, BSTR bstrMops)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s - stub\n", This, index, wine_dbgstr_w(bstrMops));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface,
+        IDLDESC *idlDesc)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %p - stub\n", This, idlDesc);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p - stub\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDesc(ICreateTypeInfo2 *iface,
+        UINT index)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u - stub\n", This, index);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDescByMemId(ICreateTypeInfo2 *iface,
+        MEMBERID memid, INVOKEKIND invKind)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %x %d - stub\n", This, memid, invKind);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDesc(ICreateTypeInfo2 *iface,
+        UINT index)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u - stub\n", This, index);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDescByMemId(ICreateTypeInfo2 *iface,
+        MEMBERID memid)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %x - stub\n", This, memid);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnDeleteImplType(ICreateTypeInfo2 *iface,
+        UINT index)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u - stub\n", This, index);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetCustData(ICreateTypeInfo2 *iface,
+        REFGUID guid, VARIANT *varVal)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %s %p - stub\n", This, debugstr_guid(guid), varVal);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncCustData(ICreateTypeInfo2 *iface,
+        UINT index, REFGUID guid, VARIANT *varVal)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s %p - stub\n", This, index, debugstr_guid(guid), varVal);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetParamCustData(ICreateTypeInfo2 *iface,
+        UINT funcIndex, UINT paramIndex, REFGUID guid, VARIANT *varVal)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %u %s %p - stub\n", This, funcIndex, paramIndex, debugstr_guid(guid), varVal);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetVarCustData(ICreateTypeInfo2 *iface,
+        UINT index, REFGUID guid, VARIANT *varVal)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s %p - stub\n", This, index, debugstr_guid(guid), varVal);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeCustData(ICreateTypeInfo2 *iface,
+        UINT index, REFGUID guid, VARIANT *varVal)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %s %p - stub\n", This, index, debugstr_guid(guid), varVal);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpStringContext(ICreateTypeInfo2 *iface,
+        ULONG helpStringContext)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u - stub\n", This, helpStringContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpStringContext(ICreateTypeInfo2 *iface,
+        UINT index, ULONG helpStringContext)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %u - stub\n", This, index, helpStringContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpStringContext(ICreateTypeInfo2 *iface,
+        UINT index, ULONG helpStringContext)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %u %u - stub\n", This, index, helpStringContext);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnInvalidate(ICreateTypeInfo2 *iface)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p - stub\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ICreateTypeInfo2_fnSetName(ICreateTypeInfo2 *iface,
+        LPOLESTR name)
+{
+    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
+    FIXME("%p %s - stub\n", This, wine_dbgstr_w(name));
+    return E_NOTIMPL;
+}
+
+static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl = {
+    ICreateTypeInfo2_fnQueryInterface,
+    ICreateTypeInfo2_fnAddRef,
+    ICreateTypeInfo2_fnRelease,
+    ICreateTypeInfo2_fnSetGuid,
+    ICreateTypeInfo2_fnSetTypeFlags,
+    ICreateTypeInfo2_fnSetDocString,
+    ICreateTypeInfo2_fnSetHelpContext,
+    ICreateTypeInfo2_fnSetVersion,
+    ICreateTypeInfo2_fnAddRefTypeInfo,
+    ICreateTypeInfo2_fnAddFuncDesc,
+    ICreateTypeInfo2_fnAddImplType,
+    ICreateTypeInfo2_fnSetImplTypeFlags,
+    ICreateTypeInfo2_fnSetAlignment,
+    ICreateTypeInfo2_fnSetSchema,
+    ICreateTypeInfo2_fnAddVarDesc,
+    ICreateTypeInfo2_fnSetFuncAndParamNames,
+    ICreateTypeInfo2_fnSetVarName,
+    ICreateTypeInfo2_fnSetTypeDescAlias,
+    ICreateTypeInfo2_fnDefineFuncAsDllEntry,
+    ICreateTypeInfo2_fnSetFuncDocString,
+    ICreateTypeInfo2_fnSetVarDocString,
+    ICreateTypeInfo2_fnSetFuncHelpContext,
+    ICreateTypeInfo2_fnSetVarHelpContext,
+    ICreateTypeInfo2_fnSetMops,
+    ICreateTypeInfo2_fnSetTypeIdldesc,
+    ICreateTypeInfo2_fnLayOut,
+    ICreateTypeInfo2_fnDeleteFuncDesc,
+    ICreateTypeInfo2_fnDeleteFuncDescByMemId,
+    ICreateTypeInfo2_fnDeleteVarDesc,
+    ICreateTypeInfo2_fnDeleteVarDescByMemId,
+    ICreateTypeInfo2_fnDeleteImplType,
+    ICreateTypeInfo2_fnSetCustData,
+    ICreateTypeInfo2_fnSetFuncCustData,
+    ICreateTypeInfo2_fnSetParamCustData,
+    ICreateTypeInfo2_fnSetVarCustData,
+    ICreateTypeInfo2_fnSetImplTypeCustData,
+    ICreateTypeInfo2_fnSetHelpStringContext,
+    ICreateTypeInfo2_fnSetFuncHelpStringContext,
+    ICreateTypeInfo2_fnSetVarHelpStringContext,
+    ICreateTypeInfo2_fnInvalidate,
+    ICreateTypeInfo2_fnSetName
+};
&lt;/pre&gt;</description>
    <dc:creator>Andrew Eikum</dc:creator>
    <dc:date>2013-05-24T16:28:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115816">
    <title>gdi32: fix up glyph metrics for tategaki glyphs</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115816</link>
    <description>&lt;pre&gt;---
 dlls/gdi32/freetype.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 54 insertions(+), 3 deletions(-)



&lt;/pre&gt;</description>
    <dc:creator>Aric Stewart</dc:creator>
    <dc:date>2013-05-24T16:00:41</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115815">
    <title>gdi32: Fix Tategaki rotation</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115815</link>
    <description>&lt;pre&gt;
Tategaki does not ignore orientation rotation, instead it always rotates affect glyphs by 90 degrees inside their cell.
---
 dlls/gdi32/freetype.c | 57 ++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 43 insertions(+), 14 deletions(-)



&lt;/pre&gt;</description>
    <dc:creator>Aric Stewart</dc:creator>
    <dc:date>2013-05-24T16:00:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115814">
    <title>[PATCH 2/2] oleaut32/tests: Add test for ITypeInfo2_fnGetContainingTypeLib (Try 4)</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115814</link>
    <description>&lt;pre&gt;Null pointers ppTLib and pIndex result in crash of wine.

Nikolay Sivov wrote 20.12.2012 14:59:

Fixed.
&lt;/pre&gt;</description>
    <dc:creator>Tatyana Fokina</dc:creator>
    <dc:date>2013-05-24T14:23:47</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115813">
    <title>[PATCH 1/2] oleaut32: Ignore NULL ppTLib/pIndex inITypeInfo2_fnGetContainingTypeLib. (try 4)</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115813</link>
    <description>&lt;pre&gt;Null pointers ppTLib and pIndex result in crash of wine.

Nikolay Sivov wrote 20.12.2012 14:59:

Fixed.From b64b11c64d0b76e3bd36180ef3f2305548a433b8 Mon Sep 17 00:00:00 2001
From: tatyana &amp;lt;tatyana&amp;lt; at &amp;gt;etersoft.ru&amp;gt;
Date: Fri, 24 May 2013 18:05:14 +0400
Subject: [PATCH 1/2] oleaut32: Ignore NULL ppTLib/pIndex in
 ITypeInfo2_fnGetContainingTypeLib

---
 dlls/oleaut32/typelib2.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c
index 1aeb27a..4ffc005 100644
--- a/dlls/oleaut32/typelib2.c
+++ b/dlls/oleaut32/typelib2.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3707,9 +3707,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI ITypeInfo2_fnGetContainingTypeLib(
 
     TRACE("(%p,%p,%p)\n", iface, ppTLib, pIndex);
 
-    *ppTLib = (ITypeLib *)&amp;amp;This-&amp;gt;typelib-&amp;gt;ITypeLib2_iface;
-    ICreateTypeLib_AddRef((ICreateTypeLib*)This-&amp;gt;typelib);
-    *pIndex = This-&amp;gt;typeinfo-&amp;gt;typekind &amp;gt;&amp;gt; 16;
+    if(ppTLib)
+        {
+            *ppTLib = (ITypeLib *)&amp;amp;This-&amp;gt;typelib-&amp;gt;ITypeLib2_iface;
+            ICreateTypeLib_AddRef((ICreateTypeLib*)This-&amp;gt;typelib);
+        }
+    if(pIndex)
+        *pIndex = This-&amp;gt;typeinfo-&amp;gt;typekind &amp;gt;&amp;gt; 16;
 
     return S_OK;
 }
&lt;/pre&gt;</description>
    <dc:creator>Tatyana Fokina</dc:creator>
    <dc:date>2013-05-24T14:23:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115812">
    <title>[4/5] oledb32: Implement GetConversionSize DBTYPE_VARIANT -&gt;DBTYPE_BYTES</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115812</link>
    <description>&lt;pre&gt;Hi,
Also fixes whitespace issue.

Changelog:
      oledb32: Implement GetConversionSize DBTYPE_VARIANT -&amp;gt; DBTYPE_BYTES


Best Regards
   Alistair Leslie-Hughes

From: Alistair Leslie-Hughes &amp;lt;leslie_alistair&amp;lt; at &amp;gt;hotmail.com&amp;gt;
Date: Tue, 21 May 2013 20:39:09 +1000
Subject: [PATCH] Implement GetConversionSize DBTYPE_VARIANT -&amp;gt; DBTYPE_BYTES
To: wine-patches &amp;lt;wine-patches&amp;lt; at &amp;gt;winehq.org&amp;gt;

---
 dlls/oledb32/convert.c       | 23 ++++++++++++++++++++++-
 dlls/oledb32/tests/convert.c | 16 ++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index beca387..fd98b31 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -121,7 +121,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int get_length(DBTYPE type)
     case DBTYPE_UI2:
         return 2;
     case DBTYPE_BOOL:
-return sizeof(VARIANT_BOOL);
+        return sizeof(VARIANT_BOOL);
     case DBTYPE_I4:
     case DBTYPE_UI4:
     case DBTYPE_R4:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -143,6 +143,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int get_length(DBTYPE type)
         return sizeof(FILETIME);
     case DBTYPE_GUID:
         return sizeof(GUID);
+    case DBTYPE_BYTES:
     case DBTYPE_WSTR:
     case DBTYPE_STR:
     case DBTYPE_BYREF | DBTYPE_WSTR:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1378,6 +1379,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface,
         }
     }
     break;
+    case DBTYPE_BYTES:
+    {
+        switch (src_type)
+        {
+        case DBTYPE_VARIANT:
+        {
+            if(V_VT((VARIANT*)src) == VT_BSTR)
+                *dst_len = (SysStringLen(V_BSTR((VARIANT*)src))) / sizeof(WCHAR);
+            else
+                WARN("DBTYPE_BYTES-&amp;gt;DBTYPE_VARIANT(%d) unimplemented\n", V_VT((VARIANT*)src));
+
+            return S_OK;
+        }
+        break;
+        default:
+            FIXME("unimplemented for %04x -&amp;gt; DBTYPE_BYTES\n", src_type);
+            return E_NOTIMPL;
+        }
+    }
+    break;
     default:
         FIXME("unimplemented for conversion %d-&amp;gt;%d\n", src_type, dst_type);
         return E_NOTIMPL;
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index aee27b8..3a25777 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2469,6 +2469,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_getconversionsize(void)
     todo_wine ok(dst_len == 110, "%ld\n", dst_len);
     VariantClear(&amp;amp;var);
 
+    dst_len = 0;
+    src_len = 20;
+    V_VT(&amp;amp;var) = VT_BSTR;
+    V_BSTR(&amp;amp;var) = SysAllocString(strW);
+    hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_BYTES, &amp;amp;src_len, &amp;amp;dst_len, &amp;amp;var);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(dst_len == 2, "%ld\n", dst_len);
+    VariantClear(&amp;amp;var);
+
+    dst_len = 0;
+    src_len = 20;
+    V_VT(&amp;amp;var) = VT_NULL;
+    hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_BYTES, &amp;amp;src_len, &amp;amp;dst_len, &amp;amp;var);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    todo_wine ok(dst_len == 110, "%ld\n", dst_len);
+    VariantClear(&amp;amp;var);
 }
 
 static void test_converttobytes(void)
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-24T08:04:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115811">
    <title>[3/5] oledb32: Check for DBSTATUS_S_ISNULL first</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115811</link>
    <description>&lt;pre&gt;Hi,


Changelog:
      oledb32: Check for DBSTATUS_S_ISNULL first


Best Regards
   Alistair Leslie-Hughes

From: Alistair Leslie-Hughes &amp;lt;leslie_alistair&amp;lt; at &amp;gt;hotmail.com&amp;gt;
Date: Fri, 24 May 2013 15:35:30 +1000
Subject: [PATCH] Check for DBSTATUS_S_ISNULL first
To: wine-patches &amp;lt;wine-patches&amp;lt; at &amp;gt;winehq.org&amp;gt;

---
 dlls/oledb32/convert.c       | 10 +++++-----
 dlls/oledb32/tests/convert.c | 16 ++++++++++++++++
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index 24dbe1a..beca387 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -179,11 +179,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
 
     *dst_status = DBSTATUS_E_BADACCESSOR;
 
-    if(IDataConvert_CanConvert(iface, src_type, dst_type) != S_OK)
-    {
-        return DB_E_UNSUPPORTEDCONVERSION;
-    }
-
     if(src_status == DBSTATUS_S_ISNULL)
     {
         *dst_status = DBSTATUS_S_ISNULL;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -191,6 +186,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
         return S_OK;
     }
 
+    if(IDataConvert_CanConvert(iface, src_type, dst_type) != S_OK)
+    {
+        return DB_E_UNSUPPORTEDCONVERSION;
+    }
+
     if(dst == NULL &amp;amp;&amp;amp; get_length(dst_type) != 0)
     {
         *dst_len = get_length(src_type);
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index 4f98413..aee27b8 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2719,6 +2719,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_converttotimestamp(void)
     SysFreeString(bstr);
 }
 
+static void test_converttoiunknown(void)
+{
+    HRESULT hr;
+    DBSTATUS dst_status;
+    DBLENGTH dst_len;
+    IUnknown *dst = NULL;
+    static WCHAR strW[] = {'t','e','s','t',0};
+
+    dst_len = 0x1234;
+    hr = IDataConvert_DataConvert(convert, DBTYPE_WSTR, DBTYPE_IUNKNOWN, sizeof(strW), &amp;amp;dst_len, strW, dst, sizeof(dst), DBSTATUS_S_ISNULL, &amp;amp;dst_status, 0, 0, 0);
+    ok(hr == S_OK, "got %08x\n", hr);
+    ok(dst_status == DBSTATUS_S_ISNULL, "got %08x\n", dst_status);
+    ok(dst_len == 0, "got %ld\n", dst_len);
+}
+
 START_TEST(convert)
 {
     HRESULT hr;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2756,6 +2771,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; START_TEST(convert)
     test_converttodbdate();
     test_getconversionsize();
     test_converttotimestamp();
+    test_converttoiunknown();
 
     IDataConvert_Release(convert);
 
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-24T08:04:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115810">
    <title>[PATCH 2/2] ieframe: Get rid of no longer needed IEDocHost.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115810</link>
    <description>&lt;pre&gt;---
 dlls/ieframe/ie.c       | 31 +++++++++-------------
 dlls/ieframe/ieframe.h  | 10 +------
 dlls/ieframe/iexplore.c | 69
++++++++++++++++---------------------------------
 3 files changed, 35 insertions(+), 75 deletions(-)



&lt;/pre&gt;</description>
    <dc:creator>Jacek Caban</dc:creator>
    <dc:date>2013-05-24T08:39:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115809">
    <title>[PATCH 1/2] ieframe: Keep track of InternetExplore external referencesand use that to release document.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115809</link>
    <description>&lt;pre&gt;---
 dlls/ieframe/ie.c       | 43 +++++++++++++++++++++++++++++++++++++++----
 dlls/ieframe/ieframe.h  |  2 ++
 dlls/ieframe/iexplore.c |  7 +++++--
 3 files changed, 46 insertions(+), 6 deletions(-)



&lt;/pre&gt;</description>
    <dc:creator>Jacek Caban</dc:creator>
    <dc:date>2013-05-24T08:39:20</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115808">
    <title>[2/5] oledb32: DataConvert Support NULL variant</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115808</link>
    <description>&lt;pre&gt;Hi,


Changelog:
      oledb32:


Best Regards
   Alistair Leslie-Hughes

From: Alistair Leslie-Hughes &amp;lt;leslie_alistair&amp;lt; at &amp;gt;hotmail.com&amp;gt;
Date: Fri, 24 May 2013 12:23:18 +1000
Subject: [PATCH] DataConver Support NULL variant in
 DBTYPE_VARIANT-&amp;gt;DBTYPE_WSTR
To: wine-patches &amp;lt;wine-patches&amp;lt; at &amp;gt;winehq.org&amp;gt;

---
 dlls/oledb32/convert.c       |  3 ++-
 dlls/oledb32/tests/convert.c | 24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index 64b7c8a..24dbe1a 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -787,7 +787,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
         hr = IDataConvert_DataConvert(iface, src_type, DBTYPE_BSTR, src_len, &amp;amp;bstr_len,
                                       src, &amp;amp;b, sizeof(BSTR), src_status, dst_status,
                                       precision, scale, flags);
-        if(hr != S_OK) return hr;
+        if(hr != S_OK || *dst_status == DBSTATUS_S_ISNULL)
+            return hr;
         bstr_len = SysStringLen(b);
         *dst_len = bstr_len * sizeof(WCHAR); /* Doesn't include size for '\0' */
         *dst_status = DBSTATUS_S_OK;
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index dcc20a1..4f98413 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1017,6 +1017,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_converttowstr(void)
     static const WCHAR hexunpacked_w[] = {'5','7','0','0','6','9','0','0','6','E','0','0','6','5','0','0','0','0','0','0', 0 };
     static const WCHAR hexpacked_w[] = {'W','i','n','e', 0 };
     BSTR b;
+    VARIANT v;
 
     memset(dst, 0xcc, sizeof(dst));
     dst_len = 0x1234;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1470,6 +1471,29 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_converttowstr(void)
     ok(dst_len == 0, "got %ld\n", dst_len);
     ok(dst[0] == 0, "not null terminated\n");
     ok(dst[1] == 0xcccc, "clobbered buffer\n");
+
+    b = SysAllocStringLen(NULL, 0);
+    V_VT(&amp;amp;v) = VT_BSTR;
+    V_BSTR(&amp;amp;v) = b;
+    hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_WSTR, 0, &amp;amp;dst_len, &amp;amp;v, &amp;amp;dst, sizeof(dst), 0, &amp;amp;dst_status, 0, 0, 0);
+    ok(hr == S_OK, "got %08x\n", hr);
+    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+    ok(dst_len == 0, "got %ld\n", dst_len);
+    ok(dst != NULL, "got %p\n", dst);
+    ok(dst != b, "got %p src %p\n", dst, b);
+    ok(!lstrcmpW(b, dst), "got %s\n", wine_dbgstr_w(dst));
+    SysFreeString(dst);
+    SysFreeString(b);
+
+    V_VT(&amp;amp;v) = VT_NULL;
+    hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_WSTR, 0, &amp;amp;dst_len, &amp;amp;v, &amp;amp;dst, sizeof(dst), 0, &amp;amp;dst_status, 0, 0, 0);
+    ok(hr == S_OK, "got %08x\n", hr);
+    ok(dst_status == DBSTATUS_S_ISNULL, "got %08x\n", dst_status);
+    ok(dst_len == 0, "got %ld\n", dst_len);
+    ok(dst != NULL, "got %p\n", dst);
+    ok(dst != b, "got %p src %p\n", dst, b);
+    ok(!lstrcmpW(b, dst), "got %s\n", wine_dbgstr_w(dst));
+    SysFreeString(dst);
 }
 
 static void test_converttostr(void)
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-24T08:04:43</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115807">
    <title>[5/5] oledb32: GetConversionSize only returns a valid size of BSTR</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115807</link>
    <description>&lt;pre&gt;Hi,
Changed to not use a magic number.

Changelog:
      oledb32: GetConversionSize only returns a valid size of BSTR


Best Regards
   Alistair Leslie-Hughes

From: Alistair Leslie-Hughes &amp;lt;leslie_alistair&amp;lt; at &amp;gt;hotmail.com&amp;gt;
Date: Fri, 24 May 2013 15:12:24 +1000
Subject: [PATCH] GetConversionSize only returns a valid size of BSTR
To: wine-patches &amp;lt;wine-patches&amp;lt; at &amp;gt;winehq.org&amp;gt;

---
 dlls/oledb32/convert.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index fd98b31..7e75356 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1349,16 +1349,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface,
         {
         case DBTYPE_VARIANT:
         {
-            VARIANT v;
-
-            VariantInit(&amp;amp;v);
-            if ((hr = VariantChangeType(&amp;amp;v, (VARIANT*)src, 0, VT_BSTR)) == S_OK)
-            {
-                *dst_len = (SysStringLen(V_BSTR(&amp;amp;v)) + 1) * sizeof(WCHAR);
-                VariantClear(&amp;amp;v);
-            }
+            if(V_VT((VARIANT*)src) == VT_BSTR)
+                *dst_len = (SysStringLen(V_BSTR((VARIANT*)src))+1) * sizeof(WCHAR);
             else
-                return hr;
+                WARN("DBTYPE_BYTES-&amp;gt;DBTYPE_VARIANT(%d) unimplemented\n", V_VT((VARIANT*)src));
+
+            return S_OK;
         }
         break;
         case DBTYPE_STR:
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-24T08:04:50</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115806">
    <title>[1/5] oledb32: Implemented DataConvert DBTYPE_BSTR-&gt;DBTYPE_DBTIMESTAMP</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115806</link>
    <description>&lt;pre&gt;Hi,
Also corrects whitespace issue.

Changelog:
       oledb32: Implemented DataConvert DBTYPE_BSTR-&amp;gt;DBTYPE_DBTIMESTAMP


Best Regards
    Alistair Leslie-Hughes


From: Alistair Leslie-Hughes &amp;lt;leslie_alistair&amp;lt; at &amp;gt;hotmail.com&amp;gt;
Date: Thu, 23 May 2013 12:13:17 +1000
Subject: [PATCH] Implemented DataConvert DBTYPE_BSTR-&amp;gt;DBTYPE_DBTIMESTAMP
To: wine-patches &amp;lt;wine-patches&amp;lt; at &amp;gt;winehq.org&amp;gt;

---
 dlls/oledb32/convert.c       | 30 ++++++++++++++++++++++++++++--
 dlls/oledb32/tests/convert.c | 11 +++++++++++
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index 9d41860..0961464 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -480,8 +480,34 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
         DBTIMESTAMP *d=dst;
         switch (src_type)
         {
-case DBTYPE_EMPTY:       memset(d, 0, sizeof(DBTIMESTAMP));    hr = S_OK; break;
-case DBTYPE_DBTIMESTAMP: memcpy(d, src, sizeof(DBTIMESTAMP));  hr = S_OK; break;
+        case DBTYPE_EMPTY:       memset(d, 0, sizeof(DBTIMESTAMP));    hr = S_OK; break;
+        case DBTYPE_DBTIMESTAMP: memcpy(d, src, sizeof(DBTIMESTAMP));  hr = S_OK; break;
+        case DBTYPE_BSTR:
+        {
+            VARIANT var;
+            BSTR s = *(WCHAR**)src;
+
+            VariantInit(&amp;amp;var);
+            V_VT(&amp;amp;var) = VT_BSTR;
+            V_BSTR(&amp;amp;var) = SysAllocString(s);
+
+            if ((hr = VariantChangeType(&amp;amp;var, &amp;amp;var, 0, VT_DATE)) == S_OK)
+            {
+                SYSTEMTIME st;
+
+                hr = (VariantTimeToSystemTime( V_DATE(&amp;amp;var), &amp;amp;st) ? S_OK : E_FAIL);
+                d-&amp;gt;year = st.wYear;
+                d-&amp;gt;month = st.wMonth;
+                d-&amp;gt;day = st.wDay;
+                d-&amp;gt;hour = st.wHour;
+                d-&amp;gt;minute = st.wMinute;
+                d-&amp;gt;second = st.wSecond;
+                d-&amp;gt;fraction = st.wMilliseconds * 1000000;
+            }
+
+            VariantClear(&amp;amp;var);
+        }
+        break;
         case DBTYPE_DATE:
         {
             SYSTEMTIME st;
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index ee2a39b..dcc20a1 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2666,12 +2666,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_converttovar(void)
 
 static void test_converttotimestamp(void)
 {
+    static WCHAR strW[] = {'2','0','1','3','-','0','5','-','1','4',' ','0','2',':','0','4',':','1','2',0};
     DBTIMESTAMP ts = {2013, 5, 14, 2, 4, 12, 0};
     DBTIMESTAMP dst;
     DBSTATUS dst_status;
     DBLENGTH dst_len;
     VARIANT var;
     HRESULT hr;
+    BSTR bstr;
 
     VariantInit(&amp;amp;var);
     V_VT(&amp;amp;var) = VT_DATE;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2682,6 +2684,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_converttotimestamp(void)
     ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
     ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
     ok(!memcmp(&amp;amp;ts, &amp;amp;dst, sizeof(ts)), "Wrong timestamp\n");
+
+    bstr = SysAllocString(strW);
+    dst_len = 0x1234;
+    hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_DBTIMESTAMP, 0, &amp;amp;dst_len, &amp;amp;bstr, &amp;amp;dst, sizeof(dst), 0, &amp;amp;dst_status, 0, 0, 0);
+    ok(hr == S_OK, "got %08x\n", hr);
+    ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
+    ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
+    ok(!memcmp(&amp;amp;ts, &amp;amp;dst, sizeof(ts)), "Wrong timestamp\n");
+    SysFreeString(bstr);
 }
 
 START_TEST(convert)
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-24T08:04:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115805">
    <title>[2/2] server: A being destroyed object may need to access otherobjects using a handle.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115805</link>
    <description>&lt;pre&gt;A valid winstation handle is needed during clipboard thread clean up.
---
 dlls/kernel32/tests/process.c | 1 -
 server/handle.c               | 3 +--
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index 350c858..88dcfbb 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1957,7 +1957,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_TerminateProcess(void)
 
     SetLastError(0xdeadbeef);
     ret = TerminateProcess(pi.hProcess, 0);
-todo_wine
     ok(ret, "TerminateProcess error %u\n", GetLastError());
 
     CloseHandle(pi.hProcess);
diff --git a/server/handle.c b/server/handle.c
index 1d8087b..5dc4187 100644
--- a/server/handle.c
+++ b/server/handle.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -165,7 +165,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void handle_table_destroy( struct object *obj )
     for (i = 0, entry = table-&amp;gt;entries; i &amp;lt;= table-&amp;gt;last; i++, entry++)
     {
         struct object *obj = entry-&amp;gt;ptr;
-        entry-&amp;gt;ptr = NULL;
         if (obj) release_object( obj );
     }
     free( table-&amp;gt;entries );
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -176,8 +175,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void close_process_handles( struct process *process )
 {
     struct handle_table *table = process-&amp;gt;handles;
 
-    process-&amp;gt;handles = NULL;
     if (table) release_object( table );
+    process-&amp;gt;handles = NULL;
 }
 
 /* allocate a new handle table */
&lt;/pre&gt;</description>
    <dc:creator>Dmitry Timoshkov</dc:creator>
    <dc:date>2013-05-24T07:58:03</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115804">
    <title>[1/2] kernel32: Add a test to show that a process with a not closedhandle to an already terminated thread fails to terminate cleanly.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115804</link>
    <description>&lt;pre&gt;---
 dlls/kernel32/tests/process.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index 2bdc42e..350c858 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1926,6 +1926,44 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_RegistryQuota(void)
        "Expected GetSystemRegistryQuota to return TRUE, got %d\n", ret);
 }
 
+static void test_TerminateProcess(void)
+{
+    static char cmdline[] = "winver.exe";
+    PROCESS_INFORMATION pi;
+    STARTUPINFO si;
+    DWORD ret;
+    HANDLE dummy, thread;
+
+    memset(&amp;amp;si, 0, sizeof(si));
+    si.cb = sizeof(si);
+    SetLastError(0xdeadbeef);
+    ret = CreateProcess(NULL, cmdline, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &amp;amp;si, &amp;amp;pi);
+    ok(ret, "CreateProcess error %u\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    thread = CreateRemoteThread(pi.hProcess, NULL, 0, (void *)0xdeadbeef, NULL, CREATE_SUSPENDED, &amp;amp;ret);
+    ok(thread != 0, "CreateRemoteThread error %d\n", GetLastError());
+
+    /* create a not closed thread handle duplicate in the target process */
+    SetLastError(0xdeadbeef);
+    ret = DuplicateHandle(GetCurrentProcess(), thread, pi.hProcess, &amp;amp;dummy,
+                          0, FALSE, DUPLICATE_SAME_ACCESS);
+    ok(ret, "DuplicateHandle error %u\n", GetLastError());
+
+    SetLastError(0xdeadbeef);
+    ret = TerminateThread(thread, 0);
+    ok(ret, "TerminateThread error %u\n", GetLastError());
+    CloseHandle(thread);
+
+    SetLastError(0xdeadbeef);
+    ret = TerminateProcess(pi.hProcess, 0);
+todo_wine
+    ok(ret, "TerminateProcess error %u\n", GetLastError());
+
+    CloseHandle(pi.hProcess);
+    CloseHandle(pi.hThread);
+}
+
 START_TEST(process)
 {
     int b = init();
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1937,6 +1975,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; START_TEST(process)
         doChild(myARGV[2], (myARGC == 3) ? NULL : myARGV[3]);
         return;
     }
+    test_TerminateProcess();
     test_Startup();
     test_CommandLine();
     test_Directory();
&lt;/pre&gt;</description>
    <dc:creator>Dmitry Timoshkov</dc:creator>
    <dc:date>2013-05-24T07:57:16</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115803">
    <title>[PATCH] user32: Make CreateWindowExA and CreateWindowExW hotpatchable.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115803</link>
    <description>&lt;pre&gt;Fix QQ crashing: http://bugs.winehq.org/show_bug.cgi?id=33322

---
  dlls/user32/win.c |    4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)



&lt;/pre&gt;</description>
    <dc:creator>Qian Hong</dc:creator>
    <dc:date>2013-05-24T07:24:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.patches/115802">
    <title>clusapi: Add stub for GetClusterInformation</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.patches/115802</link>
    <description>&lt;pre&gt;---
 dlls/clusapi/clusapi.c    | 14 ++++++++++++++
 dlls/clusapi/clusapi.spec |  2 +-
 include/clusapi.h         | 17 +++++++++++++++++
 3 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/dlls/clusapi/clusapi.c b/dlls/clusapi/clusapi.c
index f782d43..88c6fbf 100644
--- a/dlls/clusapi/clusapi.c
+++ b/dlls/clusapi/clusapi.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -28,6 +28,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 WINE_DEFAULT_DEBUG_CHANNEL(clusapi);
 
 /***********************************************************************
+ *             GetClusterInformation   (CLUSAPI.&amp;lt; at &amp;gt;)
+ *
+ */
+DWORD WINAPI GetClusterInformation(HCLUSTER hCluster, LPWSTR lpszClusterName,
+                                   LPDWORD lpcchClusterName, LPCLUSTERVERSIONINFO lpClusterInfo)
+{
+    FIXME("(%p, %p, %p, %p) stub!\n", hCluster, lpszClusterName, lpcchClusterName, lpClusterInfo);
+
+    *lpcchClusterName = 0;
+
+    return ERROR_SUCCESS;
+}
+
+/***********************************************************************
  *             GetNodeClusterState   (CLUSAPI.&amp;lt; at &amp;gt;)
  *
  * PARAMS
diff --git a/dlls/clusapi/clusapi.spec b/dlls/clusapi/clusapi.spec
index 9c6abe2..01d3329 100644
--- a/dlls/clusapi/clusapi.spec
+++ b/dlls/clusapi/clusapi.spec
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -70,7 +70,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 &amp;lt; at &amp;gt; stub GetClusterFromResource
 &amp;lt; at &amp;gt; stub GetClusterGroupKey
 &amp;lt; at &amp;gt; stub GetClusterGroupState
-&amp;lt; at &amp;gt; stub GetClusterInformation
+&amp;lt; at &amp;gt; stdcall GetClusterInformation(ptr ptr ptr ptr)
 &amp;lt; at &amp;gt; stub GetClusterKey
 &amp;lt; at &amp;gt; stub GetClusterNetInterface
 &amp;lt; at &amp;gt; stub GetClusterNetInterfaceKey
diff --git a/include/clusapi.h b/include/clusapi.h
index 7e04964..4ab07cc 100644
--- a/include/clusapi.h
+++ b/include/clusapi.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,7 +26,24 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extern "C" {
 typedef struct _HCLUSTER *HCLUSTER;
 typedef struct _HCLUSENUM *HCLUSENUM;
 
+
+typedef struct _CLUSTERVERSIONINFO
+{
+    DWORD   dwVersionInfoSize;
+    WORD    MajorVersion;
+    WORD    MinorVersion;
+    WORD    BuildNumber;
+    WCHAR   szVendorId[64];
+    WCHAR   szCSDVersion[64];
+    DWORD   dwClusterHighestVersion;
+    DWORD   dwClusterLowestVersion;
+    DWORD   dwFlags;
+    DWORD   dwReserved;
+} CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO;
+
 BOOL WINAPI CloseCluster(HCLUSTER hCluster);
+DWORD WINAPI GetClusterInformation(HCLUSTER hCluster, LPWSTR lpszClusterName,
+                                   LPDWORD lpcchClusterName, LPCLUSTERVERSIONINFO lpClusterInfo);
 DWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName, LPDWORD pdwClusterState);
 HCLUSTER WINAPI OpenCluster(LPCWSTR lpszClusterName);
 HCLUSENUM WINAPI ClusterOpenEnum(HCLUSTER hCluster, DWORD dwType);
&lt;/pre&gt;</description>
    <dc:creator>André Hentschel</dc:creator>
    <dc:date>2013-05-23T23:01:03</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.emulators.wine.patches">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.emulators.wine.patches</link>
  </textinput>
</rdf:RDF>
