<?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://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85021"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85020"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85019"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85018"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85017"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85016"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85015"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85014"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85013"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85012"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85011"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85010"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85009"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85008"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85007"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85006"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85005"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85004"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85003"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85002"/>
      </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.cvs/85021">
    <title>=?UTF-8?Q?Lauri=20Kentt=C3=A4=20?=: po: Update Swedish translation.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85021</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 6afed7a52b8b8ce1b984ae961a5958ff2becfe1f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6afed7a52b8b8ce1b984ae961a5958ff2becfe1f

Author: Lauri Kenttä &amp;lt;lauri.kentta&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Wed May 23 19:41:22 2012 +0300

po: Update Swedish translation.

---

 po/sv.po |   37 ++++++++++++++++++-------------------
 1 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/po/sv.po b/po/sv.po
index d7d9062..6507a49 100644
--- a/po/sv.po
+++ b/po/sv.po
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -157,21 +157,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid "Cancel"
 msgstr "Avbryt"
 
 #: appwiz.rc:112
-#, fuzzy
-#| msgid "Wine Gecko Installer"
 msgid "Wine Mono Installer"
-msgstr "Wine Gecko Installationsprogram"
+msgstr "Wine Mono Installationsprogram"
 
 #: appwiz.rc:115
-#, fuzzy
-#| msgid ""
-#| "Wine could not find a Gecko package which is needed for applications "
-#| "embedding HTML to work correctly. Wine can automatically download and "
-#| "install it for you.\n"
-#| "\n"
-#| "Note: it is recommended to use your distribution's packages instead. See "
-#| "&amp;lt;a href=\"http://wiki.winehq.org/Gecko\"&amp;gt;http://wiki.winehq.org/Gecko&amp;lt;/a&amp;gt; "
-#| "for details."
 msgid ""
 "Wine could not find a Mono package which is needed for .NET applications to "
 "work correctly. Wine can automatically download and install it for you.\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -180,13 +169,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid ""
 "href=\"http://wiki.winehq.org/Mono\"&amp;gt;http://wiki.winehq.org/Mono&amp;lt;/a&amp;gt; for "
 "details."
 msgstr ""
-"Wine kunde inte hitta paketet Gecko vilket krävs för att program med "
-"inbäddad HTML ska fungera korrekt. Wine kan hämta och installera det "
-"automatiskt åt dig.\n"
+"Wine kunde inte hitta paketet Mono vilket krävs för att .NET-program ska "
+"fungera korrekt. Wine kan hämta och installera det automatiskt åt dig.\n"
 "\n"
 "Obs: Du rekommenderas att använda din distributions paket i stället. Se &amp;lt;a "
-"href=\"http://wiki.winehq.org/Gecko\"&amp;gt;http://wiki.winehq.org/Gecko&amp;lt;/a&amp;gt; för "
-"mer information."
+"href=\"http://wiki.winehq.org/Mono\"&amp;gt;http://wiki.winehq.org/Mono&amp;lt;/a&amp;gt; för mer "
+"information."
 
 #: appwiz.rc:28
 msgid "Add/Remove Programs"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3058,7 +3046,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgstr ""
 
 #: gdi32.rc:41
 msgid "OEM/DOS"
-msgstr ""
+msgstr "OEM/DOS"
 
 #: gphoto2.rc:27
 msgid "Files on Camera"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -9963,7 +9951,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgstr "Plats:"
 
 #: hostname.rc:27
 msgid "Usage: hostname\n"
-msgstr ""
+msgstr "Användning: hostname\n"
 
 #: hostname.rc:28
 msgid "Error: Invalid option '%c'.\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -10062,6 +10050,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid ""
 "Displays the list of running services if 'service' is omitted. Otherwise "
 "'service' is the name of the service to start.\n"
 msgstr ""
+"Syntax för detta kommando är:\n"
+"\n"
+"NET START [tjänst]\n"
+"\n"
+"Visar listan på tjänster som redan körs om 'tjänst' utelämnas. Annars är "
+"'tjänst' namnet på tjänsten att starta.\n"
 
 #: net.rc:29
 msgid ""
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -10071,6 +10065,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid ""
 "\n"
 "Where 'service' is the name of the service to stop.\n"
 msgstr ""
+"Syntax för detta kommando är:\n"
+"\n"
+"NET STOP tjänst\n"
+"\n"
+"Där 'tjänst' är namnet på tjänsten att stoppa.\n"
 
 #: net.rc:30
 msgid "Stopping dependent service: %1\n"



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85020">
    <title>=?UTF-8?Q?Lauri=20Kentt=C3=A4=20?=: po: Update Finnish translation.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85020</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 786bcf99efa77446c60f00d7b46dc1a701a27ffa
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=786bcf99efa77446c60f00d7b46dc1a701a27ffa

Author: Lauri Kenttä &amp;lt;lauri.kentta&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Wed May 23 19:41:21 2012 +0300

po: Update Finnish translation.

---

 po/fi.po |   21 +++++----------------
 1 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/po/fi.po b/po/fi.po
index 2581565..f54e878 100644
--- a/po/fi.po
+++ b/po/fi.po
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -155,21 +155,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid "Cancel"
 msgstr "Peruuta"
 
 #: appwiz.rc:112
-#, fuzzy
-#| msgid "Wine Gecko Installer"
 msgid "Wine Mono Installer"
-msgstr "Wine Gecko -asennusohjelma"
+msgstr "Wine Mono -asennusohjelma"
 
 #: appwiz.rc:115
-#, fuzzy
-#| msgid ""
-#| "Wine could not find a Gecko package which is needed for applications "
-#| "embedding HTML to work correctly. Wine can automatically download and "
-#| "install it for you.\n"
-#| "\n"
-#| "Note: it is recommended to use your distribution's packages instead. See "
-#| "&amp;lt;a href=\"http://wiki.winehq.org/Gecko\"&amp;gt;http://wiki.winehq.org/Gecko&amp;lt;/a&amp;gt; "
-#| "for details."
 msgid ""
 "Wine could not find a Mono package which is needed for .NET applications to "
 "work correctly. Wine can automatically download and install it for you.\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -178,12 +167,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid ""
 "href=\"http://wiki.winehq.org/Mono\"&amp;gt;http://wiki.winehq.org/Mono&amp;lt;/a&amp;gt; for "
 "details."
 msgstr ""
-"Wine ei löytänyt Gecko-pakettia, jota tarvitaan HTML:ää sisältävien "
-"ohjelmien toimintaan. Wine voi ladata ja asentaa sen puolestasi.\n"
+"Wine ei löytänyt Mono-pakettia, jota tarvitaan, jotta .NET-sovellukset "
+"toimisivat oikein. Wine voi ladata ja asentaa sen puolestasi.\n"
 "\n"
 "Huomaa, että on suositeltavampaa käyttää oman jakelusi paketteja. "
-"Lisätietoja: &amp;lt;a href=\"http://wiki.winehq.org/Gecko\"&amp;gt;http://wiki.winehq.org/"
-"Gecko&amp;lt;/a&amp;gt;."
+"Lisätietoja: &amp;lt;a href=\"http://wiki.winehq.org/Mono\"&amp;gt;http://wiki.winehq.org/"
+"Mono&amp;lt;/a&amp;gt;."
 
 #: appwiz.rc:28
 msgid "Add/Remove Programs"



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85019">
    <title>Jacek Caban : wininet: Moved querying INTERNET_OPTION_REQUEST_FLAGSimplementation to HTTPREQ_QueryOption .</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85019</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: c0400560b54458335b77af847c46a65722199af3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c0400560b54458335b77af847c46a65722199af3

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Wed May 23 18:24:02 2012 +0200

wininet: Moved querying INTERNET_OPTION_REQUEST_FLAGS implementation to HTTPREQ_QueryOption.

---

 dlls/wininet/http.c           |   10 ++++++++++
 dlls/wininet/internet.c       |   20 ++++++++------------
 dlls/wininet/tests/internet.c |   16 ++++++++++++++++
 3 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index da10282..f26f45f 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2158,6 +2158,16 &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);
         *(DWORD *)buffer = req-&amp;gt;connect_timeout;
         return ERROR_SUCCESS;
