<?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://permalink.gmane.org/gmane.comp.emulators.wine.patches/115838"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115837"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115836"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115835"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115834"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115833"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115832"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115831"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115830"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115829"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115828"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115827"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115826"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115825"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115824"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115823"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115822"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115821"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115820"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115819"/>
      </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://permalink.gmane.org/gmane.comp.emulators.wine.patches/115838">
    <title>[4/4] oledb32: GetConversionSize only returns a valid size of BSTR(try 2)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115838</link>
    <description>&lt;pre&gt;Hi,


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 +++++---------
 dlls/oledb32/tests/convert.c |  1 -
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index a6a18e3..e53f3d9 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1332,16 +1332,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:
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index a3884dc..ff44e0a 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2461,7 +2461,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_getconversionsize(void)
     V_I4(&amp;amp;var) = 4;
     hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_WSTR, &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);
 
     dst_len = 0;
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-25T23:19:24</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115837">
    <title>[3/4] oledb32: Implement GetConversionSize DBTYPE_VARIANT -&gt;DBTYPE_BYTES (try 2)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115837</link>
    <description>&lt;pre&gt;Hi,
Corrects whitespace issue also.

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 | 15 +++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index 4829ae8..a6a18e3 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; -1361,6 +1362,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 089b28c..a3884dc 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2464,6 +2464,21 &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);
+    VariantClear(&amp;amp;var);
 }
 
 static void test_converttobytes(void)
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-25T23:19:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115836">
    <title>[2/4] oledb32: Check for DBSTATUS_S_ISNULL first (try 2)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115836</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 94ba4ce..4829ae8 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 88dc1d3..089b28c 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2714,6 +2714,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; -2751,6 +2766,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-25T23:19:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115835">
    <title>[1/4] oledb32: DataConvert Support NULL variant in,DBTYPE_VARIANT-&gt;DBTYPE_WSTR (try 2)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115835</link>
    <description>&lt;pre&gt;Hi,
Corrected crash in tests.

Changelog:
       oledb32: DataConvert Support NULL variant in
    DBTYPE_VARIANT-&amp;gt;DBTYPE_WSTR


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] DataConvert 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 | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index 0961464..94ba4ce 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 fd69fed..88dc1d3 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,24 &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));
+    VariantClear(&amp;amp;v);
+
+    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);
 }
 
 static void test_converttostr(void)
&lt;/pre&gt;</description>
    <dc:creator>Alistair Leslie-Hughes</dc:creator>
    <dc:date>2013-05-25T23:19:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115834">
    <title>tools/wine.inf: addHKLM\\System\\CurrentControlSet\\Services\\Eventlog\\Applicationregistry key</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115834</link>
    <description>&lt;pre&gt;based on Austin's patch, fixed tests.
From f97dd45f1689f11dc7ea207df35c5845276ff1c1 Mon Sep 17 00:00:00 2001
From: Daniel Jelinski &amp;lt;djelinski1&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: Sat, 25 May 2013 20:12:51 +0200
Subject: tools/wine.inf: add
 HKLM\\System\\CurrentControlSet\\Services\\Eventlog\\Application
 registry key

Originally sent by Austin English here:
http://www.winehq.org/pipermail/wine-patches/2013-March/123004.html
Fixed test failures.
---
 dlls/advapi32/tests/eventlog.c |    7 ++++---
 tools/wine.inf.in              |    3 ++-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/advapi32/tests/eventlog.c b/dlls/advapi32/tests/eventlog.c
index 543b41c..b028354 100644
--- a/dlls/advapi32/tests/eventlog.c
+++ b/dlls/advapi32/tests/eventlog.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -637,7 +637,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static BOOL create_new_eventlog(void)
 
     /* First create our eventlog */
     lret = RegOpenKeyA(HKEY_LOCAL_MACHINE, eventlogsvc, &amp;amp;key);
