<?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.cvs">
    <title>gmane.comp.emulators.wine.cvs</title>
    <link>http://blog.gmane.org/gmane.comp.emulators.wine.cvs</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.cvs/85087"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85086"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85085"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85084"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85083"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85082"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85081"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85080"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85079"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85078"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85077"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85076"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85075"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85074"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85073"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85072"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85071"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85070"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85069"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85068"/>
      </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.cvs/85087">
    <title>Alexandre Julliard : Wine release 1.5.5</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85087</link>
    <description>&lt;pre&gt;Module: website
Branch: master
Commit: d1d9cc5691a5b4be738619e2c580513443e1108c
URL:    http://source.winehq.org/git/website.git/?a=commit;h=d1d9cc5691a5b4be738619e2c580513443e1108c

Author: Alexandre Julliard &amp;lt;julliard&amp;lt; at &amp;gt;winehq.org&amp;gt;
Date:   Fri May 25 20:31:17 2012 +0200

Wine release 1.5.5

---

 news/en/2012052501.xml |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/news/en/2012052501.xml b/news/en/2012052501.xml
new file mode 100644
index 0000000..6e84d18
--- /dev/null
+++ b/news/en/2012052501.xml
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+&amp;lt;news&amp;gt;
+&amp;lt;date&amp;gt;May 25, 2012&amp;lt;/date&amp;gt;
+&amp;lt;title&amp;gt;Wine 1.5.5 Released&amp;lt;/title&amp;gt;
+&amp;lt;body&amp;gt;
+&amp;lt;p&amp;gt; The Wine development release 1.5.5 is now available.&amp;lt;/p&amp;gt;
+&amp;lt;p&amp;gt; &amp;lt;a href="{$root}/announce/1.5.5"&amp;gt;What's new&amp;lt;/a&amp;gt; in this release:
+&amp;lt;ul&amp;gt;
+  &amp;lt;li&amp;gt;Support for installing Mono as a Wine add-on package.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Dithering of pattern brushes in the DIB engine.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Support for installing the .NET 4.0 runtime.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;DDS files supported in D3DX9.&amp;lt;/li&amp;gt;
+  &amp;lt;li&amp;gt;Various bug fixes.&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;The source is &amp;lt;a href="http://prdownloads.sourceforge.net/wine/wine-1.5.5.tar.bz2"&amp;gt;available now&amp;lt;/a&amp;gt;.
+Binary packages are in the process of being built, and will appear soon at their respective &amp;lt;a href="{$root}/download"&amp;gt;download locations&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>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T18:31:20</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85086">
    <title>Tag wine-1.5.5 : Alexandre Julliard : Release 1.5.5</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85086</link>
    <description>&lt;pre&gt;Module: wine
Branch: refs/tags/wine-1.5.5
Tag:    351d36d9209d7d17bb7bf3c406a9c63c4662a53a
URL:    http://source.winehq.org/git/wine.git/?a=tag;h=351d36d9209d7d17bb7bf3c406a9c63c4662a53a

Tagger: Alexandre Julliard &amp;lt;julliard&amp;lt; at &amp;gt;winehq.org&amp;gt;
Date:   Fri May 25 20:21:16 2012 +0200

Release 1.5.5



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T18:30:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85085">
    <title>Alexandre Julliard : Release 1.5.5.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85085</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: d6bc74fc5f0727f12788aa76d286d74f28208589
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d6bc74fc5f0727f12788aa76d286d74f28208589

Author: Alexandre Julliard &amp;lt;julliard&amp;lt; at &amp;gt;winehq.org&amp;gt;
Date:   Fri May 25 20:21:15 2012 +0200

Release 1.5.5.

---

 ANNOUNCE  |  906 ++++++++++++++++++++++++++++++++++---------------------------
 VERSION   |    2 +-
 configure |   18 +-
 3 files changed, 513 insertions(+), 413 deletions(-)

Diff:   http://source.winehq.org/git/wine.git/?a=commitdiff;h=d6bc74fc5f0727f12788aa76d286d74f28208589



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T18:30:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85084">
    <title>Jacek Caban : wininet: Added INTERNET_OPTION_SECURITY_FLAGS tests.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85084</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 22e25ea006eb6fed29d2d70cfc70cbc9b65f0a8d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=22e25ea006eb6fed29d2d70cfc70cbc9b65f0a8d

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:36:46 2012 +0200

wininet: Added INTERNET_OPTION_SECURITY_FLAGS tests.

---

 dlls/wininet/tests/http.c |  215 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 215 insertions(+), 0 deletions(-)

Diff:   http://source.winehq.org/git/wine.git/?a=commitdiff;h=22e25ea006eb6fed29d2d70cfc70cbc9b65f0a8d



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85083">
    <title>Jacek Caban : wininet: Store certificate error information insecurity flags.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85083</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 868575a416fd4a2236cedfc689049f6ca390efe4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=868575a416fd4a2236cedfc689049f6ca390efe4

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:51:20 2012 +0200

wininet: Store certificate error information in security flags.

---

 dlls/wininet/http.c          |   18 +----
 dlls/wininet/internet.h      |   11 ++-
 dlls/wininet/netconnection.c |  188 ++++++++++++++++++++++++-----------------
 3 files changed, 123 insertions(+), 94 deletions(-)

Diff:   http://source.winehq.org/git/wine.git/?a=commitdiff;h=868575a416fd4a2236cedfc689049f6ca390efe4



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85082">
    <title>Jacek Caban : wininet: Added INTERNET_OPTION_SETTINGS_CHANGEDsemi-stub implementation.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85082</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: f8f2273b7c0c9c55c6060d10b7ceb6df2618d50d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f8f2273b7c0c9c55c6060d10b7ceb6df2618d50d

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:35:48 2012 +0200

wininet: Added INTERNET_OPTION_SETTINGS_CHANGED semi-stub implementation.

---

 dlls/wininet/http.c     |    8 ++++----
 dlls/wininet/internet.c |    7 ++++++-
 dlls/wininet/internet.h |    8 +++++++-
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index e32dde6..6472c3c 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -285,7 +285,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static server_t *get_server(const WCHAR *name, INTERNET_PORT port)
     return server;
 }
 