+    case INTERNET_OPTION_REQUEST_FLAGS:
+        TRACE("INTERNET_OPTION_REQUEST_FLAGS\n");
+
+        if (*size &amp;lt; sizeof(DWORD))
+            return ERROR_INSUFFICIENT_BUFFER;
+
+        *(DWORD*)buffer = 4;
+        *size = sizeof(DWORD);
+
+        return ERROR_SUCCESS;
     }
 
     return INET_QueryOption(hdr, option, buffer, size, unicode);
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 66f25eb..a41225f 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1214,7 +1214,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HINTERNET WINAPI InternetConnectW(HINTERNET hInternet,
     HINTERNET rc = NULL;
     DWORD res = ERROR_SUCCESS;
 
-    TRACE("(%p, %s, %i, %s, %s, %i, %i, %lx)\n", hInternet, debugstr_w(lpszServerName),
+    TRACE("(%p, %s, %i, %s, %s, %i, %x, %lx)\n", hInternet, debugstr_w(lpszServerName),
   nServerPort, debugstr_w(lpszUserName), debugstr_w(lpszPassword),
   dwService, dwFlags, dwContext);
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2319,17 +2319,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL u
     /* FIXME: This function currently handles more options than it should. Options requiring
      * proper handles should be moved to proper functions */
     switch(option) {
-    case INTERNET_OPTION_REQUEST_FLAGS:
-        TRACE("INTERNET_OPTION_REQUEST_FLAGS\n");
-
-        if (*size &amp;lt; sizeof(ULONG))
-            return ERROR_INSUFFICIENT_BUFFER;
-
-        *(ULONG*)buffer = 4;
-        *size = sizeof(ULONG);
-
-        return ERROR_SUCCESS;
-
     case INTERNET_OPTION_HTTP_VERSION:
         if (*size &amp;lt; sizeof(HTTP_VERSION_INFO))
             return ERROR_INSUFFICIENT_BUFFER;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2471,7 +2460,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL u
 
         return res;
     }
+    case INTERNET_OPTION_REQUEST_FLAGS:
     case INTERNET_OPTION_USER_AGENT:
+        *size = 0;
         return ERROR_INTERNET_INCORRECT_HANDLE_TYPE;
     case INTERNET_OPTION_POLICY:
         return ERROR_INVALID_PARAMETER;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2509,6 +2500,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DWORD INET_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *
         *size = sizeof(DWORD_PTR);
         return ERROR_SUCCESS;
 
+    case INTERNET_OPTION_REQUEST_FLAGS:
+        WARN("INTERNET_OPTION_REQUEST_FLAGS\n");
+        *size = sizeof(DWORD);
+        return ERROR_INTERNET_INCORRECT_HANDLE_TYPE;
+
     case INTERNET_OPTION_MAX_CONNS_PER_SERVER:
     case INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER:
         WARN("Called on global option %u\n", option);
diff --git a/dlls/wininet/tests/internet.c b/dlls/wininet/tests/internet.c
index 8d91661..3567cc8 100644
--- a/dlls/wininet/tests/internet.c
+++ b/dlls/wininet/tests/internet.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -212,6 +212,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_InternetQueryOptionA(void)
   ok(retval == 0,"Got wrong return value %d\n",retval);
   ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
 
+  SetLastError(0xdeadbeef);
+  len = sizeof(DWORD);
+  retval = InternetQueryOptionA(hurl,INTERNET_OPTION_REQUEST_FLAGS,NULL,&amp;amp;len);
+  err = GetLastError();
+  ok(retval == 0,"Got wrong return value %d\n",retval);
+  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
+  ok(len == sizeof(DWORD), "len = %d\n", len);
+
+  SetLastError(0xdeadbeef);
+  len = sizeof(DWORD);
+  retval = InternetQueryOptionA(NULL,INTERNET_OPTION_REQUEST_FLAGS,NULL,&amp;amp;len);
+  err = GetLastError();
+  ok(retval == 0,"Got wrong return value %d\n",retval);
+  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
+  ok(!len, "len = %d\n", len);
+
   InternetCloseHandle(hurl);
   InternetCloseHandle(hinet);
 




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85018">
    <title>Vincent Povirk : propsys: Implement IPropertyStore::GetCount.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85018</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: d2d225f6a5228899a358f8ef05d77fbadd2d2385
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d2d225f6a5228899a358f8ef05d77fbadd2d2385

Author: Vincent Povirk &amp;lt;vincent&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Tue May 22 15:24:03 2012 -0500

propsys: Implement IPropertyStore::GetCount.

---

 dlls/propsys/propstore.c       |   21 +++++++++++++++++++--
 dlls/propsys/tests/propstore.c |   10 +++++-----
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/dlls/propsys/propstore.c b/dlls/propsys/propstore.c
index 88a6a7e..b89eb76 100644
--- a/dlls/propsys/propstore.c
+++ b/dlls/propsys/propstore.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -133,8 +133,24 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ULONG WINAPI PropertyStore_Release(IPropertyStoreCache *iface)
 static HRESULT WINAPI PropertyStore_GetCount(IPropertyStoreCache *iface,
     DWORD *cProps)
 {
-    FIXME("%p,%p: stub\n", iface, cProps);
-    return E_NOTIMPL;
+    PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+    propstore_format *format;
+
+    TRACE("%p,%p\n", iface, cProps);
+
+    if (!cProps)
+        return E_POINTER;
+
+    *cProps = 0;
+
+    EnterCriticalSection(&amp;amp;This-&amp;gt;lock);
+
+    LIST_FOR_EACH_ENTRY(format, &amp;amp;This-&amp;gt;formats, propstore_format, entry)
+        *cProps += format-&amp;gt;count;
+
+    LeaveCriticalSection(&amp;amp;This-&amp;gt;lock);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI PropertyStore_GetAt(IPropertyStoreCache *iface,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -201,6 +217,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT PropertyStore_LookupValue(PropertyStore *This, REFPROPERTYKEY key
 
         value-&amp;gt;pid = key-&amp;gt;pid;
         list_add_tail(&amp;amp;format-&amp;gt;values, &amp;amp;value-&amp;gt;entry);
+        format-&amp;gt;count++;
     }
 
     *result = value;
diff --git a/dlls/propsys/tests/propstore.c b/dlls/propsys/tests/propstore.c
index c24cb35..6ca67e9 100644
--- a/dlls/propsys/tests/propstore.c
+++ b/dlls/propsys/tests/propstore.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -55,11 +55,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_inmemorystore(void)
     }
 
     hr = IPropertyStoreCache_GetCount(propcache, NULL);
-    todo_wine ok(hr == E_POINTER, "GetCount failed, hr=%x\n", hr);
+    ok(hr == E_POINTER, "GetCount failed, hr=%x\n", hr);
 
     hr = IPropertyStoreCache_GetCount(propcache, &amp;amp;count);
-    todo_wine ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
-    todo_wine ok(count == 0, "GetCount returned %i, expected 0\n", count);
+    ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
+    ok(count == 0, "GetCount returned %i, expected 0\n", count);
 
     hr = IPropertyStoreCache_Commit(propcache);
     ok(hr == S_OK, "Commit failed, hr=%x\n", hr);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -91,8 +91,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_inmemorystore(void)
     ok(hr == S_OK, "SetValue failed, hr=%x\n", hr);
 
     hr = IPropertyStoreCache_GetCount(propcache, &amp;amp;count);
-    todo_wine ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
-    todo_wine ok(count == 1, "GetCount returned %i, expected 0\n", count);
+    ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
+    ok(count == 1, "GetCount returned %i, expected 0\n", count);
 
     memset(&amp;amp;pkey, 0, sizeof(pkey));
 




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85017">
    <title>Vincent Povirk : propsys: Implement IPropertyStore::SetValue andGetValue.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85017</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 51ab8139481a6617a44ca804e69911d77c86f92e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=51ab8139481a6617a44ca804e69911d77c86f92e

Author: Vincent Povirk &amp;lt;vincent&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Tue May 22 15:19:51 2012 -0500

propsys: Implement IPropertyStore::SetValue and GetValue.

---

 dlls/propsys/propstore.c       |  149 ++++++++++++++++++++++++++++++++++++++-
 dlls/propsys/tests/propstore.c |   14 ++--
 2 files changed, 152 insertions(+), 11 deletions(-)

diff --git a/dlls/propsys/propstore.c b/dlls/propsys/propstore.c
index 889b9a5..88a6a7e 100644
--- a/dlls/propsys/propstore.c
+++ b/dlls/propsys/propstore.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -30,14 +30,34 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "propsys.h"
 #include "wine/debug.h"
 #include "wine/unicode.h"
+#include "wine/list.h"
 
+#include "initguid.h"
 #include "propsys_private.h"
 
+DEFINE_GUID(FMTID_NamedProperties, 0xd5cdd505, 0x2e9c, 0x101b, 0x93, 0x97, 0x08, 0x00, 0x2b, 0x2c, 0xf9, 0xae);
+
 WINE_DEFAULT_DEBUG_CHANNEL(propsys);
 
 typedef struct {
+    struct list entry;
+    DWORD pid;
+    PROPVARIANT propvar;
+    PSC_STATE state;
+} propstore_value;
+
+typedef struct {
+    struct list entry;
+    GUID fmtid;
+    struct list values; /* list of struct propstore_value */
+    DWORD count;
+} propstore_format;
+
+typedef struct {
     IPropertyStoreCache IPropertyStoreCache_iface;
     LONG ref;
+    CRITICAL_SECTION lock;
+    struct list formats; /* list of struct propstore_format */
 } PropertyStore;
 
 static inline PropertyStore *impl_from_IPropertyStoreCache(IPropertyStoreCache *iface)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -79,6 +99,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ULONG WINAPI PropertyStore_AddRef(IPropertyStoreCache *iface)
     return ref;
 }
 
+static void destroy_format(propstore_format *format)
+{
+    propstore_value *cursor, *cursor2;
+    LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &amp;amp;format-&amp;gt;values, propstore_value, entry)
+    {
+        PropVariantClear(&amp;amp;cursor-&amp;gt;propvar);
+        HeapFree(GetProcessHeap(), 0, cursor);
+    }
+    HeapFree(GetProcessHeap(), 0, format);
+}
+
 static ULONG WINAPI PropertyStore_Release(IPropertyStoreCache *iface)
 {
     PropertyStore *This = impl_from_IPropertyStoreCache(iface);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -87,7 +118,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static ULONG WINAPI PropertyStore_Release(IPropertyStoreCache *iface)
     TRACE("(%p) refcount=%u\n", iface, ref);
 
     if (ref == 0)
+    {
+        propstore_format *cursor, *cursor2;
+        This-&amp;gt;lock.DebugInfo-&amp;gt;Spare[0] = 0;
+        DeleteCriticalSection(&amp;amp;This-&amp;gt;lock);
+        LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &amp;amp;This-&amp;gt;formats, propstore_format, entry)
+            destroy_format(cursor);
         HeapFree(GetProcessHeap(), 0, This);
+    }
 
     return ref;
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -106,18 +144,118 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI PropertyStore_GetAt(IPropertyStoreCache *iface,
     return E_NOTIMPL;
 }
 
+static HRESULT PropertyStore_LookupValue(PropertyStore *This, REFPROPERTYKEY key,
+    int insert, propstore_value **result)
+{
+    propstore_format *format=NULL, *format_candidate;
+    propstore_value *value=NULL, *value_candidate;
+
+    if (IsEqualGUID(&amp;amp;key-&amp;gt;fmtid, &amp;amp;FMTID_NamedProperties))
+    {
+        /* This is used in the property store format [MS-PROPSTORE]
+         * for named values and probably gets special treatment. */
+        ERR("don't know how to handle FMTID_NamedProperties\n");
+        return E_FAIL;
+    }
+
+    LIST_FOR_EACH_ENTRY(format_candidate, &amp;amp;This-&amp;gt;formats, propstore_format, entry)
+    {
+        if (IsEqualGUID(&amp;amp;format_candidate-&amp;gt;fmtid, &amp;amp;key-&amp;gt;fmtid))
+        {
+            format = format_candidate;
+            break;
+        }
+    }
+
+    if (!format)
+    {
+        if (!insert)
+            return TYPE_E_ELEMENTNOTFOUND;
+
+        format = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*format));
+        if (!format)
+            return E_OUTOFMEMORY;
+
+        format-&amp;gt;fmtid = key-&amp;gt;fmtid;
+        list_init(&amp;amp;format-&amp;gt;values);
+        list_add_tail(&amp;amp;This-&amp;gt;formats, &amp;amp;format-&amp;gt;entry);
+    }
+
+    LIST_FOR_EACH_ENTRY(value_candidate, &amp;amp;format-&amp;gt;values, propstore_value, entry)
+    {
+        if (value_candidate-&amp;gt;pid == key-&amp;gt;pid)
+        {
+            value = value_candidate;
+            break;
+        }
+    }
+
+    if (!value)
+    {
+        if (!insert)
+            return TYPE_E_ELEMENTNOTFOUND;
+
+        value = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*value));
+        if (!value)
+            return E_OUTOFMEMORY;
+
+        value-&amp;gt;pid = key-&amp;gt;pid;
+        list_add_tail(&amp;amp;format-&amp;gt;values, &amp;amp;value-&amp;gt;entry);
+    }
+
+    *result = value;
+
+    return S_OK;
+}
+
 static HRESULT WINAPI PropertyStore_GetValue(IPropertyStoreCache *iface,
     REFPROPERTYKEY key, PROPVARIANT *pv)
 {
-    FIXME("%p,%p,%p: stub\n", iface, key, pv);
-    return E_NOTIMPL;
+    PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+    propstore_value *value;
+    HRESULT hr;
+
+    TRACE("%p,%p,%p\n", iface, key, pv);
+
+    if (!pv)
+        return E_POINTER;
+
+    EnterCriticalSection(&amp;amp;This-&amp;gt;lock);
+
+    hr = PropertyStore_LookupValue(This, key, 0, &amp;amp;value);
+
+    if (SUCCEEDED(hr))
+        hr = PropVariantCopy(pv, &amp;amp;value-&amp;gt;propvar);
+    else if (hr == TYPE_E_ELEMENTNOTFOUND)
+    {
+        PropVariantInit(pv);
+        hr = S_OK;
+    }
+
+    LeaveCriticalSection(&amp;amp;This-&amp;gt;lock);
+
+    return hr;
 }
 
 static HRESULT WINAPI PropertyStore_SetValue(IPropertyStoreCache *iface,
     REFPROPERTYKEY key, REFPROPVARIANT propvar)
 {
-    FIXME("%p,%p,%p: stub\n", iface, key, propvar);
-    return E_NOTIMPL;
+    PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+    propstore_value *value;
+    HRESULT hr;
+
+    TRACE("%p,%p,%p\n", iface, key, propvar);
+
+    EnterCriticalSection(&amp;amp;This-&amp;gt;lock);
+
+    hr = PropertyStore_LookupValue(This, key, 1, &amp;amp;value);
+
+    if (SUCCEEDED(hr))
+        hr = PropVariantCopy(&amp;amp;value-&amp;gt;propvar, propvar);
+
+    LeaveCriticalSection(&amp;amp;This-&amp;gt;lock);
+
+    return hr;
 }
 
 static HRESULT WINAPI PropertyStore_Commit(IPropertyStoreCache *iface)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -185,6 +323,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT PropertyStore_CreateInstance(IUnknown *pUnkOuter, REFIID iid, void** ppv
 
     This-&amp;gt;IPropertyStoreCache_iface.lpVtbl = &amp;amp;PropertyStore_Vtbl;
     This-&amp;gt;ref = 1;
+    InitializeCriticalSection(&amp;amp;This-&amp;gt;lock);
+    This-&amp;gt;lock.DebugInfo-&amp;gt;Spare[0] = (DWORD_PTR)(__FILE__ ": PropertyStore.lock");
+    list_init(&amp;amp;This-&amp;gt;formats);
 
     ret = IPropertyStoreCache_QueryInterface(&amp;amp;This-&amp;gt;IPropertyStoreCache_iface, iid, ppv);
     IPropertyStoreCache_Release(&amp;amp;This-&amp;gt;IPropertyStoreCache_iface);
diff --git a/dlls/propsys/tests/propstore.c b/dlls/propsys/tests/propstore.c
index 1dc3085..c24cb35 100644
--- a/dlls/propsys/tests/propstore.c
+++ b/dlls/propsys/tests/propstore.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -88,7 +88,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_inmemorystore(void)
     }
 
     hr = IPropertyStoreCache_SetValue(propcache, &amp;amp;pkey, &amp;amp;propvar);