-     /* FIXME: Wine stops here */
     if (lret != ERROR_SUCCESS)
     {
         skip("Could not open the EventLog service registry key\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -832,11 +831,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_readwrite(void)
         SetLastError(0xdeadbeef);
         ret = GetNumberOfEventLogRecords(handle, &amp;amp;count);
         ok(ret, "Expected GetNumberOfEventLogRecords success : %d\n", GetLastError());
+        todo_wine
         ok(count == (i + 1), "Expected %d records, got %d\n", i + 1, count);
 
         oldest = 0xdeadbeef;
         ret = GetOldestEventLogRecord(handle, &amp;amp;oldest);
         ok(ret, "Expected GetOldestEventLogRecord success : %d\n", GetLastError());
+        todo_wine
         ok(oldest == 1 ||
            (oldest &amp;gt; 1 &amp;amp;&amp;amp; oldest != 0xdeadbeef), /* Vista SP1+, W2K8 and Win7 */
            "Expected oldest to be 1 or higher, got %d\n", oldest);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -855,6 +856,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_readwrite(void)
     count = 0xdeadbeef;
     ret = GetNumberOfEventLogRecords(handle, &amp;amp;count);
     ok(ret, "Expected success\n");
+    todo_wine
     ok(count == i, "Expected %d records, got %d\n", i, count);
     CloseEventLog(handle);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1083,6 +1085,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_autocreation(void)
         lstrcatA(eventlogfile, ".evtx");
     }
 
+    todo_wine
     ok(GetFileAttributesA(eventlogfile) != INVALID_FILE_ATTRIBUTES,
        "Expected an eventlog file\n");
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1109,14 +1112,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void cleanup_eventlog(void)
     RegDeleteValueA(key, "Sources");
     RegCloseKey(key);
     lret = RegDeleteKeyA(HKEY_LOCAL_MACHINE, winesvc);
-    todo_wine
     ok(lret == ERROR_SUCCESS, "Could not delete the registry tree : %d\n", lret);
 
     /* A handle to the eventlog is locked by services.exe. We can only
      * delete the eventlog file after reboot.
      */
     bret = MoveFileExA(eventlogfile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
-    todo_wine
     ok(bret, "Expected MoveFileEx to succeed: %d\n", GetLastError());
 }
 
diff --git a/tools/wine.inf.in b/tools/wine.inf.in
index e48d824..14fde79 100644
--- a/tools/wine.inf.in
+++ b/tools/wine.inf.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3005,8 +3005,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HKR,Parameters,"ServiceDll",,"%11%\srvsvc.dll"
 
 [Services]
 HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r"
-HKLM,"System\CurrentControlSet\Services\VxD\MSTCP",,16
+HKLM,"System\CurrentControlSet\Services\Eventlog\Application",,16
 HKLM,"System\CurrentControlSet\Services\Tcpip\Parameters",,16
+HKLM,"System\CurrentControlSet\Services\VxD\MSTCP",,16
 HKLM,"System\CurrentControlSet\Services\Winsock\Parameters",,16
 HKLM,"System\CurrentControlSet\Services\Winsock2\Parameters\Protocol_Catalog9\Catalog_Entries",,16
 
&lt;/pre&gt;</description>
    <dc:creator>Daniel Jeliński</dc:creator>
    <dc:date>2013-05-25T18:50:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115833">
    <title>comctl32: Return previously set colors for PBM_SETBKCOLOR andPBM_SETBARCOLOR</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115833</link>
    <description>&lt;pre&gt;http://bugs.winehq.org/show_bug.cgi?id=16581

&lt;/pre&gt;</description>
    <dc:creator>Nikolay Sivov</dc:creator>
    <dc:date>2013-05-25T16:14:39</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115832">
    <title>[PATCH] kernel32: Don't move fixed memory area in GlobalReAlloc().</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115832</link>
    <description>&lt;pre&gt;
This closes bug 14819.
---
 dlls/kernel32/heap.c       |    1 +
 dlls/kernel32/tests/heap.c |   22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)


&lt;/pre&gt;</description>
    <dc:creator>Akihiro Sagawa</dc:creator>
    <dc:date>2013-05-25T15:09:17</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115831">
    <title>[PATCH] atl100: Fixed AtlAdvise and AtlUnadvise crashing with NULLpUnkCP.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115831</link>
    <description>&lt;pre&gt;Fixed QQ crashing.

---
  dlls/atl100/atl.c       |    6 ++++++
  dlls/atl100/tests/atl.c |    6 ++++++
  2 files changed, 12 insertions(+)



&lt;/pre&gt;</description>
    <dc:creator>Qian Hong</dc:creator>
    <dc:date>2013-05-25T12:56:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115830">
    <title>[website] Wine 1.5.31 freigegeben</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115830</link>
    <description>&lt;pre&gt;---
 news/de/2013052401.xml | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 news/de/2013052401.xml



&lt;/pre&gt;</description>
    <dc:creator>André Hentschel</dc:creator>
    <dc:date>2013-05-25T12:45:53</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115829">
    <title>[PATCH] po: Add Croatian language (v2)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115829</link>
    <description>&lt;pre&gt;---
 configure.ac |     1 +
 po/LINGUAS   |     1 +
 po/hr.po     | 13905
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 13907 insertions(+)
 create mode 100644 po/hr.po