-BOOL collect_connections(BOOL collect_all)
+BOOL collect_connections(collect_type_t collect_type)
 {
     netconn_t *netconn, *netconn_safe;
     server_t *server, *server_safe;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -296,7 +296,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; BOOL collect_connections(BOOL collect_all)
 
     LIST_FOR_EACH_ENTRY_SAFE(server, server_safe, &amp;amp;connection_pool, server_t, entry) {
         LIST_FOR_EACH_ENTRY_SAFE(netconn, netconn_safe, &amp;amp;server-&amp;gt;conn_pool, netconn_t, pool_entry) {
-            if(collect_all || netconn-&amp;gt;keep_until &amp;lt; now) {
+            if(collect_type &amp;gt; COLLECT_TIMEOUT || netconn-&amp;gt;keep_until &amp;lt; now) {
                 TRACE("freeing %p\n", netconn);
                 list_remove(&amp;amp;netconn-&amp;gt;pool_entry);
                 free_netconn(netconn);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -305,7 +305,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; BOOL collect_connections(BOOL collect_all)
             }
         }
 
-        if(collect_all) {
+        if(collect_type == COLLECT_CLEANUP) {
             list_remove(&amp;amp;server-&amp;gt;entry);
             list_init(&amp;amp;server-&amp;gt;entry);
             server_release(server);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -325,7 +325,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD WINAPI collect_connections_proc(void *arg)
 
         EnterCriticalSection(&amp;amp;connection_pool_cs);
 
-        remaining_conns = collect_connections(FALSE);
+        remaining_conns = collect_connections(COLLECT_TIMEOUT);
         if(!remaining_conns)
             collector_running = FALSE;
 
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index a41225f..7ca4b0b 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -309,7 +309,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
             break;
 
         case DLL_PROCESS_DETACH:
-            collect_connections(TRUE);
+            collect_connections(COLLECT_CLEANUP);
             NETCON_unload();
             URLCacheContainers_DeleteAll();
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2635,6 +2635,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD set_global_option(DWORD option, void *buf, DWORD size)
 
         connect_timeout = *(ULONG*)buf;
         return ERROR_SUCCESS;
+
+    case INTERNET_OPTION_SETTINGS_CHANGED:
+        FIXME("INTERNETOPTION_SETTINGS_CHANGED semi-stub\n");
+        collect_connections(COLLECT_CONNECTIONS);
+        return ERROR_SUCCESS;
     }
 
     return ERROR_INTERNET_INVALID_OPTION;
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 30869d9..14228cb 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -70,7 +70,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct {
 
 void server_addref(server_t*) DECLSPEC_HIDDEN;
 void server_release(server_t*) DECLSPEC_HIDDEN;
-BOOL collect_connections(BOOL) DECLSPEC_HIDDEN;
+
+typedef enum {
+    COLLECT_TIMEOUT,
+    COLLECT_CONNECTIONS,
+    COLLECT_CLEANUP
+} collect_type_t;
+BOOL collect_connections(collect_type_t) DECLSPEC_HIDDEN;
 
 /* used for netconnection.c stuff */
 typedef struct




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85081">
    <title>Jacek Caban : wininet: Store server_t on the list until clean up.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85081</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 95c1b74fc9fe4525f2314570aa422401fc40d865
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=95c1b74fc9fe4525f2314570aa422401fc40d865

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:35:32 2012 +0200

wininet: Store server_t on the list until clean up.

---

 dlls/wininet/http.c     |   21 +++++++++------------
 dlls/wininet/internet.h |    1 -
 2 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 50f77df..e32dde6 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -242,8 +242,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void server_release(server_t *server)
     if(InterlockedDecrement(&amp;amp;server-&amp;gt;ref))
         return;
 
-    if(!server-&amp;gt;ref)
-        server-&amp;gt;keep_until = GetTickCount64() + COLLECT_TIME;
+    list_remove(&amp;amp;server-&amp;gt;entry);
+
+    heap_free(server-&amp;gt;name);
+    heap_free(server);
 }
 
 static server_t *get_server(const WCHAR *name, INTERNET_PORT port)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -264,7 +266,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static server_t *get_server(const WCHAR *name, INTERNET_PORT port)
         server = heap_alloc(sizeof(*server));
         if(server) {
             server-&amp;gt;addr_len = 0;
-            server-&amp;gt;ref = 1;
+            server-&amp;gt;ref = 2; /* list reference and return */
             server-&amp;gt;port = port;
             server-&amp;gt;security_flags = 0;
             list_init(&amp;amp;server-&amp;gt;conn_pool);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -303,15 +305,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; BOOL collect_connections(BOOL collect_all)
             }
         }
 
-        if(!server-&amp;gt;ref) {
-            if(collect_all || server-&amp;gt;keep_until &amp;lt; now) {
-                list_remove(&amp;amp;server-&amp;gt;entry);
-
-                heap_free(server-&amp;gt;name);
-                heap_free(server);
-            }else {
-                remaining = TRUE;
-            }
+        if(collect_all) {
+            list_remove(&amp;amp;server-&amp;gt;entry);
+            list_init(&amp;amp;server-&amp;gt;entry);
+            server_release(server);
         }
     }
 
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index bf11e6d..30869d9 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -61,7 +61,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct {
     char addr_str[INET6_ADDRSTRLEN];
 
     LONG ref;
-    DWORD64 keep_until;
 
     DWORD security_flags;
 




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85080">
    <title>Jacek Caban : wininet: Set SECURITY_FLAG_STRENGTH_* flags inNETCONN_secure_connect.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85080</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: f3dd75d8a4da66da467a6e026ec8c1a5ee8339b8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f3dd75d8a4da66da467a6e026ec8c1a5ee8339b8

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:35:12 2012 +0200

wininet: Set SECURITY_FLAG_STRENGTH_* flags in NETCONN_secure_connect.

---

 dlls/wininet/http.c          |   11 ++---------
 dlls/wininet/netconnection.c |    9 +++++++++
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 1943e91..50f77df 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1999,16 +1999,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffe
 
         *size = sizeof(DWORD);
         flags = req-&amp;gt;netconn ? req-&amp;gt;netconn-&amp;gt;security_flags : req-&amp;gt;security_flags | req-&amp;gt;server-&amp;gt;security_flags;
-        if(req-&amp;gt;netconn) {
-            int bits = NETCON_GetCipherStrength(req-&amp;gt;netconn);
-            if (bits &amp;gt;= 128)
-                flags |= SECURITY_FLAG_STRENGTH_STRONG;
-            else if (bits &amp;gt;= 56)
-                flags |= SECURITY_FLAG_STRENGTH_MEDIUM;
-            else
-                flags |= SECURITY_FLAG_STRENGTH_WEAK;
-        }
         *(DWORD *)buffer = flags;
+
+        TRACE("INTERNET_OPTION_SECURITY_FLAGS %x\n", flags);
         return ERROR_SUCCESS;
     }
 
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index ac9f347..66e1734 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -688,6 +688,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DWORD NETCON_secure_connect(netconn_t *connection)
     DWORD res = ERROR_NOT_SUPPORTED;
 #ifdef SONAME_LIBSSL
     void *ssl_s;
+    int bits;
 
     /* can't connect if we are already connected */
     if (connection-&amp;gt;ssl_s)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -730,7 +731,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DWORD NETCON_secure_connect(netconn_t *connection)
 
     connection-&amp;gt;ssl_s = ssl_s;
 
+    bits = NETCON_GetCipherStrength(connection);
+    if (bits &amp;gt;= 128)
+        connection-&amp;gt;security_flags |= SECURITY_FLAG_STRENGTH_STRONG;
+    else if (bits &amp;gt;= 56)
+        connection-&amp;gt;security_flags |= SECURITY_FLAG_STRENGTH_MEDIUM;
+    else
+        connection-&amp;gt;security_flags |= SECURITY_FLAG_STRENGTH_WEAK;
     connection-&amp;gt;security_flags |= SECURITY_FLAG_SECURE;
+
     connection-&amp;gt;server-&amp;gt;security_flags = connection-&amp;gt;security_flags;
     return ERROR_SUCCESS;
 




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85079">
    <title>Jacek Caban : wininet: Set SECURITY_FLAG_SECURRE inNETCON_secure_connect.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85079</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 90ec92dfd1cce496c9bbf78ff79c32253ccde529
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=90ec92dfd1cce496c9bbf78ff79c32253ccde529

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:34:59 2012 +0200

wininet: Set SECURITY_FLAG_SECURRE in NETCON_secure_connect.

---

 dlls/wininet/http.c          |    2 --
 dlls/wininet/netconnection.c |    2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 1392fb8..1943e91 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1999,8 +1999,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffe
 
         *size = sizeof(DWORD);
         flags = req-&amp;gt;netconn ? req-&amp;gt;netconn-&amp;gt;security_flags : req-&amp;gt;security_flags | req-&amp;gt;server-&amp;gt;security_flags;
-        if (req-&amp;gt;hdr.dwFlags &amp;amp; INTERNET_FLAG_SECURE)
-            flags |= SECURITY_FLAG_SECURE;
         if(req-&amp;gt;netconn) {
             int bits = NETCON_GetCipherStrength(req-&amp;gt;netconn);
             if (bits &amp;gt;= 128)
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index f799dbd..ac9f347 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -729,6 +729,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DWORD NETCON_secure_connect(netconn_t *connection)
     }
 
     connection-&amp;gt;ssl_s = ssl_s;
+
+    connection-&amp;gt;security_flags |= SECURITY_FLAG_SECURE;
     connection-&amp;gt;server-&amp;gt;security_flags = connection-&amp;gt;security_flags;
     return ERROR_SUCCESS;
 




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85078">
    <title>Jacek Caban : wininet: Store security flags in server_t.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85078</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 59a0ab54cb18d4f21e2c6407fc6e9eb859f52f41
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=59a0ab54cb18d4f21e2c6407fc6e9eb859f52f41

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:34:43 2012 +0200

wininet: Store security flags in server_t.

---

 dlls/wininet/http.c          |    4 ++--
 dlls/wininet/internet.h      |    2 ++
 dlls/wininet/netconnection.c |    3 ++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index d8b3d1c..1392fb8 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -266,6 +266,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static server_t *get_server(const WCHAR *name, INTERNET_PORT port)
             server-&amp;gt;addr_len = 0;
             server-&amp;gt;ref = 1;
             server-&amp;gt;port = port;
+            server-&amp;gt;security_flags = 0;
             list_init(&amp;amp;server-&amp;gt;conn_pool);
             server-&amp;gt;name = heap_strdupW(name);
             if(server-&amp;gt;name) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1997,10 +1998,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffe
             return ERROR_INSUFFICIENT_BUFFER;
 
         *size = sizeof(DWORD);
-        flags = 0;
+        flags = req-&amp;gt;netconn ? req-&amp;gt;netconn-&amp;gt;security_flags : req-&amp;gt;security_flags | req-&amp;gt;server-&amp;gt;security_flags;
         if (req-&amp;gt;hdr.dwFlags &amp;amp; INTERNET_FLAG_SECURE)
             flags |= SECURITY_FLAG_SECURE;
-        flags |= req-&amp;gt;security_flags;
         if(req-&amp;gt;netconn) {
             int bits = NETCON_GetCipherStrength(req-&amp;gt;netconn);
             if (bits &amp;gt;= 128)
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 38d6275..bf11e6d 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -63,6 +63,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct {
     LONG ref;
     DWORD64 keep_until;
 
+    DWORD security_flags;
+
     struct list entry;
     struct list conn_pool;
 } server_t;
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index 4d3e13f..f799dbd 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -511,7 +511,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DWORD create_netconn(BOOL useSSL, server_t *server, DWORD security_flags, DWORD
 
     netconn-&amp;gt;useSSL = useSSL;
     netconn-&amp;gt;socketFD = -1;
-    netconn-&amp;gt;security_flags = security_flags;
+    netconn-&amp;gt;security_flags = security_flags | server-&amp;gt;security_flags;
     list_init(&amp;amp;netconn-&amp;gt;pool_entry);
 
     assert(server-&amp;gt;addr_len);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -729,6 +729,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DWORD NETCON_secure_connect(netconn_t *connection)
     }
 
     connection-&amp;gt;ssl_s = ssl_s;
+    connection-&amp;gt;server-&amp;gt;security_flags = connection-&amp;gt;security_flags;
     return ERROR_SUCCESS;
 
 fail:




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85077">
    <title>Jacek Caban : wininet: Store server_t in http_request_t.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85077</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 3aeb8eb6b69f38a2e081d55fac0c2905ac6c44da
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3aeb8eb6b69f38a2e081d55fac0c2905ac6c44da

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:34:24 2012 +0200

wininet: Store server_t in http_request_t.

---

 dlls/wininet/http.c     |   77 +++++++++++++++++++++++++----------------------
 dlls/wininet/internet.h |    1 +
 2 files changed, 42 insertions(+), 36 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 2f64b03..d8b3d1c 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1182,7 +1182,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static BOOL HTTP_DoAuthorization( http_request_t *request, LPCWSTR pszAuthValue,
 
         sec_status = InitializeSecurityContextW(first ? &amp;amp;pAuthInfo-&amp;gt;cred : NULL,
                                                 first ? NULL : &amp;amp;pAuthInfo-&amp;gt;ctx,
-                                                first ? request-&amp;gt;session-&amp;gt;serverName : NULL,
+                                                first ? request-&amp;gt;server-&amp;gt;name : NULL,
                                                 context_req, 0, SECURITY_NETWORK_DREP,
                                                 in.pvBuffer ? &amp;amp;in_desc : NULL,
                                                 0, &amp;amp;pAuthInfo-&amp;gt;ctx, &amp;amp;out_desc,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1698,6 +1698,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static BOOL HTTP_DealWithProxy(appinfo_t *hIC, http_session_t *session, http_req
     WCHAR proxy[INTERNET_MAX_URL_LENGTH];
     static WCHAR szNul[] = { 0 };
     URL_COMPONENTSW UrlComponents;
+    server_t *new_server;
     static const WCHAR protoHttp[] = { 'h','t','t','p',0 };
     static const WCHAR szHttp[] = { 'h','t','t','p',':','/','/',0 };
     static const WCHAR szFormat[] = { 'h','t','t','p',':','/','/','%','s',0 };
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1725,16 +1726,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static BOOL HTTP_DealWithProxy(appinfo_t *hIC, http_session_t *session, http_req
     if(UrlComponents.nPort == INTERNET_INVALID_PORT_NUMBER)
         UrlComponents.nPort = INTERNET_DEFAULT_HTTP_PORT;
 
-    heap_free(session-&amp;gt;serverName);
-    session-&amp;gt;serverName = heap_strdupW(UrlComponents.lpszHostName);
-    session-&amp;gt;serverPort = UrlComponents.nPort;
+    new_server = get_server(UrlComponents.lpszHostName, UrlComponents.nPort);
+    if(!new_server)
+        return FALSE;
+
+    server_release(request-&amp;gt;server);
+    request-&amp;gt;server = new_server;
 
-    TRACE("proxy server=%s port=%d\n", debugstr_w(session-&amp;gt;serverName), session-&amp;gt;serverPort);
+    TRACE("proxy server=%s port=%d\n", debugstr_w(new_server-&amp;gt;name), new_server-&amp;gt;port);
     return TRUE;
 }
 
-static DWORD HTTP_ResolveName(http_request_t *request, server_t *server)
+static DWORD HTTP_ResolveName(http_request_t *request)
 {
+    server_t *server = request-&amp;gt;server;
     socklen_t addr_len;
     const void *addr;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1833,6 +1838,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void HTTPREQ_Destroy(object_header_t *hdr)
     destroy_authinfo(request-&amp;gt;authInfo);
     destroy_authinfo(request-&amp;gt;proxyAuthInfo);
 
+    if(request-&amp;gt;server)
+        server_release(request-&amp;gt;server);
+
     heap_free(request-&amp;gt;path);
     heap_free(request-&amp;gt;verb);
     heap_free(request-&amp;gt;rawHeaders);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3063,6 +3071,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTP_HttpOpenRequestW(http_session_t *session,
 {
     appinfo_t *hIC = session-&amp;gt;appInfo;
     http_request_t *request;
+    INTERNET_PORT port;
     DWORD len, res = ERROR_SUCCESS;
 
     TRACE("--&amp;gt;\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3089,6 +3098,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTP_HttpOpenRequestW(http_session_t *session,
     request-&amp;gt;session = session;
     list_add_head( &amp;amp;session-&amp;gt;hdr.children, &amp;amp;request-&amp;gt;hdr.entry );
 
+    port = session-&amp;gt;serverPort;
+    if(port == INTERNET_INVALID_PORT_NUMBER)
+        port = dwFlags &amp;amp; INTERNET_FLAG_SECURE ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT;
+
+    request-&amp;gt;server = get_server(session-&amp;gt;serverName, port);
+    if(!request-&amp;gt;server) {
+        WININET_Release(&amp;amp;request-&amp;gt;hdr);
+        return ERROR_OUTOFMEMORY;
+    }
+
     if (dwFlags &amp;amp; INTERNET_FLAG_IGNORE_CERT_CN_INVALID)
         request-&amp;gt;security_flags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID;
     if (dwFlags &amp;amp; INTERNET_FLAG_IGNORE_CERT_DATE_INVALID)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3156,11 +3175,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTP_HttpOpenRequestW(http_session_t *session,
         HTTP_ProcessHeader(request, hostW, session-&amp;gt;hostName,
                 HTTP_ADDREQ_FLAG_ADD | HTTP_ADDHDR_FLAG_REQ);
 
-    if (session-&amp;gt;serverPort == INTERNET_INVALID_PORT_NUMBER)
-        session-&amp;gt;serverPort = (dwFlags &amp;amp; INTERNET_FLAG_SECURE ?
-                        INTERNET_DEFAULT_HTTPS_PORT :
-                        INTERNET_DEFAULT_HTTP_PORT);
-
     if (session-&amp;gt;hostPort == INTERNET_INVALID_PORT_NUMBER)
         session-&amp;gt;hostPort = (dwFlags &amp;amp; INTERNET_FLAG_SECURE ?
                         INTERNET_DEFAULT_HTTPS_PORT :
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3913,12 +3927,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD HTTP_HandleRedirect(http_request_t *request, LPCWSTR lpszUrl)
 
         reset_data_stream(request);
 
-        if(!using_proxy) {
-            if(strcmpiW(session-&amp;gt;serverName, hostName)) {
-                heap_free(session-&amp;gt;serverName);
-                session-&amp;gt;serverName = heap_strdupW(hostName);
-            }
-            session-&amp;gt;serverPort = urlComponents.nPort;
+        if(!using_proxy &amp;amp;&amp;amp; (strcmpiW(request-&amp;gt;server-&amp;gt;name, hostName) || request-&amp;gt;server-&amp;gt;port != urlComponents.nPort)) {
+            server_t *new_server;
+
+            new_server = get_server(hostName, urlComponents.nPort);
+            server_release(request-&amp;gt;server);
+            request-&amp;gt;server = new_server;
         }
     }
     heap_free(request-&amp;gt;path);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4601,28 +4615,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void HTTP_CacheRequest(http_request_t *request)
 static DWORD open_http_connection(http_request_t *request, BOOL *reusing)
 {
     const BOOL is_https = (request-&amp;gt;hdr.dwFlags &amp;amp; INTERNET_FLAG_SECURE) != 0;
-    http_session_t *session = request-&amp;gt;session;
     netconn_t *netconn = NULL;
-    server_t *server;
     DWORD res;
 
     assert(!request-&amp;gt;netconn);
     reset_data_stream(request);
 
-    server = get_server(session-&amp;gt;serverName, session-&amp;gt;serverPort);
-    if(!server)
-        return ERROR_OUTOFMEMORY;
-
-    res = HTTP_ResolveName(request, server);
-    if(res != ERROR_SUCCESS) {
-        server_release(server);
+    res = HTTP_ResolveName(request);
+    if(res != ERROR_SUCCESS)
         return res;
-    }
 
     EnterCriticalSection(&amp;amp;connection_pool_cs);
 
-    while(!list_empty(&amp;amp;server-&amp;gt;conn_pool)) {
-        netconn = LIST_ENTRY(list_head(&amp;amp;server-&amp;gt;conn_pool), netconn_t, pool_entry);
+    while(!list_empty(&amp;amp;request-&amp;gt;server-&amp;gt;conn_pool)) {
+        netconn = LIST_ENTRY(list_head(&amp;amp;request-&amp;gt;server-&amp;gt;conn_pool), netconn_t, pool_entry);
         list_remove(&amp;amp;netconn-&amp;gt;pool_entry);
 
         if(NETCON_is_alive(netconn))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4644,11 +4650,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD open_http_connection(http_request_t *request, BOOL *reusing)
 
     INTERNET_SendCallback(&amp;amp;request-&amp;gt;hdr, request-&amp;gt;hdr.dwContext,
                           INTERNET_STATUS_CONNECTING_TO_SERVER,
-                          server-&amp;gt;addr_str,
-                          strlen(server-&amp;gt;addr_str)+1);
+                          request-&amp;gt;server-&amp;gt;addr_str,
+                          strlen(request-&amp;gt;server-&amp;gt;addr_str)+1);
 
-    res = create_netconn(is_https, server, request-&amp;gt;security_flags, request-&amp;gt;connect_timeout, &amp;amp;netconn);
-    server_release(server);
+    res = create_netconn(is_https, request-&amp;gt;server, request-&amp;gt;security_flags, request-&amp;gt;connect_timeout, &amp;amp;netconn);
     if(res != ERROR_SUCCESS) {
         ERR("create_netconn failed: %u\n", res);
         return res;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4658,7 +4663,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD open_http_connection(http_request_t *request, BOOL *reusing)
 
     INTERNET_SendCallback(&amp;amp;request-&amp;gt;hdr, request-&amp;gt;hdr.dwContext,
             INTERNET_STATUS_CONNECTED_TO_SERVER,
-            server-&amp;gt;addr_str, strlen(server-&amp;gt;addr_str)+1);
+            request-&amp;gt;server-&amp;gt;addr_str, strlen(request-&amp;gt;server-&amp;gt;addr_str)+1);
 
     if(is_https) {
         /* Note: we differ from Microsoft's WinINet here. they seem to have
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4667,7 +4672,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD open_http_connection(http_request_t *request, BOOL *reusing)
          * behaviour to be more correct and to not cause any incompatibilities
          * because using a secure connection through a proxy server is a rare
          * case that would be hard for anyone to depend on */
-        if(session-&amp;gt;appInfo-&amp;gt;proxy)
+        if(request-&amp;gt;session-&amp;gt;appInfo-&amp;gt;proxy)
             res = HTTP_SecureProxyConnect(request);
         if(res == ERROR_SUCCESS)
             res = NETCON_secure_connect(request-&amp;gt;netconn);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4693,7 +4698,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD open_http_connection(http_request_t *request, BOOL *reusing)
     }
 
     *reusing = FALSE;
-    TRACE("Created connection to %s: %p\n", debugstr_w(server-&amp;gt;name), netconn);
+    TRACE("Created connection to %s: %p\n", debugstr_w(request-&amp;gt;server-&amp;gt;name), netconn);
     return ERROR_SUCCESS;
 }
 
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 1956e07..38d6275 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -304,6 +304,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct
 {
     object_header_t hdr;
     http_session_t *session;
+    server_t *server;
     LPWSTR path;
     LPWSTR verb;
     LPWSTR rawHeaders;




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85076">
    <title>Henri Verbeet : d3d9: Get rid of IDirect3D9Impl.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85076</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 82adae949bb4f35eed95e276d9ad7acb72cc800a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=82adae949bb4f35eed95e276d9ad7acb72cc800a

Author: Henri Verbeet &amp;lt;hverbeet&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:10:31 2012 +0200

d3d9: Get rid of IDirect3D9Impl.

---

 dlls/d3d9/d3d9_main.c    |    4 +-
 dlls/d3d9/d3d9_private.h |   28 ++---
 dlls/d3d9/device.c       |    2 +-
 dlls/d3d9/directx.c      |  335 ++++++++++++++++++++++------------------------
 4 files changed, 176 insertions(+), 193 deletions(-)

Diff:   http://source.winehq.org/git/wine.git/?a=commitdiff;h=82adae949bb4f35eed95e276d9ad7acb72cc800a



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85075">
    <title>Henri Verbeet : d3d9: Add a separate function for d3d9 initialization.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85075</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 5b2d1710434aa71fc9bd421f1836db710b21bf9e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5b2d1710434aa71fc9bd421f1836db710b21bf9e

Author: Henri Verbeet &amp;lt;hverbeet&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:10:30 2012 +0200

d3d9: Add a separate function for d3d9 initialization.

---

 dlls/d3d9/d3d9_main.c    |   58 +++++++++++++++++++++++++++------------------
 dlls/d3d9/d3d9_private.h |   14 +----------
 dlls/d3d9/directx.c      |   18 ++++++++++++-
 3 files changed, 52 insertions(+), 38 deletions(-)

diff --git a/dlls/d3d9/d3d9_main.c b/dlls/d3d9/d3d9_main.c
index 6eed9b7..e3bb9f8 100644
--- a/dlls/d3d9/d3d9_main.c
+++ b/dlls/d3d9/d3d9_main.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -33,40 +33,52 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void WINAPI DebugSetMute(void) {
     /* nothing to do */
 }
 
-IDirect3D9* WINAPI DECLSPEC_HOTPATCH Direct3DCreate9(UINT SDKVersion) {
-    IDirect3D9Impl* object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3D9Impl));
-
-    object-&amp;gt;IDirect3D9Ex_iface.lpVtbl = &amp;amp;Direct3D9_Vtbl;
-    object-&amp;gt;ref = 1;
+IDirect3D9 * WINAPI DECLSPEC_HOTPATCH Direct3DCreate9(UINT sdk_version)
+{
+    IDirect3D9Impl *object;
 
-    wined3d_mutex_lock();
-    object-&amp;gt;WineD3D = wined3d_create(9, 0);
-    wined3d_mutex_unlock();
+    TRACE("sdk_version %#x.\n", sdk_version);
 
-    TRACE("SDKVersion = %x, Created Direct3D object &amp;lt; at &amp;gt; %p, WineObj &amp;lt; at &amp;gt; %p\n", SDKVersion, object, object-&amp;gt;WineD3D);
+    if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+    {
+        ERR("Failed to allocate d3d9 object memory.\n");
+        return NULL;
+    }
 
-    if (!object-&amp;gt;WineD3D)
+    if (!d3d9_init(object, FALSE))
     {
-        HeapFree( GetProcessHeap(), 0, object );
-        object = NULL;
+        WARN("Failed to initialize d3d9.\n");
+        HeapFree(GetProcessHeap(), 0, object);
+        return NULL;
     }
-    return (IDirect3D9*) object;
+
+    TRACE("Created d3d9 object %p.\n", object);
+
+    return (IDirect3D9 *)&amp;amp;object-&amp;gt;IDirect3D9Ex_iface;
 }
 
-HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex **direct3d9ex) {
-    IDirect3D9 *ret;
-    IDirect3D9Impl* object;
+HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT sdk_version, IDirect3D9Ex **d3d9ex)
+{
+    IDirect3D9Impl *object;
 
-    TRACE("Calling Direct3DCreate9\n");
-    ret = Direct3DCreate9(SDKVersion);
-    if(!ret) {
-        *direct3d9ex = NULL;
+    TRACE("sdk_version %#x, d3d9ex %p.\n", sdk_version, d3d9ex);
+
+    if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+    {
+        ERR("Failed to allocate d3d9 object memory.\n");
+        return E_OUTOFMEMORY;
+    }
+
+    if (!d3d9_init(object, TRUE))
+    {
+        WARN("Failed to initialize d3d9.\n");
+        HeapFree(GetProcessHeap(), 0, object);
         return D3DERR_NOTAVAILABLE;
     }
 
-    object = (IDirect3D9Impl *) ret;
-    object-&amp;gt;extended = TRUE; /* Enables QI for extended interfaces */
-    *direct3d9ex = &amp;amp;object-&amp;gt;IDirect3D9Ex_iface;
+    TRACE("Created d3d9 object %p.\n", object);
+    *d3d9ex = &amp;amp;object-&amp;gt;IDirect3D9Ex_iface;
+
     return D3D_OK;
 }
 
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index d814dd0..793c948 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -127,19 +127,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format) DECLSPEC_H
     _pD3D9Caps-&amp;gt;MaxVertexShader30InstructionSlots = _pWineCaps-&amp;gt;MaxVertexShader30InstructionSlots; \
     _pD3D9Caps-&amp;gt;MaxPixelShader30InstructionSlots  = _pWineCaps-&amp;gt;MaxPixelShader30InstructionSlots;
 
-/* ===========================================================================
-    D3D9 interfaces
-   =========================================================================== */
-
-/* ---------- */
-/* IDirect3D9 */
-/* ---------- */
-
-/*****************************************************************************
- * Predeclare the interface implementation structures
- */
-extern const IDirect3D9ExVtbl Direct3D9_Vtbl DECLSPEC_HIDDEN;
-
 /*****************************************************************************
  * IDirect3D implementation structure
  */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -155,6 +142,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef struct IDirect3D9Impl
     BOOL                    extended;
 } IDirect3D9Impl;
 
+BOOL d3d9_init(IDirect3D9Impl *d3d9, BOOL extended) DECLSPEC_HIDDEN;
 void filter_caps(D3DCAPS9* pCaps) DECLSPEC_HIDDEN;
 
 struct fvf_declaration
diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c
index d8a5d78..80b862d 100644
--- a/dlls/d3d9/directx.c
+++ b/dlls/d3d9/directx.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -551,8 +551,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI IDirect3D9ExImpl_GetAdapterLUID(IDirect3D9Ex *iface, UINT
     return hr;
 }
 
-
-const IDirect3D9ExVtbl Direct3D9_Vtbl =
+static const struct IDirect3D9ExVtbl Direct3D9_Vtbl =
 {
     /* IUnknown */
     IDirect3D9Impl_QueryInterface,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -581,3 +580,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; const IDirect3D9ExVtbl Direct3D9_Vtbl =
     IDirect3D9ExImpl_GetAdapterLUID
 
 };
+
+BOOL d3d9_init(IDirect3D9Impl *d3d9, BOOL extended)
+{
+    d3d9-&amp;gt;IDirect3D9Ex_iface.lpVtbl = &amp;amp;Direct3D9_Vtbl;
+    d3d9-&amp;gt;ref = 1;
+
+    wined3d_mutex_lock();
+    d3d9-&amp;gt;WineD3D = wined3d_create(9, 0);
+    wined3d_mutex_unlock();
+    if (!d3d9-&amp;gt;WineD3D)
+        return FALSE;
+    d3d9-&amp;gt;extended = extended;
+
+    return TRUE;
+}




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85074">
    <title>Henri Verbeet : d3dx9: Don't use HEAP_ZERO_MEMORY if we' re going tooverwrite the memory anyway.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85074</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 372984e053b0fc8a8e56d5f2209540b61fb2836b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=372984e053b0fc8a8e56d5f2209540b61fb2836b

Author: Henri Verbeet &amp;lt;hverbeet&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:10:29 2012 +0200

d3dx9: Don't use HEAP_ZERO_MEMORY if we're going to overwrite the memory anyway.

---

 dlls/d3dx9_36/surface.c |    4 ++--
 dlls/d3dx9_36/texture.c |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index 821d51e..d490cef 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -656,7 +656,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT WINAPI D3DXGetImageInfoFromFileA(LPCSTR file, D3DXIMAGE_INFO *info)
     if( !file ) return D3DERR_INVALIDCALL;
 
     strlength = MultiByteToWideChar(CP_ACP, 0, file, -1, NULL, 0);
-    widename = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, strlength * sizeof(WCHAR));
+    widename = HeapAlloc(GetProcessHeap(), 0, strlength * sizeof(*widename));
     MultiByteToWideChar(CP_ACP, 0, file, -1, widename, strlength);
 
     hr = D3DXGetImageInfoFromFileW(widename, info);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -918,7 +918,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT WINAPI D3DXLoadSurfaceFromFileA(LPDIRECT3DSURFACE9 pDestSurface,
     if( !pSrcFile || !pDestSurface ) return D3DERR_INVALIDCALL;
 
     strlength = MultiByteToWideChar(CP_ACP, 0, pSrcFile, -1, NULL, 0);
-    pWidename = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, strlength * sizeof(WCHAR));
+    pWidename = HeapAlloc(GetProcessHeap(), 0, strlength * sizeof(*pWidename));
     MultiByteToWideChar(CP_ACP, 0, pSrcFile, -1, pWidename, strlength);
 
     hr = D3DXLoadSurfaceFromFileW(pDestSurface, pDestPalette, pDestRect, pWidename, pSrcRect, dwFilter, Colorkey, pSrcInfo);
diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c
index 750025c..c17a327 100644
--- a/dlls/d3dx9_36/texture.c
+++ b/dlls/d3dx9_36/texture.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -746,7 +746,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT WINAPI D3DXCreateTextureFromFileExA(LPDIRECT3DDEVICE9 device,
         return D3DERR_INVALIDCALL;
 
     len = MultiByteToWideChar(CP_ACP, 0, srcfile, -1, NULL, 0);
-    widename = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR));
+    widename = HeapAlloc(GetProcessHeap(), 0, len * sizeof(*widename));
     MultiByteToWideChar(CP_ACP, 0, srcfile, -1, widename, len);
 
     hr = D3DXCreateTextureFromFileExW(device, widename, width, height, miplevels,




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85073">
    <title>Henri Verbeet : d3d9: Get rid of the D3D_DECL_* macros.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85073</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: b5d64260e00ef98de12cecbfcbd5a2910538875b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b5d64260e00ef98de12cecbfcbd5a2910538875b

Author: Henri Verbeet &amp;lt;hverbeet&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:10:28 2012 +0200

d3d9: Get rid of the D3D_DECL_* macros.

---

 dlls/d3d9/vertexdeclaration.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/dlls/d3d9/vertexdeclaration.c b/dlls/d3d9/vertexdeclaration.c
index 679f010..2d31dd7 100644
--- a/dlls/d3d9/vertexdeclaration.c
+++ b/dlls/d3d9/vertexdeclaration.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -27,8 +27,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
 static const struct
 {
     enum wined3d_format_id format;
-    int         size;
-    int         typesize;
+    unsigned int component_count;
+    unsigned int component_size;
 }
 d3d_dtype_lookup[] =
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -51,9 +51,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; d3d_dtype_lookup[] =
     /* D3DDECLTYPE_FLOAT16_4 */ {WINED3DFMT_R16G16B16A16_FLOAT, 4, sizeof(short int)}
 };
 
-#define D3D_DECL_SIZE(type)          d3d_dtype_lookup[type].size
-#define D3D_DECL_TYPESIZE(type)      d3d_dtype_lookup[type].typesize
-
 static inline IDirect3DVertexDeclaration9Impl *impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
 {
     return CONTAINING_RECORD(iface, IDirect3DVertexDeclaration9Impl, IDirect3DVertexDeclaration9_iface);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -192,7 +189,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT vdecl_convert_fvf(
         elements[idx].Stream = 0;
         elements[idx].Method = D3DDECLMETHOD_DEFAULT;
         elements[idx].Offset = offset;
-        offset += D3D_DECL_SIZE(elements[idx].Type) * D3D_DECL_TYPESIZE(elements[idx].Type);
+        offset += d3d_dtype_lookup[elements[idx].Type].component_count
+                * d3d_dtype_lookup[elements[idx].Type].component_size;
     }
 
     *ppVertexElements = elements;




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85072">
    <title>Henri Verbeet : d3d9: Get rid of the d3dType field fromd3d_dtype_lookup.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85072</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 51024a078f4747f05527310d034f0f47c4e3cdd3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=51024a078f4747f05527310d034f0f47c4e3cdd3

Author: Henri Verbeet &amp;lt;hverbeet&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 16:10:27 2012 +0200

d3d9: Get rid of the d3dType field from d3d_dtype_lookup.

---

 dlls/d3d9/vertexdeclaration.c |   36 ++++++++++++++++++------------------
 1 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/dlls/d3d9/vertexdeclaration.c b/dlls/d3d9/vertexdeclaration.c
index 421f099..679f010 100644
--- a/dlls/d3d9/vertexdeclaration.c
+++ b/dlls/d3d9/vertexdeclaration.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,30 +26,30 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
 
 static const struct
 {
-    D3DDECLTYPE d3dType;
     enum wined3d_format_id format;
     int         size;
     int         typesize;
 }
 d3d_dtype_lookup[] =
 {
-   {D3DDECLTYPE_FLOAT1,    WINED3DFMT_R32_FLOAT,          1, sizeof(float)},
-   {D3DDECLTYPE_FLOAT2,    WINED3DFMT_R32G32_FLOAT,       2, sizeof(float)},
-   {D3DDECLTYPE_FLOAT3,    WINED3DFMT_R32G32B32_FLOAT,    3, sizeof(float)},
-   {D3DDECLTYPE_FLOAT4,    WINED3DFMT_R32G32B32A32_FLOAT, 4, sizeof(float)},
-   {D3DDECLTYPE_D3DCOLOR,  WINED3DFMT_B8G8R8A8_UNORM,     4, sizeof(BYTE)},
-   {D3DDECLTYPE_UBYTE4,    WINED3DFMT_R8G8B8A8_UINT,      4, sizeof(BYTE)},
-   {D3DDECLTYPE_SHORT2,    WINED3DFMT_R16G16_SINT,        2, sizeof(short int)},
-   {D3DDECLTYPE_SHORT4,    WINED3DFMT_R16G16B16A16_SINT,  4, sizeof(short int)},
-   {D3DDECLTYPE_UBYTE4N,   WINED3DFMT_R8G8B8A8_UNORM,     4, sizeof(BYTE)},
-   {D3DDECLTYPE_SHORT2N,   WINED3DFMT_R16G16_SNORM,       2, sizeof(short int)},
-   {D3DDECLTYPE_SHORT4N,   WINED3DFMT_R16G16B16A16_SNORM, 4, sizeof(short int)},
-   {D3DDECLTYPE_USHORT2N,  WINED3DFMT_R16G16_UNORM,       2, sizeof(short int)},
-   {D3DDECLTYPE_USHORT4N,  WINED3DFMT_R16G16B16A16_UNORM, 4, sizeof(short int)},
-   {D3DDECLTYPE_UDEC3,     WINED3DFMT_R10G10B10A2_UINT,   3, sizeof(short int)},
-   {D3DDECLTYPE_DEC3N,     WINED3DFMT_R10G10B10A2_SNORM,  3, sizeof(short int)},
-   {D3DDECLTYPE_FLOAT16_2, WINED3DFMT_R16G16_FLOAT,       2, sizeof(short int)},
-   {D3DDECLTYPE_FLOAT16_4, WINED3DFMT_R16G16B16A16_FLOAT, 4, sizeof(short int)}};
+    /* D3DDECLTYPE_FLOAT1    */ {WINED3DFMT_R32_FLOAT,          1, sizeof(float)},
+    /* D3DDECLTYPE_FLOAT2    */ {WINED3DFMT_R32G32_FLOAT,       2, sizeof(float)},
+    /* D3DDECLTYPE_FLOAT3    */ {WINED3DFMT_R32G32B32_FLOAT,    3, sizeof(float)},
+    /* D3DDECLTYPE_FLOAT4    */ {WINED3DFMT_R32G32B32A32_FLOAT, 4, sizeof(float)},
+    /* D3DDECLTYPE_D3DCOLOR  */ {WINED3DFMT_B8G8R8A8_UNORM,     4, sizeof(BYTE)},
+    /* D3DDECLTYPE_UBYTE4    */ {WINED3DFMT_R8G8B8A8_UINT,      4, sizeof(BYTE)},
+    /* D3DDECLTYPE_SHORT2    */ {WINED3DFMT_R16G16_SINT,        2, sizeof(short int)},
+    /* D3DDECLTYPE_SHORT4    */ {WINED3DFMT_R16G16B16A16_SINT,  4, sizeof(short int)},
+    /* D3DDECLTYPE_UBYTE4N   */ {WINED3DFMT_R8G8B8A8_UNORM,     4, sizeof(BYTE)},
+    /* D3DDECLTYPE_SHORT2N   */ {WINED3DFMT_R16G16_SNORM,       2, sizeof(short int)},
+    /* D3DDECLTYPE_SHORT4N   */ {WINED3DFMT_R16G16B16A16_SNORM, 4, sizeof(short int)},
+    /* D3DDECLTYPE_USHORT2N  */ {WINED3DFMT_R16G16_UNORM,       2, sizeof(short int)},
+    /* D3DDECLTYPE_USHORT4N  */ {WINED3DFMT_R16G16B16A16_UNORM, 4, sizeof(short int)},
+    /* D3DDECLTYPE_UDEC3     */ {WINED3DFMT_R10G10B10A2_UINT,   3, sizeof(short int)},
+    /* D3DDECLTYPE_DEC3N     */ {WINED3DFMT_R10G10B10A2_SNORM,  3, sizeof(short int)},
+    /* D3DDECLTYPE_FLOAT16_2 */ {WINED3DFMT_R16G16_FLOAT,       2, sizeof(short int)},
+    /* D3DDECLTYPE_FLOAT16_4 */ {WINED3DFMT_R16G16B16A16_FLOAT, 4, sizeof(short int)}
+};
 
 #define D3D_DECL_SIZE(type)          d3d_dtype_lookup[type].size
 #define D3D_DECL_TYPESIZE(type)      d3d_dtype_lookup[type].typesize




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85071">
    <title>Aric Stewart : usp10: Check bounds before checking value in array.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85071</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 1f4554d141774e948a29731db72ce5758ddad2f5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1f4554d141774e948a29731db72ce5758ddad2f5

Author: Aric Stewart &amp;lt;aric&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Fri May 25 07:55:19 2012 -0500

usp10: Check bounds before checking value in array.

---

 dlls/usp10/shape.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c
index a039504..d582fc7 100644
--- a/dlls/usp10/shape.c
+++ b/dlls/usp10/shape.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -628,9 +628,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void UpdateClustersFromGlyphProp(const int cGlyphs, const int cChars, WOR
                 if (pwLogClust[j] == i)
                 {
                     int k = j;
-                    while (!pGlyphProp[pwLogClust[k]].sva.fClusterStart &amp;amp;&amp;amp; k &amp;gt;= 0 &amp;amp;&amp;amp; k &amp;lt;cChars)
+                    while (k &amp;gt;= 0 &amp;amp;&amp;amp; k &amp;lt;cChars &amp;amp;&amp;amp; !pGlyphProp[pwLogClust[k]].sva.fClusterStart)
                         k-=1;
-                    if (pGlyphProp[pwLogClust[k]].sva.fClusterStart)
+                    if (k &amp;gt;= 0 &amp;amp;&amp;amp; k &amp;lt;cChars &amp;amp;&amp;amp; pGlyphProp[pwLogClust[k]].sva.fClusterStart)
                         pwLogClust[j] = pwLogClust[k];
                 }
             }




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85070">
    <title>Dmitry Timoshkov : windowscodecs: Add some tests for IFD metadatareader.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85070</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 30fc8a553dd6aff5c1315af29d490860029f39b1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=30fc8a553dd6aff5c1315af29d490860029f39b1

Author: Dmitry Timoshkov &amp;lt;dmitry&amp;lt; at &amp;gt;baikal.ru&amp;gt;
Date:   Fri May 25 19:14:05 2012 +0900

windowscodecs: Add some tests for IFD metadata reader.

---

 dlls/windowscodecs/tests/metadata.c |  154 +++++++++++++++++++++++++++++++++++
 1 files changed, 154 insertions(+), 0 deletions(-)

diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c
index 09e26ca..d4249f42 100644
--- a/dlls/windowscodecs/tests/metadata.c
+++ b/dlls/windowscodecs/tests/metadata.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 /*
  * Copyright 2011 Vincent Povirk for CodeWeavers
+ * Copyright 2012 Dmitry Timoshkov
  *
  * 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; -38,6 +39,47 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     } \
 } while (0)
 
+#define IFD_SHORT 3
+#define IFD_LONG 4
+#define IFD_RATIONAL 5
+
+#include "pshpack2.h"
+struct IFD_entry
+{
+    SHORT id;
+    SHORT type;
+    ULONG length;
+    LONG  value;
+};
+
+struct IFD_rational
+{
+    ULONG numerator;
+    ULONG denominator;
+};
+
+static const struct
+{
+    USHORT number_of_entries;
+    struct IFD_entry entry[6];
+    ULONG next_IFD;
+    struct IFD_rational rational;
+} IFD_data =
+{
+    6,
+    {
+        { 0xfe,  IFD_SHORT, 1, 1 },
+        { 0x100, IFD_LONG, 1, 222 },
+        { 0x101, IFD_LONG, 1, 333 },
+        { 0x102, IFD_SHORT, 1, 24 },
+        { 0x103, IFD_LONG, 1, 32773 },
+        { 0x11a, IFD_RATIONAL, 1, sizeof(USHORT) + sizeof(struct IFD_entry) * 6 + sizeof(ULONG) }
+    },
+    0,
+    { 300, 1 }
+};
+#include "poppack.h"
+
 static const char metadata_unknown[] = "lalala";
 
 static const char metadata_tEXt[] = {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -275,6 +317,117 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_metadata_tEXt(void)
     IWICMetadataReader_Release(reader);
 }
 
+static void test_metadata_IFD(void)
+{
+    static const struct test_data
+    {
+        ULONG type, id, value;
+    } td[6] =
+    {
+        { VT_UI2, 0xfe, 1 },
+        { VT_UI4, 0x100, 222 },
+        { VT_UI4, 0x101, 333 },
+        { VT_UI2, 0x102, 24 },
+        { VT_UI4, 0x103, 32773 },
+        { VT_UI8, 0x11a, 300 }
+    };
+    HRESULT hr;
+    IWICMetadataReader *reader;
+    IWICEnumMetadataItem *enumerator;
+    PROPVARIANT schema, id, value;
+    ULONG items_returned, count, i;
+    GUID format;
+
+    PropVariantInit(&amp;amp;schema);
+    PropVariantInit(&amp;amp;id);
+    PropVariantInit(&amp;amp;value);
+
+    hr = CoCreateInstance(&amp;amp;CLSID_WICIfdMetadataReader, NULL, CLSCTX_INPROC_SERVER,
+        &amp;amp;IID_IWICMetadataReader, (void**)&amp;amp;reader);
+    todo_wine ok(hr == S_OK, "CoCreateInstance error %#x\n", hr);
+    if (FAILED(hr)) return;
+
+    hr = IWICMetadataReader_GetCount(reader, NULL);
+    ok(hr == E_INVALIDARG, "GetCount error %#x\n", hr);
+
+    hr = IWICMetadataReader_GetCount(reader, &amp;amp;count);
+    ok(hr == S_OK, "GetCount error %#x\n", hr);
+    ok(count == 0, "unexpected count %u\n", count);
+
+    load_stream((IUnknown*)reader, (const char *)&amp;amp;IFD_data, sizeof(IFD_data));
+
+    hr = IWICMetadataReader_GetCount(reader, &amp;amp;count);
+    ok(hr == S_OK, "GetCount error %#x\n", hr);
+    ok(count == 6, "unexpected count %u\n", count);
+
+    hr = IWICMetadataReader_GetEnumerator(reader, NULL);
+    ok(hr == E_INVALIDARG, "GetEnumerator error %#x\n", hr);
+
+    hr = IWICMetadataReader_GetEnumerator(reader, &amp;amp;enumerator);
+    ok(hr == S_OK, "GetEnumerator error %#x\n", hr);
+
+    for (i = 0; i &amp;lt; count; i++)
+    {
+        hr = IWICEnumMetadataItem_Next(enumerator, 1, &amp;amp;schema, &amp;amp;id, &amp;amp;value, &amp;amp;items_returned);
+        ok(hr == S_OK, "Next error %#x\n", hr);
+        ok(items_returned == 1, "unexpected item count %u\n", items_returned);
+
+        ok(schema.vt == VT_EMPTY, "%u: unexpected vt: %u\n", i, schema.vt);
+        ok(id.vt == VT_UI2, "%u: unexpected vt: %u\n", i, id.vt);
+        ok(U(id).uiVal == td[i].id, "%u: unexpected id: %#x\n", i, U(id).uiVal);
+        ok(value.vt == td[i].type, "%u: unexpected vt: %u\n", i, value.vt);
+        ok(U(value).ulVal == td[i].value, "%u: unexpected id: %u\n", i, U(value).ulVal);
+
+        PropVariantClear(&amp;amp;schema);
+        PropVariantClear(&amp;amp;id);
+        PropVariantClear(&amp;amp;value);
+    }
+
+    hr = IWICEnumMetadataItem_Next(enumerator, 1, &amp;amp;schema, &amp;amp;id, &amp;amp;value, &amp;amp;items_returned);
+    ok(hr == S_FALSE, "Next should fail\n");
+    ok(items_returned == 0, "unexpected item count %u\n", items_returned);
+
+    IWICEnumMetadataItem_Release(enumerator);
+
+    hr = IWICMetadataReader_GetMetadataFormat(reader, &amp;amp;format);
+    ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+    ok(IsEqualGUID(&amp;amp;format, &amp;amp;GUID_MetadataFormatIfd), "unexpected format %s\n", debugstr_guid(&amp;amp;format));
+
+    hr = IWICMetadataReader_GetMetadataFormat(reader, NULL);
+    ok(hr == E_INVALIDARG, "GetMetadataFormat should fail\n");
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, 0, NULL, NULL, NULL);
+    ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, count - 1, NULL, NULL, NULL);
+    ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, 0, &amp;amp;schema, NULL, NULL);
+    ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+    ok(schema.vt == VT_EMPTY, "unexpected vt: %u\n", schema.vt);
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, count - 1, &amp;amp;schema, NULL, NULL);
+    ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+    ok(schema.vt == VT_EMPTY, "unexpected vt: %u\n", schema.vt);
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, 0, NULL, &amp;amp;id, NULL);
+    ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+    ok(id.vt == VT_UI2, "unexpected vt: %u\n", id.vt);
+    ok(U(id).uiVal == 0xfe, "unexpected id: %#x\n", U(id).uiVal);
+    PropVariantClear(&amp;amp;id);
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, 0, NULL, NULL, &amp;amp;value);
+    ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+    ok(value.vt == VT_UI2, "unexpected vt: %u\n", value.vt);
+    ok(U(value).ulVal == 1, "unexpected id: %u\n", U(value).ulVal);
+    PropVariantClear(&amp;amp;value);
+
+    hr = IWICMetadataReader_GetValueByIndex(reader, count, &amp;amp;schema, NULL, NULL);
+    ok(hr == E_INVALIDARG, "GetValueByIndex should fail\n");
+
+    IWICMetadataReader_Release(reader);
+}
+
 static void test_create_reader(void)
 {
     HRESULT hr;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -338,6 +491,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; START_TEST(metadata)
 
     test_metadata_unknown();
     test_metadata_tEXt();
+    test_metadata_IFD();
     test_create_reader();
 
     CoUninitialize();




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85069">
    <title>Dmitry Timoshkov : include: Add some ids for IFD metadata support.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85069</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 02dff390ee2541a98c5e4a21ee4641836b0a25eb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=02dff390ee2541a98c5e4a21ee4641836b0a25eb

Author: Dmitry Timoshkov &amp;lt;dmitry&amp;lt; at &amp;gt;baikal.ru&amp;gt;
Date:   Fri May 25 19:13:44 2012 +0900

include: Add some ids for IFD metadata support.

---

 include/wincodecsdk.idl |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/include/wincodecsdk.idl b/include/wincodecsdk.idl
index a3af55a..5cca0a5 100644
--- a/include/wincodecsdk.idl
+++ b/include/wincodecsdk.idl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -37,11 +37,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef enum WICMetadataCreationOptions {
 
 cpp_quote("DEFINE_GUID(GUID_MetadataFormatUnknown, 0xa45e592f,0x9078,0x4a7c,0xad,0xb5,0x4e,0xdc,0x4f,0xd6,0x1b,0x1f);")
 cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x90,0x5d,0xdf,0x2b,0x38,0x23,0x8f,0xbc);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);")
 
 cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);")
 cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);")
 cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a,0xb6,0x70,0x89,0xe5,0xfa,0xb6,0xfd,0xa7);")
 cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);")
+cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);")
 
 [
     object,




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85068">
    <title>Dmitry Timoshkov : windowscodecs: Fix some typos in the tEXt metadatatest.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85068</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 9cc82dd644735a95b4aa8f9eaebac377f9fdc29d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9cc82dd644735a95b4aa8f9eaebac377f9fdc29d

Author: Dmitry Timoshkov &amp;lt;dmitry&amp;lt; at &amp;gt;baikal.ru&amp;gt;
Date:   Fri May 25 19:13:24 2012 +0900

windowscodecs: Fix some typos in the tEXt metadata test.

---

 dlls/windowscodecs/tests/metadata.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c
index 4cfc53c..09e26ca 100644
--- a/dlls/windowscodecs/tests/metadata.c
+++ b/dlls/windowscodecs/tests/metadata.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -205,8 +205,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_metadata_tEXt(void)
             ok(schema.vt == VT_EMPTY, "unexpected vt: %i\n", schema.vt);
             ok(id.vt == VT_LPSTR, "unexpected vt: %i\n", id.vt);
             ok(!strcmp(U(id).pszVal, "winetest"), "unexpected id: %s\n", U(id).pszVal);
-            ok(value.vt == VT_LPSTR, "unexpected vt: %i\n", id.vt);
-            ok(!strcmp(U(value).pszVal, "value"), "unexpected value: %s\n", U(id).pszVal);
+            ok(value.vt == VT_LPSTR, "unexpected vt: %i\n", value.vt);
+            ok(!strcmp(U(value).pszVal, "value"), "unexpected value: %s\n", U(value).pszVal);
 
             PropVariantClear(&amp;amp;schema);
             PropVariantClear(&amp;amp;id);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -240,7 +240,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_metadata_tEXt(void)
     hr = IWICMetadataReader_GetValue(reader, &amp;amp;schema, &amp;amp;id, &amp;amp;value);
     ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
     ok(value.vt == VT_LPSTR, "unexpected vt: %i\n", id.vt);
-    ok(!strcmp(U(value).pszVal, "value"), "unexpected value: %s\n", U(id).pszVal);
+    ok(!strcmp(U(value).pszVal, "value"), "unexpected value: %s\n", U(value).pszVal);
     PropVariantClear(&amp;amp;value);
 
     strcpy(U(id).pszVal, "test");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -265,8 +265,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_metadata_tEXt(void)
 
     hr = IWICMetadataReader_GetValueByIndex(reader, 0, NULL, NULL, &amp;amp;value);
     ok(hr == S_OK, "GetValueByIndex failed, hr=%x\n", hr);
-    ok(value.vt == VT_LPSTR, "unexpected vt: %i\n", id.vt);
-    ok(!strcmp(U(value).pszVal, "value"), "unexpected value: %s\n", U(id).pszVal);
+    ok(value.vt == VT_LPSTR, "unexpected vt: %i\n", value.vt);
+    ok(!strcmp(U(value).pszVal, "value"), "unexpected value: %s\n", U(value).pszVal);
     PropVariantClear(&amp;amp;value);
 
     hr = IWICMetadataReader_GetValueByIndex(reader, 1, NULL, NULL, NULL);




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85067">
    <title>Michael Stefaniuc : mshtml/tests: Remove stray ok() calls.</title>
    <link>http://comments.gmane.org/gmane.comp.emulators.wine.cvs/85067</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 630560ea8fb13c78f490fb269b80a5d36f5c15f1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=630560ea8fb13c78f490fb269b80a5d36f5c15f1

Author: Michael Stefaniuc &amp;lt;mstefani&amp;lt; at &amp;gt;redhat.de&amp;gt;
Date:   Fri May 25 11:36:16 2012 +0200

mshtml/tests: Remove stray ok() calls.

---

 dlls/mshtml/tests/style.c |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/dlls/mshtml/tests/style.c b/dlls/mshtml/tests/style.c
index 7b6d69d..262c4d1 100644
--- a/dlls/mshtml/tests/style.c
+++ b/dlls/mshtml/tests/style.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -662,7 +662,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_body_style(IHTMLStyle *style)
 
     hres = IHTMLStyle_put_textDecorationUnderline(style, VARIANT_TRUE);
     ok(hres == S_OK, "put_textDecorationUnderline failed: %08x\n", hres);
-    ok(b == VARIANT_FALSE, "textDecorationUnderline = %x\n", b);
 
     hres = IHTMLStyle_get_textDecorationUnderline(style, &amp;amp;b);
     ok(hres == S_OK, "get_textDecorationUnderline failed: %08x\n", hres);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -678,7 +677,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_body_style(IHTMLStyle *style)
 
     hres = IHTMLStyle_put_textDecorationLineThrough(style, VARIANT_TRUE);
     ok(hres == S_OK, "put_textDecorationLineThrough failed: %08x\n", hres);
-    ok(b == VARIANT_FALSE, "textDecorationLineThrough = %x\n", b);
 
     hres = IHTMLStyle_get_textDecorationLineThrough(style, &amp;amp;b);
     ok(hres == S_OK, "get_textDecorationLineThrough failed: %08x\n", hres);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -694,7 +692,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_body_style(IHTMLStyle *style)
 
     hres = IHTMLStyle_put_textDecorationNone(style, VARIANT_TRUE);
     ok(hres == S_OK, "put_textDecorationNone failed: %08x\n", hres);
-    ok(b == VARIANT_FALSE, "textDecorationNone = %x\n", b);
 
     hres = IHTMLStyle_get_textDecorationNone(style, &amp;amp;b);
     ok(hres == S_OK, "get_textDecorationNone failed: %08x\n", hres);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -710,7 +707,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_body_style(IHTMLStyle *style)
 
     hres = IHTMLStyle_put_textDecorationOverline(style, VARIANT_TRUE);
     ok(hres == S_OK, "put_textDecorationOverline failed: %08x\n", hres);
-    ok(b == VARIANT_FALSE, "textDecorationOverline = %x\n", b);
 
     hres = IHTMLStyle_get_textDecorationOverline(style, &amp;amp;b);
     ok(hres == S_OK, "get_textDecorationOverline failed: %08x\n", hres);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -726,7 +722,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_body_style(IHTMLStyle *style)
 
     hres = IHTMLStyle_put_textDecorationBlink(style, VARIANT_TRUE);
     ok(hres == S_OK, "put_textDecorationBlink failed: %08x\n", hres);
-    ok(b == VARIANT_FALSE, "textDecorationBlink = %x\n", b);
 
     hres = IHTMLStyle_get_textDecorationBlink(style, &amp;amp;b);
     ok(hres == S_OK, "get_textDecorationBlink failed: %08x\n", hres);




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-25T15:52:48</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.emulators.wine.cvs">
    <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.cvs</link>
  </textinput>
</rdf:RDF>