-    todo_wine ok(hr == S_OK, "SetValue failed, hr=%x\n", hr);
+    ok(hr == S_OK, "SetValue failed, hr=%x\n", hr);
 
     hr = IPropertyStoreCache_GetCount(propcache, &amp;amp;count);
     todo_wine ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -114,12 +114,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_inmemorystore(void)
     }
 
     hr = IPropertyStoreCache_GetValue(propcache, &amp;amp;pkey, NULL);
-    todo_wine ok(hr == E_POINTER, "GetValue failed, hr=%x\n", hr);
+    ok(hr == E_POINTER, "GetValue failed, hr=%x\n", hr);
 
     hr = IPropertyStoreCache_GetValue(propcache, &amp;amp;pkey, &amp;amp;propvar);
-    todo_wine ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
-    todo_wine ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
-    todo_wine ok(propvar.u.lVal == 12345, "expected 12345, got %d\n", propvar.u.lVal);
+    ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
+    ok(propvar.u.lVal == 12345, "expected 12345, got %d\n", propvar.u.lVal);
 
     pkey.fmtid = PKEY_WineTest;
     pkey.pid = 10;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -127,8 +127,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_inmemorystore(void)
     /* Get information for field that isn't set yet */
     propvar.vt = VT_I2;
     hr = IPropertyStoreCache_GetValue(propcache, &amp;amp;pkey, &amp;amp;propvar);
-    todo_wine ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
-    todo_wine ok(propvar.vt == VT_EMPTY, "expected VT_EMPTY, got %d\n", propvar.vt);
+    ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_EMPTY, "expected VT_EMPTY, got %d\n", propvar.vt);
 
     state = 0xdeadbeef;
     hr = IPropertyStoreCache_GetState(propcache, &amp;amp;pkey, &amp;amp;state);




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85016">
    <title>Vincent Povirk : propsys: Add stub InMemoryPropertyStoreimplementation.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85016</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: d8fcf75d0431c0055d5d547bd200b4611245ab38
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d8fcf75d0431c0055d5d547bd200b4611245ab38

Author: Vincent Povirk &amp;lt;vincent&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Tue May 22 14:18:11 2012 -0500

propsys: Add stub InMemoryPropertyStore implementation.

---

 dlls/propsys/Makefile.in       |    3 +-
 dlls/propsys/propstore.c       |  193 ++++++++++++++++++++++++++++++++++++++++
 dlls/propsys/propsys.spec      |    4 +-
 dlls/propsys/propsys_main.c    |   77 ++++++++++++++++
 dlls/propsys/propsys_private.h |   21 +++++
 dlls/propsys/tests/propstore.c |   76 ++++++++--------
 6 files changed, 333 insertions(+), 41 deletions(-)

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



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85015">
    <title>Vincent Povirk : propsys: Register CLSID_InMemoryPropertyStore.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85015</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: f37bbdc159fa525eb7ed74c3a11113f418f1b89a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f37bbdc159fa525eb7ed74c3a11113f418f1b89a

Author: Vincent Povirk &amp;lt;vincent&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Tue May 22 11:17:29 2012 -0500

propsys: Register CLSID_InMemoryPropertyStore.

---

 dlls/propsys/Makefile.in         |    2 ++
 dlls/propsys/propsys.spec        |    4 ++--
 dlls/propsys/propsys_classes.idl |   26 ++++++++++++++++++++++++++
 dlls/propsys/propsys_main.c      |   14 ++++++++++++++
 4 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/dlls/propsys/Makefile.in b/dlls/propsys/Makefile.in
index 1cbbe7c..10d2013 100644
--- a/dlls/propsys/Makefile.in
+++ b/dlls/propsys/Makefile.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -6,4 +6,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; C_SRCS = \
 propsys_main.c \
 propvar.c
 
+IDL_R_SRCS = propsys_classes.idl
+
 &amp;lt; at &amp;gt;MAKE_DLL_RULES&amp;lt; at &amp;gt;
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec
index 4b617ea..11b1397 100644
--- a/dlls/propsys/propsys.spec
+++ b/dlls/propsys/propsys.spec
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -25,8 +25,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 &amp;lt; at &amp;gt; stub ClearVariantArray
 &amp;lt; at &amp;gt; stub DllCanUnloadNow
 &amp;lt; at &amp;gt; stub DllGetClassObject