&lt;/pre&gt;</description>
    <dc:creator>Joško Nikolić</dc:creator>
    <dc:date>2013-05-25T12:01:42</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115828">
    <title>[PATCH] msi: check return values of time conversions (Coverity)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115828</link>
    <description>&lt;pre&gt;CID 1025788

checked elsewhere, so also check here. Unlikly to fail though.

Ciao, Marcus
---
 dlls/msi/automation.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c
index 228d887..6266678 100644
--- a/dlls/msi/automation.c
+++ b/dlls/msi/automation.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -857,9 +857,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT summaryinfo_invoke(
                         break;
 
                     case VT_DATE:
-                        VariantTimeToSystemTime(V_DATE(&amp;amp;varg1), &amp;amp;st);
-                        SystemTimeToFileTime(&amp;amp;st, &amp;amp;ftlocal);
-                        LocalFileTimeToFileTime(&amp;amp;ftlocal, &amp;amp;ft);
+                        if (!VariantTimeToSystemTime(V_DATE(&amp;amp;varg1), &amp;amp;st))
+                            return DISP_E_EXCEPTION;
+                        if (!SystemTimeToFileTime(&amp;amp;st, &amp;amp;ftlocal))
+                            return DISP_E_EXCEPTION;
+                        if (!LocalFileTimeToFileTime(&amp;amp;ftlocal, &amp;amp;ft))
+                            return DISP_E_EXCEPTION;
                         ret = MsiSummaryInfoSetPropertyW(This-&amp;gt;msiHandle, V_I4(&amp;amp;varg0), VT_FILETIME, 0, &amp;amp;ft, NULL);
                         break;
 
&lt;/pre&gt;</description>
    <dc:creator>Marcus Meissner</dc:creator>
    <dc:date>2013-05-25T09:04:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115827">
    <title>[PATCH] wined3d: remove now useless NULL check (Coverity)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115827</link>
    <description>&lt;pre&gt;CID 1025792

got superflous after

commit 9287bb80dc974235d43d5ee4fadc86e1a11dbfeb
Author: Stefan Dösinger &amp;lt;stefan&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Sun May 19 23:13:30 2013 +0200

    d3d: d3d9ex does not do video memory accounting for D3DPOOL_DEFAULT resources.

which references this variable before.

Ciao, Marfcus
---
 dlls/wined3d/resource.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 0e0678d..3d50652 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -169,8 +169,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void resource_cleanup(struct wined3d_resource *resource)
     resource-&amp;gt;allocatedMemory = 0;
     resource-&amp;gt;heapMemory = 0;
 
-    if (resource-&amp;gt;device)
-        device_resource_released(resource-&amp;gt;device, resource);
+    device_resource_released(resource-&amp;gt;device, resource);
 }
 
 void resource_unload(struct wined3d_resource *resource)
&lt;/pre&gt;</description>
    <dc:creator>Marcus Meissner</dc:creator>
    <dc:date>2013-05-25T07:40:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115826">
    <title>[PATCH] oledb32: avoid leak in error path on safearray conversion(Coverity)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115826</link>
    <description>&lt;pre&gt;CID 1025790
---
 dlls/oledb32/convert.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index 0961464..a2fd0cb 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -957,8 +957,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
             for(i =0; i &amp;lt; size; i++,p++)
             {
                 hr = SafeArrayPutElement(psa, &amp;amp;i, &amp;amp;p);
-                if(FAILED(hr))
+                if(FAILED(hr)) {
+                   SafeArrayDestroy (psa);
                    return hr;
+                }
             }
 
             V_VT(v) = VT_ARRAY|VT_UI1;
&lt;/pre&gt;</description>
    <dc:creator>Marcus Meissner</dc:creator>
    <dc:date>2013-05-25T07:25:19</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115825">
    <title>[PATCH] d3dx9_36: allocate the right size (Coverity)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115825</link>
    <description>&lt;pre&gt;Use the right sizeof() CID 1025793
---
 dlls/d3dx9_36/surface.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index ed93eb4..1df0cf2 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1134,8 +1134,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(IDirect3DSurface9 *pDestSurface,
                 hr = IWICPalette_GetColorCount(wic_palette, &amp;amp;nb_colors);
             if (SUCCEEDED(hr))
             {
-                colors = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(colors));
-                palette = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(palette));
+                colors = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(colors[0]));
+                palette = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(palette[0]));
                 if (!colors || !palette)
                     hr = E_OUTOFMEMORY;
             }
