From cbd440689d54c7bd362ef3912e3896475d6e10eb Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 19 Jul 2016 18:15:40 +0200 Subject: [PATCH] Rebase against a71128513767d44a8f42e10895578b650061bdce. [ntdll-NtUnmapViewOfSection] Removed patch to fix behavior of UnmapViewOfFile for Win9x (accepted upstream). [shell32-FolderItems_Stub_Iface] Removed patch to implement stubbed FolderItems interface (fixed upstream). --- ...wOfSection-must-succeed-for-all-offs.patch | 112 ------- ...-UnmapViewOfFile-on-Win-9X-when-addr.patch | 38 --- patches/ntdll-NtUnmapViewOfSection/definition | 1 - patches/patchinstall.sh | 39 +-- ...t-FolterImpl_Items-and-stubbed-Folde.patch | 290 ------------------ .../shell32-FolderItems_Stub_Iface/definition | 1 - .../wined3d-CSMT_Main/9999-IfDefined.patch | 46 +-- 7 files changed, 24 insertions(+), 503 deletions(-) delete mode 100644 patches/ntdll-NtUnmapViewOfSection/0001-ntdll-NtUnmapViewOfSection-must-succeed-for-all-offs.patch delete mode 100644 patches/ntdll-NtUnmapViewOfSection/0002-kernel32-Fail-in-UnmapViewOfFile-on-Win-9X-when-addr.patch delete mode 100644 patches/ntdll-NtUnmapViewOfSection/definition delete mode 100644 patches/shell32-FolderItems_Stub_Iface/0001-shell32-Implement-FolterImpl_Items-and-stubbed-Folde.patch delete mode 100644 patches/shell32-FolderItems_Stub_Iface/definition diff --git a/patches/ntdll-NtUnmapViewOfSection/0001-ntdll-NtUnmapViewOfSection-must-succeed-for-all-offs.patch b/patches/ntdll-NtUnmapViewOfSection/0001-ntdll-NtUnmapViewOfSection-must-succeed-for-all-offs.patch deleted file mode 100644 index f15846cb..00000000 --- a/patches/ntdll-NtUnmapViewOfSection/0001-ntdll-NtUnmapViewOfSection-must-succeed-for-all-offs.patch +++ /dev/null @@ -1,112 +0,0 @@ -From fcbd459e01f674633462156e45c77397e5af3e34 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Mon, 16 May 2016 18:50:55 +0200 -Subject: ntdll: NtUnmapViewOfSection must succeed for all offsets within the - mapped range. - ---- - dlls/kernel32/tests/virtual.c | 27 ++++++++++++++++++++++++++- - dlls/ntdll/tests/info.c | 6 +++--- - dlls/ntdll/virtual.c | 3 +-- - 3 files changed, 30 insertions(+), 6 deletions(-) - -diff --git a/dlls/kernel32/tests/virtual.c b/dlls/kernel32/tests/virtual.c -index 37206b5..552cbb4 100644 ---- a/dlls/kernel32/tests/virtual.c -+++ b/dlls/kernel32/tests/virtual.c -@@ -435,7 +435,7 @@ static void test_MapViewOfFile(void) - SetLastError(0xdeadbeef); - file = CreateFileA( testfile, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); - ok( file != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() ); -- SetFilePointer( file, 4096, NULL, FILE_BEGIN ); -+ SetFilePointer( file, 12288, NULL, FILE_BEGIN ); - SetEndOfFile( file ); - - /* read/write mapping */ -@@ -994,6 +994,31 @@ static void test_MapViewOfFile(void) - ok(info.State == MEM_FREE, "%#x != MEM_FREE\n", info.State); - ok(info.Type == 0, "%#x != 0\n", info.Type); - -+ mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 12288, NULL ); -+ ok( mapping != 0, "CreateFileMappingA failed with error %u\n", GetLastError() ); -+ -+ ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 12288 ); -+ ok( ptr != NULL, "MapViewOfFile failed with error %u\n", GetLastError() ); -+ -+ ret = UnmapViewOfFile( (char *)ptr + 100 ); -+ ok( ret, "UnmapViewOfFile failed with error %u\n", GetLastError() ); -+ if (!ret) UnmapViewOfFile( ptr ); -+ -+ ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 12288 ); -+ ok( ptr != NULL, "MapViewOfFile failed with error %u\n", GetLastError() ); -+ -+ ret = UnmapViewOfFile( (char *)ptr + 4096 ); -+ ok( ret, "UnmapViewOfFile failed with error %u\n", GetLastError() ); -+ if (!ret) UnmapViewOfFile( ptr ); -+ -+ ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 12288 ); -+ ok( ptr != NULL, "MapViewOfFile failed with error %u\n", GetLastError() ); -+ -+ ret = UnmapViewOfFile( (char *)ptr + 4096 + 100 ); -+ ok( ret, "UnmapViewOfFile failed with error %u\n", GetLastError() ); -+ if (!ret) UnmapViewOfFile( ptr ); -+ -+ CloseHandle(mapping); - CloseHandle(file); - DeleteFileA(testfile); - } -diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c -index be355fb..19c7d66 100644 ---- a/dlls/ntdll/tests/info.c -+++ b/dlls/ntdll/tests/info.c -@@ -1643,7 +1643,7 @@ static void test_mapprotection(void) - status = pNtSetInformationProcess( GetCurrentProcess(), ProcessExecuteFlags, &flags, sizeof(flags) ); - ok( (status == STATUS_SUCCESS) || (status == STATUS_INVALID_INFO_CLASS), "Expected STATUS_SUCCESS, got %08x\n", status); - -- size.u.LowPart = 0x1000; -+ size.u.LowPart = 0x2000; - size.u.HighPart = 0; - status = pNtCreateSection ( &h, - STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_READ | SECTION_MAP_WRITE | SECTION_MAP_EXECUTE, -@@ -1657,7 +1657,7 @@ static void test_mapprotection(void) - - offset.u.LowPart = 0; - offset.u.HighPart = 0; -- count = 0x1000; -+ count = 0x2000; - addr = NULL; - status = pNtMapViewOfSection ( h, GetCurrentProcess(), &addr, 0, 0, &offset, &count, ViewShare, 0, PAGE_READWRITE); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); -@@ -1680,7 +1680,7 @@ static void test_mapprotection(void) - ok( retlen == sizeof(info), "Expected STATUS_SUCCESS, got %08x\n", status); - ok((info.Protect & ~PAGE_NOCACHE) == PAGE_READWRITE, "addr.Protect is not PAGE_READWRITE, but 0x%x\n", info.Protect); - -- status = pNtUnmapViewOfSection (GetCurrentProcess(), addr); -+ status = pNtUnmapViewOfSection( GetCurrentProcess(), (char *)addr + 0x1050 ); - ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status); - pNtClose (h); - -diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c -index 5c43d26..27daf96 100644 ---- a/dlls/ntdll/virtual.c -+++ b/dlls/ntdll/virtual.c -@@ -2723,7 +2723,6 @@ NTSTATUS WINAPI NtUnmapViewOfSection( HANDLE process, PVOID addr ) - struct file_view *view; - NTSTATUS status = STATUS_NOT_MAPPED_VIEW; - sigset_t sigset; -- void *base = ROUND_ADDR( addr, page_mask ); - - if (process != NtCurrentProcess()) - { -@@ -2740,7 +2739,7 @@ NTSTATUS WINAPI NtUnmapViewOfSection( HANDLE process, PVOID addr ) - } - - server_enter_uninterrupted_section( &csVirtual, &sigset ); -- if ((view = VIRTUAL_FindView( base, 0 )) && (base == view->base) && !(view->protect & VPROT_VALLOC)) -+ if ((view = VIRTUAL_FindView( addr, 0 )) && !(view->protect & VPROT_VALLOC)) - { - delete_view( view ); - status = STATUS_SUCCESS; --- -2.8.0 - diff --git a/patches/ntdll-NtUnmapViewOfSection/0002-kernel32-Fail-in-UnmapViewOfFile-on-Win-9X-when-addr.patch b/patches/ntdll-NtUnmapViewOfSection/0002-kernel32-Fail-in-UnmapViewOfFile-on-Win-9X-when-addr.patch deleted file mode 100644 index 6f3ea667..00000000 --- a/patches/ntdll-NtUnmapViewOfSection/0002-kernel32-Fail-in-UnmapViewOfFile-on-Win-9X-when-addr.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 6ca6102f0f4c52dee00013a8e1d0d924f4b6c5a7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Sat, 14 May 2016 17:21:54 +0200 -Subject: kernel32: Fail in UnmapViewOfFile on Win 9X when addr is not a base - address of a mapping. - ---- - dlls/kernel32/virtual.c | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - -diff --git a/dlls/kernel32/virtual.c b/dlls/kernel32/virtual.c -index 32f2d65..7e9c2f3 100644 ---- a/dlls/kernel32/virtual.c -+++ b/dlls/kernel32/virtual.c -@@ -576,7 +576,19 @@ LPVOID WINAPI MapViewOfFileEx( HANDLE handle, DWORD access, - */ - BOOL WINAPI UnmapViewOfFile( LPCVOID addr ) - { -- NTSTATUS status = NtUnmapViewOfSection( GetCurrentProcess(), (void *)addr ); -+ NTSTATUS status; -+ -+ if (GetVersion() & 0x80000000) -+ { -+ MEMORY_BASIC_INFORMATION info; -+ if (!VirtualQuery( addr, &info, sizeof(info) ) || info.AllocationBase != addr) -+ { -+ SetLastError( ERROR_INVALID_ADDRESS ); -+ return FALSE; -+ } -+ } -+ -+ status = NtUnmapViewOfSection( GetCurrentProcess(), (void *)addr ); - if (status) SetLastError( RtlNtStatusToDosError(status) ); - return !status; - } --- -2.8.0 - diff --git a/patches/ntdll-NtUnmapViewOfSection/definition b/patches/ntdll-NtUnmapViewOfSection/definition deleted file mode 100644 index 990868f8..00000000 --- a/patches/ntdll-NtUnmapViewOfSection/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [2905] UnmapViewOfFile should fail on Win9x when addr is not the base address of a mapping diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index e7d32c0e..d5672448 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "adde9fadebe07c30ecc9f12685751fb78b3473c5" + echo "a71128513767d44a8f42e10895578b650061bdce" } # Show version information @@ -220,7 +220,6 @@ patch_enable_all () enable_ntdll_NtQueryEaFile="$1" enable_ntdll_NtQuerySection="$1" enable_ntdll_NtSetLdtEntries="$1" - enable_ntdll_NtUnmapViewOfSection="$1" enable_ntdll_OSX_TEB_x86_64="$1" enable_ntdll_Pipe_SpecialCharacters="$1" enable_ntdll_ProcessQuotaLimits="$1" @@ -298,7 +297,6 @@ patch_enable_all () enable_shell32_Context_Menu="$1" enable_shell32_Default_Path="$1" enable_shell32_File_Property_Dialog="$1" - enable_shell32_FolderItems_Stub_Iface="$1" enable_shell32_IDragSourceHelper="$1" enable_shell32_Icons="$1" enable_shell32_Microsoft_Windows_Themes="$1" @@ -835,9 +833,6 @@ patch_enable () ntdll-NtSetLdtEntries) enable_ntdll_NtSetLdtEntries="$2" ;; - ntdll-NtUnmapViewOfSection) - enable_ntdll_NtUnmapViewOfSection="$2" - ;; ntdll-OSX_TEB_x86_64) enable_ntdll_OSX_TEB_x86_64="$2" ;; @@ -1069,9 +1064,6 @@ patch_enable () shell32-File_Property_Dialog) enable_shell32_File_Property_Dialog="$2" ;; - shell32-FolderItems_Stub_Iface) - enable_shell32_FolderItems_Stub_Iface="$2" - ;; shell32-IDragSourceHelper) enable_shell32_IDragSourceHelper="$2" ;; @@ -4966,23 +4958,6 @@ if test "$enable_ntdll_NtSetLdtEntries" -eq 1; then ) >> "$patchlist" fi -# Patchset ntdll-NtUnmapViewOfSection -# | -# | This patchset fixes the following Wine bugs: -# | * [#2905] UnmapViewOfFile should fail on Win9x when addr is not the base address of a mapping -# | -# | Modified files: -# | * dlls/kernel32/tests/virtual.c, dlls/kernel32/virtual.c, dlls/ntdll/tests/info.c, dlls/ntdll/virtual.c -# | -if test "$enable_ntdll_NtUnmapViewOfSection" -eq 1; then - patch_apply ntdll-NtUnmapViewOfSection/0001-ntdll-NtUnmapViewOfSection-must-succeed-for-all-offs.patch - patch_apply ntdll-NtUnmapViewOfSection/0002-kernel32-Fail-in-UnmapViewOfFile-on-Win-9X-when-addr.patch - ( - echo '+ { "Michael Müller", "ntdll: NtUnmapViewOfSection must succeed for all offsets within the mapped range.", 1 },'; - echo '+ { "Michael Müller", "kernel32: Fail in UnmapViewOfFile on Win 9X when addr is not a base address of a mapping.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-OSX_TEB_x86_64 # | # | Modified files: @@ -6196,18 +6171,6 @@ if test "$enable_shell32_File_Property_Dialog" -eq 1; then ) >> "$patchlist" fi -# Patchset shell32-FolderItems_Stub_Iface -# | -# | Modified files: -# | * dlls/shell32/shell32_main.h, dlls/shell32/shelldispatch.c -# | -if test "$enable_shell32_FolderItems_Stub_Iface" -eq 1; then - patch_apply shell32-FolderItems_Stub_Iface/0001-shell32-Implement-FolterImpl_Items-and-stubbed-Folde.patch - ( - echo '+ { "Christian Costa", "shell32: Implement FolderImpl_Items and stubbed FolderItems interface.", 1 },'; - ) >> "$patchlist" -fi - # Patchset shell32-IDragSourceHelper # | # | This patchset fixes the following Wine bugs: diff --git a/patches/shell32-FolderItems_Stub_Iface/0001-shell32-Implement-FolterImpl_Items-and-stubbed-Folde.patch b/patches/shell32-FolderItems_Stub_Iface/0001-shell32-Implement-FolterImpl_Items-and-stubbed-Folde.patch deleted file mode 100644 index 7a5770b2..00000000 --- a/patches/shell32-FolderItems_Stub_Iface/0001-shell32-Implement-FolterImpl_Items-and-stubbed-Folde.patch +++ /dev/null @@ -1,290 +0,0 @@ -From 668d55704db4f9ccbc91cf38eaa912448305e285 Mon Sep 17 00:00:00 2001 -From: Christian Costa -Date: Thu, 3 Sep 2015 12:08:54 -0300 -Subject: shell32: Implement FolderImpl_Items and stubbed FolderItems - interface. - ---- - dlls/shell32/shell32_main.h | 1 + - dlls/shell32/shelldispatch.c | 224 ++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 222 insertions(+), 3 deletions(-) - -diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h -index 492f79f..9142681 100644 ---- a/dlls/shell32/shell32_main.h -+++ b/dlls/shell32/shell32_main.h -@@ -235,6 +235,7 @@ enum tid_t { - IShellFolderViewDual3_tid, - Folder3_tid, - FolderItem2_tid, -+ FolderItems_tid, - FolderItemVerb_tid, - FolderItemVerbs_tid, - LAST_tid -diff --git a/dlls/shell32/shelldispatch.c b/dlls/shell32/shelldispatch.c -index f5eca28..130047a 100644 ---- a/dlls/shell32/shelldispatch.c -+++ b/dlls/shell32/shelldispatch.c -@@ -48,6 +48,7 @@ static const IID * const tid_ids[] = - &IID_IShellFolderViewDual3, - &IID_Folder3, - &IID_FolderItem2, -+ &IID_FolderItems, - &IID_FolderItemVerb, - &IID_FolderItemVerbs - }; -@@ -71,6 +72,12 @@ typedef struct { - } FolderItemImpl; - - typedef struct { -+ FolderItems FolderItems_iface; -+ LONG ref; -+ VARIANT dir; -+} FolderItemsImpl; -+ -+typedef struct { - FolderItemVerbs FolderItemVerbs_iface; - LONG ref; - -@@ -102,6 +109,11 @@ static inline FolderItemImpl *impl_from_FolderItem(FolderItem2 *iface) - return CONTAINING_RECORD(iface, FolderItemImpl, FolderItem2_iface); - } - -+static inline FolderItemsImpl *impl_from_FolderItems(FolderItems *iface) -+{ -+ return CONTAINING_RECORD(iface, FolderItemsImpl, FolderItems_iface); -+} -+ - static inline FolderItemVerbsImpl *impl_from_FolderItemVerbs(FolderItemVerbs *iface) - { - return CONTAINING_RECORD(iface, FolderItemVerbsImpl, FolderItemVerbs_iface); -@@ -939,6 +951,211 @@ static HRESULT FolderItem_Constructor(VARIANT *dir, FolderItem **ppfi) - return ret; - } - -+static HRESULT WINAPI FolderItemsImpl_QueryInterface(FolderItems *iface, -+ REFIID riid, LPVOID *ppv) -+{ -+ FolderItemsImpl *This = impl_from_FolderItems(iface); -+ -+ TRACE("(%p,%p,%p)\n", iface, riid, ppv); -+ -+ if (!ppv) return E_INVALIDARG; -+ -+ if (IsEqualIID(&IID_IUnknown, riid) || -+ IsEqualIID(&IID_IDispatch, riid) || -+ IsEqualIID(&IID_FolderItems, riid)) -+ *ppv = &This->FolderItems_iface; -+ else -+ { -+ FIXME("not implemented for %s\n", shdebugstr_guid(riid)); -+ *ppv = NULL; -+ return E_NOINTERFACE; -+ } -+ IUnknown_AddRef((IUnknown*)*ppv); -+ return S_OK; -+} -+ -+static ULONG WINAPI FolderItemsImpl_AddRef(FolderItems *iface) -+{ -+ FolderItemsImpl *This = impl_from_FolderItems(iface); -+ ULONG ref = InterlockedIncrement(&This->ref); -+ -+ TRACE("(%p), new refcount=%i\n", iface, ref); -+ -+ return ref; -+} -+ -+static ULONG WINAPI FolderItemsImpl_Release(FolderItems *iface) -+{ -+ FolderItemsImpl *This = impl_from_FolderItems(iface); -+ ULONG ref = InterlockedDecrement(&This->ref); -+ -+ TRACE("(%p), new refcount=%i\n", iface, ref); -+ -+ if (!ref) -+ { -+ VariantClear(&This->dir); -+ HeapFree(GetProcessHeap(), 0, This); -+ } -+ return ref; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_GetTypeInfoCount(FolderItems *iface, -+ UINT *pctinfo) -+{ -+ TRACE("(%p,%p)\n", iface, pctinfo); -+ -+ *pctinfo = 1; -+ return S_OK; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_GetTypeInfo(FolderItems *iface, UINT iTInfo, -+ LCID lcid, ITypeInfo **ppTInfo) -+{ -+ HRESULT hr; -+ -+ TRACE("(%p,%u,%d,%p)\n", iface, iTInfo, lcid, ppTInfo); -+ -+ hr = get_typeinfo(FolderItems_tid, ppTInfo); -+ if (SUCCEEDED(hr)) -+ ITypeInfo_AddRef(*ppTInfo); -+ return hr; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_GetIDsOfNames(FolderItems *iface, -+ REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, -+ DISPID *rgDispId) -+{ -+ ITypeInfo *ti; -+ HRESULT hr; -+ -+ TRACE("(%p,%p,%p,%u,%d,%p)\n", iface, riid, rgszNames, cNames, lcid, -+ rgDispId); -+ -+ hr = get_typeinfo(FolderItems_tid, &ti); -+ if (SUCCEEDED(hr)) -+ hr = ITypeInfo_GetIDsOfNames(ti, rgszNames, cNames, rgDispId); -+ return hr; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_Invoke(FolderItems *iface, -+ DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, -+ DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, -+ UINT *puArgErr) -+{ -+ FolderItemsImpl *This = impl_from_FolderItems(iface); -+ ITypeInfo *ti; -+ HRESULT hr; -+ -+ TRACE("(%p,%d,%p,%d,%u,%p,%p,%p,%p)\n", iface, dispIdMember, riid, lcid, -+ wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); -+ -+ hr = get_typeinfo(FolderItems_tid, &ti); -+ if (SUCCEEDED(hr)) -+ hr = ITypeInfo_Invoke(ti, This, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); -+ return hr; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_get_Count(FolderItems *iface, LONG *plCount) -+{ -+ FIXME("(%p,%p): stub\n", iface, plCount); -+ -+ if (!plCount) -+ return E_POINTER; -+ -+ *plCount = 0; -+ -+ return S_OK; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_get_Application(FolderItems *iface, IDispatch **ppid) -+{ -+ FIXME("(%p,%p): stub\n", iface, ppid); -+ -+ if (!ppid) -+ return E_POINTER; -+ -+ *ppid = NULL; -+ -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_get_Parent(FolderItems *iface, IDispatch **ppid) -+{ -+ FIXME("(%p,%p): stub\n", iface, ppid); -+ -+ if (!ppid) -+ return E_POINTER; -+ -+ *ppid = NULL; -+ -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI FolderItemsImpl_Item(FolderItems *iface, VARIANT index, FolderItem **ppid) -+{ -+ FIXME("(%p,%s,%p): stub\n", iface, debugstr_variant(&index), ppid); -+ -+ if (!ppid) -+ return E_POINTER; -+ -+ *ppid = NULL; -+ -+ return E_NOTIMPL; -+} -+ -+static HRESULT WINAPI FolderItemsImpl__NewEnum(FolderItems *iface, IUnknown **ppunk) -+{ -+ FIXME("(%p,%p): stub\n", iface, ppunk); -+ -+ if (!ppunk) -+ return E_POINTER; -+ -+ *ppunk = NULL; -+ -+ return E_NOTIMPL; -+} -+ -+static const FolderItemsVtbl FolderItemsImpl_Vtbl = { -+ FolderItemsImpl_QueryInterface, -+ FolderItemsImpl_AddRef, -+ FolderItemsImpl_Release, -+ FolderItemsImpl_GetTypeInfoCount, -+ FolderItemsImpl_GetTypeInfo, -+ FolderItemsImpl_GetIDsOfNames, -+ FolderItemsImpl_Invoke, -+ FolderItemsImpl_get_Count, -+ FolderItemsImpl_get_Application, -+ FolderItemsImpl_get_Parent, -+ FolderItemsImpl_Item, -+ FolderItemsImpl__NewEnum -+}; -+ -+static HRESULT FolderItems_Constructor(VARIANT *dir, FolderItems **ppfi) -+{ -+ FolderItemsImpl *This; -+ HRESULT ret; -+ -+ TRACE("%s\n", debugstr_variant(dir)); -+ -+ *ppfi = NULL; -+ -+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(FolderItemsImpl)); -+ if (!This) return E_OUTOFMEMORY; -+ This->FolderItems_iface.lpVtbl = &FolderItemsImpl_Vtbl; -+ This->ref = 1; -+ -+ VariantInit(&This->dir); -+ ret = VariantCopy(&This->dir, dir); -+ if (FAILED(ret)) -+ { -+ HeapFree(GetProcessHeap(), 0, This); -+ return E_OUTOFMEMORY; -+ } -+ -+ *ppfi = (FolderItems*)&This->FolderItems_iface; -+ return ret; -+} -+ - static HRESULT WINAPI FolderImpl_QueryInterface(Folder3 *iface, REFIID riid, - LPVOID *ppv) - { -@@ -1091,10 +1308,11 @@ static HRESULT WINAPI FolderImpl_get_ParentFolder(Folder3 *iface, Folder **ppsf) - - static HRESULT WINAPI FolderImpl_Items(Folder3 *iface, FolderItems **ppid) - { -- FIXME("(%p,%p)\n", iface, ppid); -+ FolderImpl *This = impl_from_Folder(iface); - -- *ppid = NULL; -- return E_NOTIMPL; -+ TRACE("(%p,%p)\n", iface, ppid); -+ -+ return FolderItems_Constructor(&This->dir, ppid); - } - - static HRESULT WINAPI FolderImpl_ParseName(Folder3 *iface, BSTR name, FolderItem **item) --- -2.5.1 - diff --git a/patches/shell32-FolderItems_Stub_Iface/definition b/patches/shell32-FolderItems_Stub_Iface/definition deleted file mode 100644 index 13516d76..00000000 --- a/patches/shell32-FolderItems_Stub_Iface/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: Implement FolderImpl_Items and stubbed FolderItems interface diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index bcf49e65..729862e0 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -144,7 +144,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c return; -@@ -461,8 +477,12 @@ void buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *co +@@ -460,8 +476,12 @@ void buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_context *co data->buffer_object = buffer->buffer_object; if (!buffer->buffer_object) { @@ -157,7 +157,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c { buffer_create_buffer_object(buffer, context); if (buffer->buffer_object) -@@ -500,7 +520,9 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *buffer, struct wined3d_context *c +@@ -499,7 +519,9 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *buffer, struct wined3d_context *c if (!wined3d_resource_allocate_sysmem(&buffer->resource)) ERR("Failed to allocate system memory.\n"); @@ -167,7 +167,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c buffer_bind(buffer, context); GL_EXTCALL(glGetBufferSubData(buffer->buffer_type_hint, 0, buffer->resource.size, buffer->resource.heap_memory)); -@@ -674,6 +696,7 @@ drop_query: +@@ -673,6 +695,7 @@ drop_query: /* The caller provides a GL context */ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined3d_gl_info *gl_info, DWORD flags) { @@ -175,7 +175,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c UINT start = 0, len = 0; /* This potentially invalidates the element array buffer binding, but the -@@ -697,6 +720,45 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined +@@ -696,6 +719,45 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined GL_EXTCALL(glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)); checkGLcall("glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)"); This->flags &= ~WINED3D_BUFFER_APPLESYNC; @@ -221,7 +221,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c } while (This->modified_areas) -@@ -705,12 +767,33 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined +@@ -704,12 +766,33 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined start = This->maps[This->modified_areas].offset; len = This->maps[This->modified_areas].size; @@ -255,7 +255,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c { buffer->flags &= ~(WINED3D_BUFFER_SYNC | WINED3D_BUFFER_DISCARD); } -@@ -729,6 +812,14 @@ void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_conte +@@ -728,6 +811,14 @@ void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_conte TRACE("buffer %p.\n", buffer); @@ -270,7 +270,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c buffer_mark_used(buffer); if (!buffer->buffer_object) -@@ -904,6 +995,7 @@ void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_conte +@@ -903,6 +994,7 @@ void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_conte void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) { @@ -278,7 +278,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c struct wined3d_device *device = buffer->resource.device; if (buffer->resource.map_count) -@@ -913,6 +1005,12 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) +@@ -912,6 +1004,12 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) } wined3d_cs_emit_buffer_preload(device->cs, buffer); @@ -291,7 +291,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c } struct wined3d_resource * CDECL wined3d_buffer_get_resource(struct wined3d_buffer *buffer) -@@ -926,6 +1024,7 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -925,6 +1023,7 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN { LONG count; BYTE *base; @@ -299,7 +299,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c struct wined3d_device *device = buffer->resource.device; struct wined3d_context *context; -@@ -949,6 +1048,10 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -948,6 +1047,10 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN { wined3d_cs_emit_create_vbo(device->cs, buffer); } @@ -310,7 +310,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c flags = wined3d_resource_sanitize_map_flags(&buffer->resource, flags); /* Filter redundant WINED3D_MAP_DISCARD maps. The 3DMark2001 multitexture -@@ -957,7 +1060,11 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -956,7 +1059,11 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN * previous contents of the buffer. The r600g driver only does this when * the buffer is currently in use, while the proprietary NVIDIA driver * appears to do this unconditionally. */ @@ -322,7 +322,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c flags &= ~WINED3D_MAP_DISCARD; count = ++buffer->resource.map_count; -@@ -968,6 +1075,7 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -967,6 +1074,7 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN * being uploaded in that case. Two such applications are Port Royale * and Darkstar One. */ if (flags & WINED3D_MAP_DISCARD) @@ -330,7 +330,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c wined3d_cs_emit_buffer_invalidate_bo_range(device->cs, buffer, 0, 0); else if (!(flags & WINED3D_MAP_READONLY)) wined3d_cs_emit_buffer_invalidate_bo_range(device->cs, buffer, offset, size); -@@ -985,6 +1093,19 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -984,6 +1092,19 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN wined3d_cs_emit_glfinish(device->cs); device->cs->ops->finish(device->cs); } @@ -350,7 +350,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c context = context_acquire(device, NULL); gl_info = context->gl_info; -@@ -1030,6 +1151,7 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -1029,6 +1150,7 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN buffer_get_sysmem(buffer, context); } TRACE("New pointer is %p.\n", buffer->resource.heap_memory); @@ -358,7 +358,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c } context_release(context); } -@@ -1069,6 +1191,21 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN +@@ -1068,6 +1190,21 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN } base = buffer->map_ptr ? buffer->map_ptr : buffer->resource.map_heap_memory; @@ -380,7 +380,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c *data = base + offset; TRACE("Returning memory at %p (base %p, offset %u).\n", *data, base, offset); -@@ -1131,6 +1268,7 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer) +@@ -1130,6 +1267,7 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer) } GL_EXTCALL(glUnmapBuffer(buffer->buffer_type_hint)); @@ -388,7 +388,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c if (wined3d_settings.cs_multithreaded) gl_info->gl_ops.gl.p_glFinish(); else if (wined3d_settings.strict_draw_ordering) -@@ -1139,6 +1277,18 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer) +@@ -1138,6 +1276,18 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer) buffer_clear_dirty_areas(buffer); buffer->map_ptr = NULL; @@ -407,7 +407,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c } } -@@ -1331,7 +1481,9 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device +@@ -1330,7 +1480,9 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device return hr; } buffer->buffer_type_hint = bind_hint; @@ -417,7 +417,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c TRACE("size %#x, usage %#x, format %s, memory @ %p, iface @ %p.\n", buffer->resource.size, buffer->resource.usage, debug_d3dformat(buffer->resource.format->id), buffer->resource.heap_memory, buffer); -@@ -1367,9 +1519,11 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device +@@ -1366,9 +1518,11 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device buffer->flags |= WINED3D_BUFFER_USE_BO; } @@ -429,7 +429,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c if (!(buffer->maps = HeapAlloc(GetProcessHeap(), 0, sizeof(*buffer->maps)))) { ERR("Out of memory.\n"); -@@ -1497,6 +1651,7 @@ HRESULT CDECL wined3d_buffer_create_ib(struct wined3d_device *device, UINT size, +@@ -1496,6 +1650,7 @@ HRESULT CDECL wined3d_buffer_create_ib(struct wined3d_device *device, UINT size, return WINED3D_OK; } @@ -437,7 +437,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c void buffer_swap_mem(struct wined3d_buffer *buffer, BYTE *mem) { -@@ -1504,3 +1659,4 @@ void buffer_swap_mem(struct wined3d_buffer *buffer, BYTE *mem) +@@ -1503,3 +1658,4 @@ void buffer_swap_mem(struct wined3d_buffer *buffer, BYTE *mem) buffer->resource.heap_memory = mem; buffer->flags |= WINED3D_BUFFER_DISCARD; } @@ -6176,7 +6176,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -4481,7 +4481,11 @@ void get_projection_matrix(const struct wined3d_context *context, const struct w +@@ -4494,7 +4494,11 @@ void get_projection_matrix(const struct wined3d_context *context, const struct w float y_offset = context->render_offscreen ? (center_offset - (2.0f * y) - h) / h : (center_offset - (2.0f * y) - h) / -h; @@ -6188,7 +6188,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; float z_scale = zenable ? 2.0f : 0.0f; float z_offset = zenable ? -1.0f : 0.0f; -@@ -5278,7 +5282,11 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d +@@ -5291,7 +5295,11 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d break; } }