-&amp;lt; at &amp;gt; stub DllRegisterServer
-&amp;lt; at &amp;gt; stub DllUnregisterServer
+&amp;lt; at &amp;gt; stdcall -private DllRegisterServer()
+&amp;lt; at &amp;gt; stdcall -private DllUnregisterServer()
 &amp;lt; at &amp;gt; stub InitPropVariantFromBooleanVector
 &amp;lt; at &amp;gt; stdcall InitPropVariantFromBuffer(ptr long ptr)
 &amp;lt; at &amp;gt; stub InitPropVariantFromCLSID
diff --git a/dlls/propsys/propsys_classes.idl b/dlls/propsys/propsys_classes.idl
new file mode 100644
index 0000000..28c23f2
--- /dev/null
+++ b/dlls/propsys/propsys_classes.idl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * Coclasses for propsys
+ *
+ * Copyright 2012 Vincent Povirk for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+[
+    helpstring("Packed Property Storage Object"),
+    threading(both),
+    uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)
+]
+coclass InMemoryPropertyStore { interface IPropertyStoreCache; }
diff --git a/dlls/propsys/propsys_main.c b/dlls/propsys/propsys_main.c
index 3c2c3ed..264b3aa 100644
--- a/dlls/propsys/propsys_main.c
+++ b/dlls/propsys/propsys_main.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -26,12 +26,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "windef.h"
 #include "winbase.h"
 #include "objbase.h"
+#include "rpcproxy.h"
 #include "propsys.h"
 #include "wine/debug.h"
 #include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(propsys);
 
+static HINSTANCE propsys_hInstance;
+
 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 {
     TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -41,6 +44,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
         case DLL_WINE_PREATTACH:
             return FALSE;    /* prefer native version */
         case DLL_PROCESS_ATTACH:
+            propsys_hInstance = hinstDLL;
             DisableThreadLibraryCalls(hinstDLL);
             break;
         case DLL_PROCESS_DETACH:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -52,6 +56,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
     return TRUE;
 }
 