&lt;/pre&gt;</description>
    <dc:creator>Marcus Meissner</dc:creator>
    <dc:date>2013-05-25T07:04:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115824">
    <title>[PATCH 14/14] d3dx9_36: allocate the right size (Coverity)</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115824</link>
    <description>&lt;pre&gt;Use the right sizeof() CID 1025793
---
 dlls/d3dx9_36/surface.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index ed93eb4..1df0cf2 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1134,8 +1134,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(IDirect3DSurface9 *pDestSurface,
                 hr = IWICPalette_GetColorCount(wic_palette, &amp;amp;nb_colors);
             if (SUCCEEDED(hr))
             {
-                colors = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(colors));
-                palette = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(palette));
+                colors = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(colors[0]));
+                palette = HeapAlloc(GetProcessHeap(), 0, nb_colors * sizeof(palette[0]));
                 if (!colors || !palette)
                     hr = E_OUTOFMEMORY;
             }
&lt;/pre&gt;</description>
    <dc:creator>Marcus Meissner</dc:creator>
    <dc:date>2013-05-25T06:57:21</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115823">
    <title>[website] Simplified Chinese translation for release 1.5.31.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115823</link>
    <description>&lt;pre&gt;
From 57d15bba44b58e86faa2fae3026c13bf85d17e4e Mon Sep 17 00:00:00 2001
From: Jactry Zeng &amp;lt;jactry92&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: Sat, 25 May 2013 09:22:02 +0800
Subject: Simplified Chinese translation for release 1.5.31
To: wine-patches &amp;lt;wine-patches&amp;lt; at &amp;gt;winehq.org&amp;gt;
Reply-To: wine-devel &amp;lt;wine-devel&amp;lt; at &amp;gt;winehq.org&amp;gt;

---
 news/zh-cn/2013052401.xml | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 news/zh-cn/2013052401.xml

diff --git a/news/zh-cn/2013052401.xml b/news/zh-cn/2013052401.xml
new file mode 100644
index 0000000..ed13be1
--- /dev/null
+++ b/news/zh-cn/2013052401.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+&amp;lt;news&amp;gt;
+&amp;lt;date&amp;gt;五月 24, 2013&amp;lt;/date&amp;gt;
+&amp;lt;title&amp;gt;Wine 1.5.31 发布&amp;lt;/title&amp;gt;
+&amp;lt;body&amp;gt;
+&amp;lt;p&amp;gt; Wine 开发版 1.5.31 现在可以使用了。&amp;lt;/p&amp;gt;
+&amp;lt;p&amp;gt; 本次&amp;lt;a href="{$root}/announce/1.5.31"&amp;gt;更新&amp;lt;/a&amp;gt;：
+&amp;lt;ul&amp;gt;
+  &amp;lt;li&amp;gt;基于 Firefox 21 的新版本 Gecko 引擎。&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Mac OS X 上操纵杆的力量反馈支持。&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Mac 后端驱动窗口管理的修正。&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;各种 bug 修复。&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;源代码可以从&amp;lt;a href="http://prdownloads.sourceforge.net/wine/wine-1.5.31.tar.bz2"&amp;gt;这里&amp;lt;/a&amp;gt;获取。
+二进制包正在构建中，稍后将出现在各自相应的&amp;lt;a href="{$root}/download"&amp;gt;下载位置&amp;lt;/a&amp;gt;。
+&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/news&amp;gt;
&lt;/pre&gt;</description>
    <dc:creator>Jactry Zeng</dc:creator>
    <dc:date>2013-05-25T01:28:13</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.patches/115822">
    <title>[website] French translation for release 1.5.31</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.emulators.wine.patches/115821">
    <title>[PATCH] atl100: Added stub for AtlIPersistPropertyBag_Load.</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.emulators.wine.patches/115820">
    <title>[PATCH 4/4] oleaut32: Implement ICreateTypeLib::CreateTypeInfo</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.emulators.wine.patches/115819">
    <title>[PATCH 3/4] oleaut32: Implement basic ICreateTypeInfo functions</title>
    <link>http://permalink.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://permalink.gmane.org/gmane.comp.emulators.wine.patches/115818">
    <title>[PATCH 2/4] oleaut32: Implement basic ICreateTypeLib functions</title>
    <link>http://permalink.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>
  <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>