+HRESULT WINAPI DllRegisterServer(void)
+{
+    return __wine_register_resources( propsys_hInstance );
+}
+
+HRESULT WINAPI DllUnregisterServer(void)
+{
+    return __wine_unregister_resources( propsys_hInstance );
+}
+
 HRESULT WINAPI PSRegisterPropertySchema(PCWSTR path)
 {
     FIXME("%s stub\n", debugstr_w(path));




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85014">
    <title>Vincent Povirk : propsys: Add tests for CLSID_InMemoryPropertyStore.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85014</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 0e8b9b12114a7e89c778655db414e0cbbb8b4998
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0e8b9b12114a7e89c778655db414e0cbbb8b4998

Author: Vincent Povirk &amp;lt;vincent&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Tue May 22 10:46:57 2012 -0500

propsys: Add tests for CLSID_InMemoryPropertyStore.

---

 dlls/propsys/tests/Makefile.in |    1 +
 dlls/propsys/tests/propstore.c |  206 ++++++++++++++++++++++++++++++++++++++++
 dlls/propsys/tests/propsys.c   |    2 +-
 3 files changed, 208 insertions(+), 1 deletions(-)

diff --git a/dlls/propsys/tests/Makefile.in b/dlls/propsys/tests/Makefile.in
index 312a3a9..cb502fd 100644
--- a/dlls/propsys/tests/Makefile.in
+++ b/dlls/propsys/tests/Makefile.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2,6 +2,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; TESTDLL   = propsys.dll
 IMPORTS   = propsys ole32 oleaut32
 
 C_SRCS = \
+propstore.c \
 propsys.c
 
 &amp;lt; at &amp;gt;MAKE_TEST_RULES&amp;lt; at &amp;gt;
diff --git a/dlls/propsys/tests/propstore.c b/dlls/propsys/tests/propstore.c
new file mode 100644
index 0000000..e8bedc6
--- /dev/null
+++ b/dlls/propsys/tests/propstore.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,206 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * Unit tests for IPropertyStore and related interfaces
+ *
+ * Copyright 2012 Vincent Povirk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include &amp;lt;stdarg.h&amp;gt;
+#include &amp;lt;stdio.h&amp;gt;
+
+#define NONAMELESSUNION
+
+#include "windef.h"
+#include "winbase.h"
+#include "objbase.h"
+#include "propsys.h"
+#include "wine/test.h"
+
+#include "initguid.h"
+
+DEFINE_GUID(PKEY_WineTest, 0x7b317433, 0xdfa3, 0x4c44, 0xad, 0x3e, 0x2f, 0x80, 0x4b, 0x90, 0xdb, 0xf4);
+
+static void test_inmemorystore(void)
+{
+    IPropertyStoreCache *propcache;
+    HRESULT hr;
+    PROPERTYKEY pkey;
+    PROPVARIANT propvar;
+    DWORD count;
+    PSC_STATE state;
+
+    hr = CoCreateInstance(&amp;amp;CLSID_InMemoryPropertyStore, NULL, CLSCTX_INPROC_SERVER,
+        &amp;amp;IID_IPropertyStoreCache, (void**)&amp;amp;propcache);
+    todo_wine ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr);
+
+    if (FAILED(hr))
+    {
+        skip("CLSID_InMemoryPropertyStore not supported\n");
+        return;
+    }
+
+    hr = IPropertyStoreCache_GetCount(propcache, NULL);
+    ok(hr == E_POINTER, "GetCount failed, hr=%x\n", hr);
+
+    hr = IPropertyStoreCache_GetCount(propcache, &amp;amp;count);
+    ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
+    ok(count == 0, "GetCount returned %i, expected 0\n", count);
+
+    hr = IPropertyStoreCache_Commit(propcache);
+    ok(hr == S_OK, "Commit failed, hr=%x\n", hr);
+
+    hr = IPropertyStoreCache_Commit(propcache);
+    ok(hr == S_OK, "Commit failed, hr=%x\n", hr);
+
+    hr = IPropertyStoreCache_GetAt(propcache, 0, &amp;amp;pkey);
+    ok(hr == E_INVALIDARG, "GetAt failed, hr=%x\n", hr);
+
+    pkey.fmtid = PKEY_WineTest;
+    pkey.pid = 4;
+
+    memset(&amp;amp;propvar, 0, sizeof(propvar));
+    propvar.vt = VT_I4;
+    propvar.u.lVal = 12345;
+
+    if (0)
+    {
+        /* Crashes on Windows 7 */
+        hr = IPropertyStoreCache_SetValue(propcache, NULL, &amp;amp;propvar);
+        ok(hr == E_POINTER, "SetValue failed, hr=%x\n", hr);
+
+        hr = IPropertyStoreCache_SetValue(propcache, &amp;amp;pkey, NULL);
+        ok(hr == E_POINTER, "SetValue failed, hr=%x\n", hr);
+    }
+
+    hr = IPropertyStoreCache_SetValue(propcache, &amp;amp;pkey, &amp;amp;propvar);
+    ok(hr == S_OK, "SetValue failed, hr=%x\n", hr);
+
+    hr = IPropertyStoreCache_GetCount(propcache, &amp;amp;count);
+    ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
+    ok(count == 1, "GetCount returned %i, expected 0\n", count);
+
+    memset(&amp;amp;pkey, 0, sizeof(pkey));
+
+    hr = IPropertyStoreCache_GetAt(propcache, 0, &amp;amp;pkey);
+    ok(hr == S_OK, "GetAt failed, hr=%x\n", hr);
+    ok(IsEqualGUID(&amp;amp;pkey.fmtid, &amp;amp;PKEY_WineTest), "got wrong pkey\n");
+    ok(pkey.pid == 4, "got pid of %i, expected 4\n", pkey.pid);
+
+    pkey.fmtid = PKEY_WineTest;
+    pkey.pid = 4;
+
+    memset(&amp;amp;propvar, 0, sizeof(propvar));
+
+    if (0)
+    {
+        /* Crashes on Windows 7 */
+        hr = IPropertyStoreCache_GetValue(propcache, NULL, &amp;amp;propvar);
+        ok(hr == E_POINTER, "GetValue failed, hr=%x\n", hr);
+    }
+
+    hr = IPropertyStoreCache_GetValue(propcache, &amp;amp;pkey, NULL);
+    ok(hr == E_POINTER, "GetValue failed, hr=%x\n", hr);
+
+    hr = IPropertyStoreCache_GetValue(propcache, &amp;amp;pkey, &amp;amp;propvar);
+    ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
+    ok(propvar.u.lVal == 12345, "expected 12345, got %d\n", propvar.u.lVal);
+
+    pkey.fmtid = PKEY_WineTest;
+    pkey.pid = 10;
+
+    /* Get information for field that isn't set yet */
+    propvar.vt = VT_I2;
+    hr = IPropertyStoreCache_GetValue(propcache, &amp;amp;pkey, &amp;amp;propvar);
+    ok(hr == S_OK, "GetValue failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_EMPTY, "expected VT_EMPTY, got %d\n", propvar.vt);
+
+    state = 0xdeadbeef;
+    hr = IPropertyStoreCache_GetState(propcache, &amp;amp;pkey, &amp;amp;state);
+    ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetState failed, hr=%x\n", hr);
+    ok(state == PSC_NORMAL, "expected PSC_NORMAL, got %d\n", state);
+
+    propvar.vt = VT_I2;
+    state = 0xdeadbeef;
+    hr = IPropertyStoreCache_GetValueAndState(propcache, &amp;amp;pkey, &amp;amp;propvar, &amp;amp;state);
+    ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetValueAndState failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_EMPTY, "expected VT_EMPTY, got %d\n", propvar.vt);
+    ok(state == PSC_NORMAL, "expected PSC_NORMAL, got %d\n", state);
+
+    /* Set state on an unset field */
+    hr = IPropertyStoreCache_SetState(propcache, &amp;amp;pkey, PSC_NORMAL);
+    ok(hr == TYPE_E_ELEMENTNOTFOUND, "SetState failed, hr=%x\n", hr);
+
+    /* Manipulate state on already set field */
+    pkey.fmtid = PKEY_WineTest;
+    pkey.pid = 4;
+
+    state = 0xdeadbeef;
+    hr = IPropertyStoreCache_GetState(propcache, &amp;amp;pkey, &amp;amp;state);
+    ok(hr == S_OK, "GetState failed, hr=%x\n", hr);
+    ok(state == PSC_NORMAL, "expected PSC_NORMAL, got %d\n", state);
+
+    hr = IPropertyStoreCache_SetState(propcache, &amp;amp;pkey, 10);
+    ok(hr == S_OK, "SetState failed, hr=%x\n", hr);
+
+    state = 0xdeadbeef;
+    hr = IPropertyStoreCache_GetState(propcache, &amp;amp;pkey, &amp;amp;state);
+    ok(hr == S_OK, "GetState failed, hr=%x\n", hr);
+    ok(state == 10, "expected 10, got %d\n", state);
+
+    propvar.vt = VT_I4;
+    propvar.u.lVal = 12346;
+    hr = IPropertyStoreCache_SetValueAndState(propcache, &amp;amp;pkey, &amp;amp;propvar, 5);
+    ok(hr == S_OK, "SetValueAndState failed, hr=%x\n", hr);
+
+    memset(&amp;amp;propvar, 0, sizeof(propvar));
+    state = 0xdeadbeef;
+    hr = IPropertyStoreCache_GetValueAndState(propcache, &amp;amp;pkey, &amp;amp;propvar, &amp;amp;state);
+    ok(hr == S_OK, "GetValueAndState failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
+    ok(propvar.u.lVal == 12346, "expected 12346, got %d\n", propvar.vt);
+    ok(state == 5, "expected 5, got %d\n", state);
+
+    /* Set new field with state */
+    pkey.fmtid = PKEY_WineTest;
+    pkey.pid = 8;
+
+    propvar.vt = VT_I4;
+    propvar.u.lVal = 12347;
+    hr = IPropertyStoreCache_SetValueAndState(propcache, &amp;amp;pkey, &amp;amp;propvar, PSC_DIRTY);
+    ok(hr == S_OK, "SetValueAndState failed, hr=%x\n", hr);
+
+    memset(&amp;amp;propvar, 0, sizeof(propvar));
+    state = 0xdeadbeef;
+    hr = IPropertyStoreCache_GetValueAndState(propcache, &amp;amp;pkey, &amp;amp;propvar, &amp;amp;state);
+    ok(hr == S_OK, "GetValueAndState failed, hr=%x\n", hr);
+    ok(propvar.vt == VT_I4, "expected VT_I4, got %d\n", propvar.vt);
+    ok(propvar.u.lVal == 12347, "expected 12347, got %d\n", propvar.vt);
+    ok(state == PSC_DIRTY, "expected PSC_DIRTY, got %d\n", state);
+
+    IPropertyStoreCache_Release(propcache);
+}
+
+START_TEST(propstore)
+{
+    CoInitialize(NULL);
+
+    test_inmemorystore();
+
+    CoUninitialize();
+}
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c
index 850d3d2..9641d05 100644
--- a/dlls/propsys/tests/propsys.c
+++ b/dlls/propsys/tests/propsys.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -29,9 +29,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include "windef.h"
 #include "winbase.h"
 #include "objbase.h"
+#include "initguid.h"
 #include "propsys.h"
 #include "propvarutil.h"
-#include "initguid.h"
 #include "wine/test.h"
 
 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85013">
    <title>Francois Gouget : d3d8: Add a trailing '\n' to an ERR() message.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85013</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: e06ed82e94871b93322b7aa478753698f3dea739
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e06ed82e94871b93322b7aa478753698f3dea739

Author: Francois Gouget &amp;lt;fgouget&amp;lt; at &amp;gt;free.fr&amp;gt;
Date:   Wed May 23 15:41:14 2012 +0200

d3d8: Add a trailing '\n' to an ERR() message.

---

 dlls/d3d8/device.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 1ec011b..48e4d65 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2372,7 +2372,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI d3d8_device_GetIndices(IDirect3DDevice8 *iface,
     else
     {
         if (FAILED(hr))
-            ERR("Failed to get wined3d index buffer, hr %#x.", hr);
+            ERR("Failed to get wined3d index buffer, hr %#x.\n", hr);
         *buffer = NULL;
     }
     wined3d_mutex_unlock();




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85012">
    <title>Francois Gouget : vbscript: Add support for integer values inconditional jumps.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85012</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: d090c39470b57fa931299c7c0b0b8027a8f181fd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d090c39470b57fa931299c7c0b0b8027a8f181fd

Author: Francois Gouget &amp;lt;fgouget&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Wed May 23 15:36:04 2012 +0200

vbscript: Add support for integer values in conditional jumps.

---

 dlls/vbscript/interp.c       |   52 +++++++++++++++++++++++++++--------------
 dlls/vbscript/tests/lang.vbs |    8 ++++++
 2 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 67e1070..3f3e9c8 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -350,6 +350,34 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline void release_val(variant_val_t *v)
         VariantClear(v-&amp;gt;v);
 }
 
+static int stack_pop_bool(exec_ctx_t *ctx, BOOL *b)
+{
+    variant_val_t val;
+    HRESULT hres;
+
+    hres = stack_pop_val(ctx, &amp;amp;val);
+    if(FAILED(hres))
+        return hres;
+
+    switch (V_VT(val.v))
+    {
+    case VT_BOOL:
+        *b = V_BOOL(val.v);
+        break;
+    case VT_I2:
+        *b = V_I2(val.v);
+        break;
+    case VT_I4:
+        *b = V_I4(val.v);
+        break;
+    default:
+        FIXME("unsupported for %s\n", debugstr_variant(val.v));
+        release_val(&amp;amp;val);
+        return E_NOTIMPL;
+    }
+    return S_OK;
+}
+
 static HRESULT stack_pop_disp(exec_ctx_t *ctx, IDispatch **ret)
 {
     VARIANT *v = stack_pop(ctx);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -886,22 +914,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT interp_jmp(exec_ctx_t *ctx)
 static HRESULT interp_jmp_false(exec_ctx_t *ctx)
 {
     const unsigned arg = ctx-&amp;gt;instr-&amp;gt;arg1.uint;
-    variant_val_t val;
     HRESULT hres;
+    BOOL b;
 
     TRACE("%u\n", arg);
 
-    hres = stack_pop_val(ctx, &amp;amp;val);
+    hres = stack_pop_bool(ctx, &amp;amp;b);
     if(FAILED(hres))
         return hres;
 
-    if(V_VT(val.v) != VT_BOOL) {
-        FIXME("unsupported for %s\n", debugstr_variant(val.v));
-        release_val(&amp;amp;val);
-        return E_NOTIMPL;
-    }
-
-    if(V_BOOL(val.v))
+    if(b)
         ctx-&amp;gt;instr++;
     else
         instr_jmp(ctx, ctx-&amp;gt;instr-&amp;gt;arg1.uint);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -911,22 +933,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT interp_jmp_false(exec_ctx_t *ctx)
 static HRESULT interp_jmp_true(exec_ctx_t *ctx)
 {
     const unsigned arg = ctx-&amp;gt;instr-&amp;gt;arg1.uint;
-    variant_val_t val;
     HRESULT hres;
+    BOOL b;
 
     TRACE("%u\n", arg);
 
-    hres = stack_pop_val(ctx, &amp;amp;val);
+    hres = stack_pop_bool(ctx, &amp;amp;b);
     if(FAILED(hres))
         return hres;
 
-    if(V_VT(val.v) != VT_BOOL) {
-        FIXME("unsupported for %s\n", debugstr_variant(val.v));
-        release_val(&amp;amp;val);
-        return E_NOTIMPL;
-    }
-
-    if(V_BOOL(val.v))
+    if(b)
         instr_jmp(ctx, ctx-&amp;gt;instr-&amp;gt;arg1.uint);
     else
         ctx-&amp;gt;instr++;
diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index 1015e34..4900a52 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -260,6 +260,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; End If
 Call ok(x, "elseif not called?")
 
 x = false
+if 1 then x = true
+Call ok(x, "if 1 not run?")
+
+x = false
+if &amp;amp;h10000&amp;amp; then x = true
+Call ok(x, "if &amp;amp;h10000&amp;amp; not run?")
+
+x = false
 y = false
 while not (x and y)
     if x then




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85011">
    <title>Dmitry Timoshkov : ole32: Forward OleCreateLinkFromData andOleCreateStaticFromData to OleCreateFromData .</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85011</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: f0d309689c646f8149feb339e7092b0f3ef2fec5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f0d309689c646f8149feb339e7092b0f3ef2fec5

Author: Dmitry Timoshkov &amp;lt;dmitry&amp;lt; at &amp;gt;baikal.ru&amp;gt;
Date:   Wed May 23 16:50:31 2012 +0900

ole32: Forward OleCreateLinkFromData and OleCreateStaticFromData to OleCreateFromData.

---

 dlls/ole32/ole2impl.c  |   25 +++++++++++++++++++++++++
 dlls/ole32/ole2stubs.c |   26 --------------------------
 2 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/dlls/ole32/ole2impl.c b/dlls/ole32/ole2impl.c
index 79f2cb5..5d92fec 100644
--- a/dlls/ole32/ole2impl.c
+++ b/dlls/ole32/ole2impl.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -209,6 +209,31 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT WINAPI OleCreateFromData(LPDATAOBJECT data, REFIID iid,
                                fmt, NULL, NULL, client_site, stg, obj);
 }
 
+/******************************************************************************
+ *              OleCreateLinkFromData        [OLE32.&amp;lt; at &amp;gt;]
+ */
+HRESULT WINAPI OleCreateLinkFromData(IDataObject *data, REFIID iid,
+                                     DWORD renderopt, FORMATETC *fmt,
+                                     IOleClientSite *client_site, IStorage *stg,
+                                     void **obj)
+{
+    FIXME("%p,%s,%08x,%p,%p,%p,%p: semi-stub\n",
+          data, debugstr_guid(iid), renderopt, fmt, client_site, stg, obj);
+    return OleCreateFromData(data, iid, renderopt, fmt, client_site, stg, obj);
+}
+
+/******************************************************************************
+ *              OleCreateStaticFromData        [OLE32.&amp;lt; at &amp;gt;]
+ */
+HRESULT WINAPI OleCreateStaticFromData(IDataObject *data, REFIID iid,
+                                       DWORD renderopt, FORMATETC *fmt,
+                                       IOleClientSite *client_site, IStorage *stg,
+                                       void **obj)
+{
+    FIXME("%p,%s,%08x,%p,%p,%p,%p: semi-stub\n",
+          data, debugstr_guid(iid), renderopt, fmt, client_site, stg, obj);
+    return OleCreateFromData(data, iid, renderopt, fmt, client_site, stg, obj);
+}
 
 /******************************************************************************
  *              OleDuplicateData        [OLE32.&amp;lt; at &amp;gt;]
diff --git a/dlls/ole32/ole2stubs.c b/dlls/ole32/ole2stubs.c
index 16ac8d1..6988dfe 100644
--- a/dlls/ole32/ole2stubs.c
+++ b/dlls/ole32/ole2stubs.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -82,32 +82,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HGLOBAL WINAPI OleGetIconOfClass(REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseT
   return NULL;
 }
 
-
-/******************************************************************************
- *              OleCreateStaticFromData        [OLE32.&amp;lt; at &amp;gt;]
- */
-HRESULT     WINAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid,
-                DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
-                LPSTORAGE pStg, LPVOID* ppvObj)
-{
-  FIXME("(srcdata=%p, refiid=%s, renderopt=%x, formatetc=%p, client=%p, storage=%p, ppv=%p), stub!\n",
-        pSrcDataObj,debugstr_guid(iid),renderopt,pFormatEtc,pClientSite,pStg,ppvObj );
-  return E_NOTIMPL;
-}
-
-/******************************************************************************
- *              OleCreateLinkFromData        [OLE32.&amp;lt; at &amp;gt;]
- */
-
-HRESULT WINAPI  OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,
-                DWORD renderopt, LPFORMATETC pFormatEtc,
-                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
-                LPVOID* ppvObj)
-{
-  FIXME("(not shown), stub!\n");
-  return E_NOTIMPL;
-}
-
 /***********************************************************************
  *           OleRegEnumFormatEtc    [OLE32.&amp;lt; at &amp;gt;]
  */




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85010">
    <title>Dmitry Timoshkov : ole32: Query support also for static storageformats.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85010</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 83aa7eff6cbcea3ed257d73f7c7503d35cce57a8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=83aa7eff6cbcea3ed257d73f7c7503d35cce57a8

Author: Dmitry Timoshkov &amp;lt;dmitry&amp;lt; at &amp;gt;baikal.ru&amp;gt;
Date:   Wed May 23 16:50:12 2012 +0900

ole32: Query support also for static storage formats.

---

 dlls/ole32/ole2impl.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/dlls/ole32/ole2impl.c b/dlls/ole32/ole2impl.c
index e4eccc1..79f2cb5 100644
--- a/dlls/ole32/ole2impl.c
+++ b/dlls/ole32/ole2impl.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -102,6 +102,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static inline void init_fmtetc(FORMATETC *fmt, CLIPFORMAT cf, TYMED tymed)
  */
 static HRESULT get_storage(IDataObject *data, IStorage *stg, UINT *src_cf)
 {
+    static const UINT fmt_id[] = { CF_METAFILEPICT, CF_BITMAP, CF_DIB };
+    UINT i;
     HRESULT hr;
     FORMATETC fmt;
     STGMEDIUM med;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -132,6 +134,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT get_storage(IDataObject *data, IStorage *stg, UINT *src_cf)
         return hr;
     }
 
+    for (i = 0; i &amp;lt; sizeof(fmt_id)/sizeof(fmt_id[0]); i++)
+    {
+        init_fmtetc(&amp;amp;fmt, fmt_id[i], TYMED_ISTORAGE);
+        hr = IDataObject_QueryGetData(data, &amp;amp;fmt);
+        if(SUCCEEDED(hr))
+        {
+            *src_cf = fmt_id[i];
+            return hr;
+        }
+    }
+
     /* IPersistStorage */
     hr = IDataObject_QueryInterface(data, &amp;amp;IID_IPersistStorage, (void**)&amp;amp;persist);
     if(FAILED(hr)) return hr;




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85009">
    <title>Jacek Caban : axextend.idl: Added VIDEO_STREAM_CONFIG_CAPS andAUDIO_STREAM_CONFIG_CAPS declarations.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85009</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 1ee773bdaddf68891e4c534329d1877944b604dc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1ee773bdaddf68891e4c534329d1877944b604dc

Author: Jacek Caban &amp;lt;jacek&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Wed May 23 14:37:36 2012 +0200

axextend.idl: Added VIDEO_STREAM_CONFIG_CAPS and AUDIO_STREAM_CONFIG_CAPS declarations.

---

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

diff --git a/include/axextend.idl b/include/axextend.idl
index 662d6e5..acc66a5 100644
--- a/include/axextend.idl
+++ b/include/axextend.idl
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -791,6 +791,43 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; interface IStreamBuilder : IUnknown
 ]
 interface IAMStreamConfig : IUnknown
 {
+    typedef struct _VIDEO_STREAM_CONFIG_CAPS {
+        GUID  guid;
+        ULONG VideoStandard;
+        SIZE  InputSize;
+        SIZE  MinCroppingSize;
+        SIZE  MaxCroppingSize;
+        int   CropGranularityX;
+        int   CropGranularityY;
+        int   CropAlignX;
+        int   CropAlignY;
+        SIZE  MinOutputSize;
+        SIZE  MaxOutputSize;
+        int   OutputGranularityX;
+        int   OutputGranularityY;
+        int   StretchTapsX;
+        int   StretchTapsY;
+        int   ShrinkTapsX;
+        int   ShrinkTapsY;
+        LONGLONG MinFrameInterval;
+        LONGLONG MaxFrameInterval;
+        LONG  MinBitsPerSecond;
+        LONG  MaxBitsPerSecond;
+    } VIDEO_STREAM_CONFIG_CAPS;
+
+    typedef struct _AUDIO_STREAM_CONFIG_CAPS {
+        GUID guid;
+        ULONG MinimumChannels;
+        ULONG MaximumChannels;
+        ULONG ChannelsGranularity;
+        ULONG MinimumBitsPerSample;
+        ULONG MaximumBitsPerSample;
+        ULONG BitsPerSampleGranularity;
+        ULONG MinimumSampleFrequency;
+        ULONG MaximumSampleFrequency;
+        ULONG SampleFrequencyGranularity;
+    } AUDIO_STREAM_CONFIG_CAPS;
+
     HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt);
     HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt);
     HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize);




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85008">
    <title>Hans Leidekker : fusion: Handle DWORD-sized blob indices when loadingthe public key.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85008</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 7c06862c52683dc230dd0f372eaf8fb6a5d3284a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7c06862c52683dc230dd0f372eaf8fb6a5d3284a

Author: Hans Leidekker &amp;lt;hans&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Wed May 23 13:05:14 2012 +0200

fusion: Handle DWORD-sized blob indices when loading the public key.

---

 dlls/fusion/assembly.c |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/dlls/fusion/assembly.c b/dlls/fusion/assembly.c
index 46c4db4..b655df1 100644
--- a/dlls/fusion/assembly.c
+++ b/dlls/fusion/assembly.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -825,23 +825,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; PEKIND assembly_get_architecture(ASSEMBLY *assembly)
     return peI386; /* x86 assembly */
 }
 
-static BYTE *assembly_get_blob(ASSEMBLY *assembly, WORD index, ULONG *size)
+static BYTE *assembly_get_blob(ASSEMBLY *assembly, DWORD index, ULONG *size)
 {
     return GetData(&amp;amp;assembly-&amp;gt;blobs[index], size);
 }
 
 HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
 {
-    ASSEMBLYTABLE *asmtbl;
     ULONG i, size;
     LONG offset;
-    BYTE *hashdata;
+    BYTE *hashdata, *pubkey, *ptr;
     HCRYPTPROV crypt;
     HCRYPTHASH hash;
-    BYTE *pubkey;
     BYTE tokbytes[BYTES_PER_TOKEN];
     HRESULT hr = E_FAIL;
     LPWSTR tok;
+    DWORD idx;
 
     *token = NULL;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -849,11 +848,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
     if (offset == -1)
         return E_FAIL;
 
-    asmtbl = assembly_data_offset(assembly, offset);
-    if (!asmtbl)
+    ptr = assembly_data_offset(assembly, offset);
+    if (!ptr)
         return E_FAIL;
 
-    pubkey = assembly_get_blob(assembly, asmtbl-&amp;gt;PublicKey, &amp;amp;size);
+    ptr += FIELD_OFFSET(ASSEMBLYTABLE, PublicKey);
+    if (assembly-&amp;gt;blobsz == sizeof(DWORD))
+        idx = *(DWORD *)ptr;
+    else
+        idx = *(WORD *)ptr;
+
+    pubkey = assembly_get_blob(assembly, idx, &amp;amp;size);
 
     if (!CryptAcquireContextA(&amp;amp;crypt, NULL, NULL, PROV_RSA_FULL,
                               CRYPT_VERIFYCONTEXT))




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85007">
    <title>Hans Leidekker : fusion: Add a "v4.0_" prefix to version 4. 0assembly directories.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85007</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 0b82e284013dafd20f14377dda38820f5645a9b4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0b82e284013dafd20f14377dda38820f5645a9b4

Author: Hans Leidekker &amp;lt;hans&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Wed May 23 09:14:58 2012 +0200

fusion: Add a "v4.0_" prefix to version 4.0 assembly directories.

---

 dlls/fusion/asmcache.c |   10 ++++++++--
 dlls/fusion/asmenum.c  |   29 ++++++++++++++++-------------
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/dlls/fusion/asmcache.c b/dlls/fusion/asmcache.c
index 93047d4..1cba6f6 100644
--- a/dlls/fusion/asmcache.c
+++ b/dlls/fusion/asmcache.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -375,7 +375,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
                                                          LPCWSTR pszManifestFilePath,
                                                          LPCFUSION_INSTALL_REFERENCE pRefData)
 {
-    static const WCHAR format[] = {'%','s','\\','%','s','\\','%','s','_','_','%','s','\\',0};
+    static const WCHAR format[] =
+        {'%','s','\\','%','s','\\','%','s','_','_','%','s','\\',0};
+    static const WCHAR format_v40[] =
+        {'%','s','\\','%','s','\\','v','4','.','0','_','%','s','_','_','%','s','\\',0};
     static const WCHAR ext_exe[] = {'.','e','x','e',0};
     static const WCHAR ext_dll[] = {'.','d','l','l',0};
     IAssemblyCacheImpl *cache = impl_from_IAssemblyCache(iface);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -430,7 +433,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
     architecture = assembly_get_architecture(assembly);
     get_assembly_directory(asmdir, MAX_PATH, clr_version, architecture);
 
-    sprintfW(path, format, asmdir, name, version, token);
+    if (!strcmp(clr_version, "v4.0.30319"))
+        sprintfW(path, format_v40, asmdir, name, version, token);
+    else
+        sprintfW(path, format, asmdir, name, version, token);
 
     create_full_path(path);
 
diff --git a/dlls/fusion/asmenum.c b/dlls/fusion/asmenum.c
index f4da88a..641ed2f 100644
--- a/dlls/fusion/asmenum.c
+++ b/dlls/fusion/asmenum.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -291,17 +291,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void insert_assembly(struct list *assemblies, ASMNAME *to_insert)
 static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
                                    int depth, LPWSTR path)
 {
-    WIN32_FIND_DATAW ffd;
-    WCHAR buf[MAX_PATH];
-    WCHAR disp[MAX_PATH];
-    WCHAR asmpath[MAX_PATH];
-    ASMNAME *asmname;
-    HANDLE hfind;
-    LPWSTR ptr;
-    HRESULT hr = S_OK;
-
-    static WCHAR parent[MAX_PATH];
-
     static const WCHAR dot[] = {'.',0};
     static const WCHAR dotdot[] = {'.','.',0};
     static const WCHAR search_fmt[] = {'%','s','\\','*',0};
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -311,6 +300,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
         'C','u','l','t','u','r','e','=','n','e','u','t','r','a','l',',',' ',
         'P','u','b','l','i','c','K','e','y','T','o','k','e','n','=','%','s',0};
     static const WCHAR ss_fmt[] = {'%','s','\\','%','s',0};
+    static const WCHAR v40[] = {'v','4','.','0','_'};
+    WIN32_FIND_DATAW ffd;
+    WCHAR buf[MAX_PATH], disp[MAX_PATH], asmpath[MAX_PATH];
+    static WCHAR parent[MAX_PATH];
+    ASMNAME *asmname;
+    HANDLE hfind;
+    WCHAR *ptr;
+    HRESULT hr = S_OK;
 
     if (name)
         parse_name(name, depth, path, buf);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -337,13 +334,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
         }
         else if (depth == 1)
         {
+            unsigned int prefix_len = sizeof(v40)/sizeof(WCHAR);
+            const WCHAR *token, *version = ffd.cFileName;
+
             sprintfW(asmpath, path_fmt, path, ffd.cFileName, parent);
 
             ptr = strstrW(ffd.cFileName, dblunder);
             *ptr = '\0';
-            ptr += 2;
+            token = ptr + 2;
+
+            if (strlenW(ffd.cFileName) &amp;gt;= prefix_len &amp;amp;&amp;amp;
+                !memcmp(ffd.cFileName, v40, sizeof(v40))) version += prefix_len;
 
-            sprintfW(disp, fmt, parent, ffd.cFileName, ptr);
+            sprintfW(disp, fmt, parent, version, token);
 
             asmname = HeapAlloc(GetProcessHeap(), 0, sizeof(ASMNAME));
             if (!asmname)




&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85006">
    <title>Nikolay Sivov : po: Update Russian translation.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85006</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 072c96565dd47c5bbbd5711934936ed000ba7ce3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=072c96565dd47c5bbbd5711934936ed000ba7ce3

Author: Nikolay Sivov &amp;lt;nsivov&amp;lt; at &amp;gt;codeweavers.com&amp;gt;
Date:   Wed May 23 09:05:38 2012 +0400

po: Update Russian translation.

---

 po/ru.po |   53 +++++------------------------------------------------
 1 files changed, 5 insertions(+), 48 deletions(-)

diff --git a/po/ru.po b/po/ru.po
index ed63276..01b747f 100644
--- a/po/ru.po
+++ b/po/ru.po
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -159,21 +159,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid "Cancel"
 msgstr "Отмена"
 
 #: appwiz.rc:112
-#, fuzzy
-#| msgid "Wine Gecko Installer"
 msgid "Wine Mono Installer"
-msgstr "Установка Wine Gecko"
+msgstr "Установка Wine Mono"
 
 #: appwiz.rc:115
-#, fuzzy
-#| msgid ""
-#| "Wine could not find a Gecko package which is needed for applications "
-#| "embedding HTML to work correctly. Wine can automatically download and "
-#| "install it for you.\n"
-#| "\n"
-#| "Note: it is recommended to use your distribution's packages instead. See "
-#| "&amp;lt;a href=\"http://wiki.winehq.org/Gecko\"&amp;gt;http://wiki.winehq.org/Gecko&amp;lt;/a&amp;gt; "
-#| "for details."
 msgid ""
 "Wine could not find a Mono package which is needed for .NET applications to "
 "work correctly. Wine can automatically download and install it for you.\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -182,13 +171,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid ""
 "href=\"http://wiki.winehq.org/Mono\"&amp;gt;http://wiki.winehq.org/Mono&amp;lt;/a&amp;gt; for "
 "details."
 msgstr ""
-"Wine не может найти пакет Gecko, который необходим для корректной работы "
-"приложений с поддержкой HTML. Wine может автоматически загрузить и "
-"установить его.\n"
+"Wine не может найти пакет Mono, который необходим для корректной работы .NET "
+"приложений. Wine может автоматически загрузить и установить его.\n"
 "\n"
 "Примечание: рекомендуется использовать пакет, предоставляемый вашим "
-"дистрибутивом. Посетите &amp;lt;a href=\"http://wiki.winehq.org/Gecko\"&amp;gt;http://wiki."
-"winehq.org/Gecko&amp;lt;/a&amp;gt; для получения более подробной информации."
+"дистрибутивом. Посетите &amp;lt;a href=\"http://wiki.winehq.org/Mono\"&amp;gt;http://wiki."
+"winehq.org/Mono&amp;lt;/a&amp;gt; для получения более подробной информации."
 
 #: appwiz.rc:28
 msgid "Add/Remove Programs"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -6679,37 +6667,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; msgid "insert disk %s"
 msgstr "вставьте диск %s"
 
 #: msi.rc:30
-#, fuzzy
-#| msgid ""
-#| "Windows Installer %s\n"
-#| "\n"
-#| "Usage:\n"
-#| "msiexec command {required parameter} [optional parameter]\n"
-#| "\n"
-#| "Install a product:\n"
-#| "\t/i {package|product_code} [property]\n"
-#| "\t/package {package|product_code} [property]\n"
-#| "\t/a package [property]\n"
-#| "Repair an installation:\n"
-#| "\t/f[p|o|e|d|c|a|u|m|s|v] {package|product_code}\n"
-#| "Uninstall a product:\n"
-#| "\t/uninstall {package|product_code} [property]\n"
-#| "\t/x {package|product_code} [property]\n"
-#| "Advertise a product:\n"
-#| "\t/j[u|m] package [/t transform] [/g languageid]\n"
-#| "Apply a patch:\n"
-#| "\t/p patch_package [property]\n"
-#| "\t/p patch_package /a package [property]\n"
-#| "Log and UI Modifiers for above commands:\n"
-#| "\t/l[*][i|w|e|a|r|u|c|m|o|p|v|][+|!] logfile\n"
-#| "\t/q{|n|b|r|f|n+|b+|b-}\n"
-#| "Register MSI Service:\n"
-#| "\t/y\n"
-#| "Unregister MSI Service:\n"
-#| "\t/z\n"
-#| "Display this help:\n"
-#| "\t/help\n"
-#| "\t/?\n"
 msgid ""
 "Windows Installer %s\n"
 "\n"



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85005">
    <title>=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Add support for luminancepixel formats.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85005</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: ada51526503db123dec4207d8a4750c0d3d06ed5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ada51526503db123dec4207d8a4750c0d3d06ed5

Author: Józef Kucia &amp;lt;joseph.kucia&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue May 22 22:35:58 2012 +0200

d3dx9: Add support for luminance pixel formats.

---

 dlls/d3dx9_36/tests/surface.c |   12 ++++--------
 dlls/d3dx9_36/util.c          |    2 ++
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/dlls/d3dx9_36/tests/surface.c b/dlls/d3dx9_36/tests/surface.c
index 15336da..2f1f2a8 100644
--- a/dlls/d3dx9_36/tests/surface.c
+++ b/dlls/d3dx9_36/tests/surface.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -465,10 +465,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
 
     /* D3DXLoadSurfaceFromFile */
     if(testbitmap_ok) {
-        todo_wine {
-            hr = D3DXLoadSurfaceFromFileA(surf, NULL, NULL, "testbitmap.bmp", NULL, D3DX_DEFAULT, 0, NULL);
-            ok(hr == D3D_OK, "D3DXLoadSurfaceFromFile returned %#x, expected %#x\n", hr, D3D_OK);
-        }
+        hr = D3DXLoadSurfaceFromFileA(surf, NULL, NULL, "testbitmap.bmp", NULL, D3DX_DEFAULT, 0, NULL);
+        ok(hr == D3D_OK, "D3DXLoadSurfaceFromFile returned %#x, expected %#x\n", hr, D3D_OK);
 
         hr = D3DXLoadSurfaceFromFileA(NULL, NULL, NULL, "testbitmap.bmp", NULL, D3DX_DEFAULT, 0, NULL);
         ok(hr == D3DERR_INVALIDCALL, "D3DXLoadSurfaceFromFile returned %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -506,10 +504,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
 
 
     /* D3DXLoadSurfaceFromFileInMemory */
-    todo_wine {
-        hr = D3DXLoadSurfaceFromFileInMemory(surf, NULL, NULL, bmp01, sizeof(bmp01), NULL, D3DX_DEFAULT, 0, NULL);
-        ok(hr == D3D_OK, "D3DXLoadSurfaceFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
-    }
+    hr = D3DXLoadSurfaceFromFileInMemory(surf, NULL, NULL, bmp01, sizeof(bmp01), NULL, D3DX_DEFAULT, 0, NULL);
+    ok(hr == D3D_OK, "D3DXLoadSurfaceFromFileInMemory returned %#x, expected %#x\n", hr, D3D_OK);
 
     hr = D3DXLoadSurfaceFromFileInMemory(surf, NULL, NULL, noimage, sizeof(noimage), NULL, D3DX_DEFAULT, 0, NULL);
     ok(hr == D3DXERR_INVALIDDATA, "D3DXLoadSurfaceFromFileInMemory returned %#x, expected %#x\n", hr, D3DXERR_INVALIDDATA);
diff --git a/dlls/d3dx9_36/util.c b/dlls/d3dx9_36/util.c
index ad8a6ea..d936fb9 100644
--- a/dlls/d3dx9_36/util.c
+++ b/dlls/d3dx9_36/util.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -63,6 +63,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const PixelFormatDesc formats[] =
     {D3DFMT_A8,          {8,  0,  0,  0}, { 0,  0,  0,  0}, 1, 1, 1,  1, FORMAT_ARGB,    NULL,         NULL      },
     {D3DFMT_A8L8,        {8,  8,  0,  0}, { 8,  0,  0,  0}, 2, 1, 1,  2, FORMAT_ARGB,    la_from_rgba, la_to_rgba},
     {D3DFMT_A4L4,        {4,  4,  0,  0}, { 4,  0,  0,  0}, 1, 1, 1,  1, FORMAT_ARGB,    la_from_rgba, la_to_rgba},
+    {D3DFMT_L8,          {0,  8,  0,  0}, { 0,  0,  0,  0}, 1, 1, 1,  1, FORMAT_ARGB,    la_from_rgba, la_to_rgba},
+    {D3DFMT_L16,         {0, 16,  0,  0}, { 0,  0,  0,  0}, 2, 1, 1,  2, FORMAT_ARGB,    la_from_rgba, la_to_rgba},
     {D3DFMT_DXT1,        {0,  0,  0,  0}, { 0,  0,  0,  0}, 1, 4, 4,  8, FORMAT_ARGB,    NULL,         NULL      },
     {D3DFMT_DXT2,        {0,  0,  0,  0}, { 0,  0,  0,  0}, 1, 4, 4, 16, FORMAT_ARGB,    NULL,         NULL      },
     {D3DFMT_DXT3,        {0,  0,  0,  0}, { 0,  0,  0,  0}, 1, 4, 4, 16, FORMAT_ARGB,    NULL,         NULL      },



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85004">
    <title>=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Add a WARN toget_image_info_from_dds about too short DDS files.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85004</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 3a944738025b4f608e746b28f9ea747f5755e447
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3a944738025b4f608e746b28f9ea747f5755e447

Author: Józef Kucia &amp;lt;joseph.kucia&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue May 22 22:35:57 2012 +0200

d3dx9: Add a WARN to get_image_info_from_dds about too short DDS files.

---

 dlls/d3dx9_36/surface.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index 6b0786c..821d51e 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -372,7 +372,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT get_image_info_from_dds(const void *buffer, UINT length, D3DXIMAG
    expected_length *= faces;
    expected_length += sizeof(*header);
    if (length &amp;lt; expected_length)
+   {
+       WARN("File is too short %u, expected at least %u bytes\n", length, expected_length);
        return D3DXERR_INVALIDDATA;
+   }
 
    info-&amp;gt;ImageFileFormat = D3DXIFF_DDS;
 



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85003">
    <title>=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3dx9: Fix the expected_lengthcomputation for non-square DDS files.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85003</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: d313e4f9d3288bc9ee958a258bd4fd730af8cc8a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d313e4f9d3288bc9ee958a258bd4fd730af8cc8a

Author: Józef Kucia &amp;lt;joseph.kucia&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue May 22 22:35:56 2012 +0200

d3dx9: Fix the expected_length computation for non-square DDS files.

---

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

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index 28975b9..6b0786c 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -366,7 +366,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT get_image_info_from_dds(const void *buffer, UINT length, D3DXIMAG
        calculate_dds_surface_size(info, width, height, &amp;amp;pitch, &amp;amp;size);
        expected_length += size;
        width = max(1, width / 2);
-       height = max(1, width / 2);
+       height = max(1, height / 2);
    }
 
    expected_length *= faces;



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85002">
    <title>=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3d8: Return D3DERR_INVALIDCALLwhen IDirect3DCubeTexture8:: GetLevelDesc is called withinvalid level.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85002</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 7b1aa04b00796238c0abd1556d26c295e9ca3105
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7b1aa04b00796238c0abd1556d26c295e9ca3105

Author: Józef Kucia &amp;lt;joseph.kucia&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue May 22 22:19:33 2012 +0200

d3d8: Return D3DERR_INVALIDCALL when IDirect3DCubeTexture8::GetLevelDesc is called with invalid level.

---

 dlls/d3d8/texture.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/dlls/d3d8/texture.c b/dlls/d3d8/texture.c
index 14f8207..59bc693 100644
--- a/dlls/d3d8/texture.c
+++ b/dlls/d3d8/texture.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -628,6 +628,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI d3d8_texture_cube_GetLevelDesc(IDirect3DCubeTexture8 *ifac
     TRACE("iface %p, level %u, desc %p.\n", iface, level, desc);
 
     wined3d_mutex_lock();
+    if (level &amp;gt;= wined3d_texture_get_level_count(texture-&amp;gt;wined3d_texture))
+    {
+        wined3d_mutex_unlock();
+        return D3DERR_INVALIDCALL;
+    }
+
     if (!(sub_resource = wined3d_texture_get_sub_resource(texture-&amp;gt;wined3d_texture, level)))
         hr = D3DERR_INVALIDCALL;
     else



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85001">
    <title>=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3d8: Return D3DERR_INVALIDCALLwhen IDirect3DCubeTexture8:: GetCubeMapSurface is called withinvalid level.</title>
    <link>http://permalink.gmane.org/gmane.comp.emulators.wine.cvs/85001</link>
    <description>&lt;pre&gt;Module: wine
Branch: master
Commit: 707c3559a209441b1e585b46d41eafc0c18b7ba8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=707c3559a209441b1e585b46d41eafc0c18b7ba8

Author: Józef Kucia &amp;lt;joseph.kucia&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue May 22 22:19:32 2012 +0200

d3d8: Return D3DERR_INVALIDCALL when IDirect3DCubeTexture8::GetCubeMapSurface is called with invalid level.

---

 dlls/d3d8/texture.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/dlls/d3d8/texture.c b/dlls/d3d8/texture.c
index 6b5f95c..14f8207 100644
--- a/dlls/d3d8/texture.c
+++ b/dlls/d3d8/texture.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -656,11 +656,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static HRESULT WINAPI d3d8_texture_cube_GetCubeMapSurface(IDirect3DCubeTexture8
     struct wined3d_resource *sub_resource;
     struct d3d8_surface *surface_impl;
     UINT sub_resource_idx;
+    DWORD level_count;
 
     TRACE("iface %p, face %#x, level %u, surface %p.\n", iface, face, level, surface);
 
     wined3d_mutex_lock();
-    sub_resource_idx = wined3d_texture_get_level_count(texture-&amp;gt;wined3d_texture) * face + level;
+    level_count = wined3d_texture_get_level_count(texture-&amp;gt;wined3d_texture);
+    if (level &amp;gt;= level_count)
+    {
+        wined3d_mutex_unlock();
+        return D3DERR_INVALIDCALL;
+    }
+
+    sub_resource_idx = level_count * face + level;
     if (!(sub_resource = wined3d_texture_get_sub_resource(texture-&amp;gt;wined3d_texture, sub_resource_idx)))
     {
         wined3d_mutex_unlock();



&lt;/pre&gt;</description>
    <dc:creator>Alexandre Julliard</dc:creator>
    <dc:date>2012-05-23T18:22:54</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>

